Jump to content

Archived

This topic is now archived and is closed to further replies.

reyere

Envio de correo masivo con varios adjuntos y firma(jpg)

Recommended Posts

Salu2...!

Es la primera vez que escribo acá.....

Lo cierto es que necesito, porfa me ayuden con una macro. La función debe ser la referida en el texto y hasta ahora, la que tengo funciona bien; solo tengo un problema con la adición de adjuntos múltiples, ya que de momento debo colocar la dirección del 2do adjunto manualmente pues no la toma como la primera y no se como formatear el cuerpo del texto a .html para que agregue al final una imagen .jpg que sea como la firma del correo.

De forma que si por favor me ayudasen con estos inconvenientes y con cualquier error en que detecten en el código se los agradeceré muchísimo.

Sub envio_mail2()

Application.ScreenUpdating = False

Dim OutlookOBJ As Object
Dim mItem As Object
Dim ruta_archivo, ruta_archivo2 As String

Range("A5").Select
Range(Selection, Selection.End(xlDown)).Select
nume_regi = Selection.Count

ruta_archivo = Cells(13, 5).Value
ruta_archivo2 = Cells(14, 5).Value


For i = 1 To nume_regi
Set OutlookOBJ = CreateObject("Outlook.Application")
Set mItem = OutlookOBJ.CreateItem(olMailItem)

Enviara = Cells(5 + i, 3)
asunto = Cells(2, 5)
Cuerpo = Cells(5, 5)
empresa = Cells(5 + i, 2)
persona = Cells(5 + i, 1)
copia = Cells(1, 2)

With mItem
.to = Enviara
If .to = "" Then GoTo ende
.Cc = copia
.Subject = asunto & " para " & empresa
.Body = "Saludos Cordiales" & vbCrLf & "Lic. " & persona & vbCrLf & vbCrLf & Cuerpo & vbCrLf & vbCrLf

'.Send
End With
If ruta_archivo <> "" Then
With mItem
.attachments.Add (ruta_archivo)
.attachments.Add (ruta_archivo2)
End With

End If
With mItem
.display
On Error Resume Next
.send
End With

Next i

Range("A5").Select

Application.ScreenUpdating = True
Set OutlookOBJ = Nothing
Set mItem = Nothing
On Error GoTo ende
MsgBox ("Finalizado se enviaron " & nume_regi & " Correos con exito")
Exit Sub

ende:
MsgBox "Verifica si ya salieron los mails"

End Sub

Sub selec_archivo()

On Error GoTo a2

ruta_archivo = Application.GetOpenFilename(Title:="Selecciona el archivo para Mail")

If ruta_archivo = False Then
Exit Sub
Else
Cells(13, 5).Value = ruta_archivo

End If
a2:

End Sub

Sub selec_archivo2()

On Error GoTo a3

ruta_archivo2 = Application.GetOpenFilename(Title:="Selecciona el archivo para Mail")

If ruta_archivo = False Then
Exit Sub
Else
Cells(14, 5).Value = ruta_archivo2

End If
a3: MsgBox "archivo no agregado"

End Sub
[/CODE]

Share this post


Link to post
Share on other sites

Hola,

Esperame hasta el martes, ya que no laboro el lunes. Allá tengo el código para agregar la firma predeterminada al mensaje, con formatos y también varios adjuntos, claro si es que alguien más no te presta ayuda hasta entonces.

Slds.-

Share this post


Link to post
Share on other sites

Gracias, Cesar Lo esperare con gusto.

Salu2

Hola,

Esperame hasta el martes, ya que no laboro el lunes. Allá tengo el código para agregar la firma predeterminada al mensaje, con formatos y también varios adjuntos, claro si es que alguien más no te presta ayuda hasta entonces.

Slds.-

Share this post


Link to post
Share on other sites

César,

Hace poco programé algo parecido para un cliente, tengo una pregunta...

En tu código muestras el correo con el .display lo cual hace que aparezca en pantalla el mensaje a enviar. ¿Sabes si es posible evitar que aparezca el mensaje en pantalla y a la vez poder adjuntar imágenes o la misma firma predeterminada? Supongo que utilizas el .display para adjuntar la firma predeterminada y luego colocar el texto del mensaje. Cuando se envían varios e-mails seguidos a mi se me producía un pequeño parpadeo que no supe como evitar debido al .display.

Saludos.

Share this post


Link to post
Share on other sites

Hola José. Si,

La verdad que me es molesto y tampoco supe como evitar ese parpadeo, por más que investigué. Supongo que es debido a que se utiliza otra aplicación (outlook) y que no indicamos un screenupdating=false como en excel. Espero encontrar la solución pronto ya que en envios de correo masivos molesta.

Slds.-

Share this post


Link to post
Share on other sites

Hola, fijate que en el codigo que comparti esta Application.ScreenUpdating = False y al final lo cambio a True lo que evita el parpadeo.

Saludos

César,

Hace poco programé algo parecido para un cliente, tengo una pregunta...

En tu código muestras el correo con el .display lo cual hace que aparezca en pantalla el mensaje a enviar. ¿Sabes si es posible evitar que aparezca el mensaje en pantalla y a la vez poder adjuntar imágenes o la misma firma predeterminada? Supongo que utilizas el .display para adjuntar la firma predeterminada y luego colocar el texto del mensaje. Cuando se envían varios e-mails seguidos a mi se me producía un pequeño parpadeo que no supe como evitar debido al .display.

Saludos.

Share this post


Link to post
Share on other sites

Gerson,

En teoría se usa el .Display para conseguir que en la firma se añadan algunas imágenes, logo de la empresa, etc.

Yo he probado a añadir imágenes en el cuerpo o firma del e-mail en formato HTML y a algunos e-mails donde he enviado el mensaje no les llegan las imágenes o no las pueden visualizar por algún motivo. De ahí que se use el truco del .display.

Espero haberme explicado, supongo que César lo ha hecho por el mismo motivo.

Saludos.

Share this post


Link to post
Share on other sites
Gerson,

En teoría se usa el .Display para conseguir que en la firma se añadan algunas imágenes, logo de la empresa, etc.

Yo he probado a añadir imágenes en el cuerpo o firma del e-mail en formato HTML y a algunos e-mails donde he enviado el mensaje no les llegan las imágenes o no las pueden visualizar por algún motivo. De ahí que se use el truco del .display.

Espero haberme explicado, supongo que César lo ha hecho por el mismo motivo.

Saludos.

A ver asi

Sub OutlookMail_2(ByVal adjunto As String, Optional ByVal c_recaudadora As String)

Dim applOL As Outlook.Application
Dim miOL As Outlook.MailItem

Set applOL = New Outlook.Application
Set miOL = applOL.CreateItem(0)

With miOL
.To = "micorreo"
.Subject = "Nombre asunto" & "-" & Format(Now(), "dd-MM-yyyy")
.HTMLBody = "<font size=2 face='Arial' color=1F497D>" & _
"Algun comentario" & "<br>" & "<br>"

Call CrearImagen("Correo", "A6:A12", "ArchivoJPG")
TempFilePath = Environ$("temp") & "\"
.Attachments.Add TempFilePath & "ArchivoJPG.jpg", olByValue, 0

.HTMLBody = .HTMLBody & "<img src='cid:ArchivoJPG.jpg'" & _
"width='650' height='80'><br>" & "<br>Best Regards,<br>Ed</font></span>" & _
"<br>" & "<br>" & "</font>" & "agregar firma"

.Attachments.Add adjunto
.Attachments.Add c_recaudadora
.Send
End With

Set applOL = Nothing
Set miOL = Nothing

End Sub

Sub CrearImagen(Hoja As String, MiRango As String, NombreJpg As String)

ThisWorkbook.Activate: Worksheets(Hoja).Activate
Set RangoImagen = ThisWorkbook.Worksheets(Hoja).Range(MiRango)

RangoImagen.CopyPicture
With ThisWorkbook.Worksheets(Hoja).ChartObjects.Add(RangoImagen.Left, _
RangoImagen.Top, RangoImagen.Width, RangoImagen.Height)
.Activate
.Chart.Paste
.Chart.Export Environ$("temp") & "\" & NombreJpg & ".jpg", "JPG"
End With
Worksheets(Hoja).ChartObjects(Worksheets(Hoja).ChartObjects.Count).Delete

Set RangoImagen = Nothing

End Sub[/PHP]

Saludos

Share this post


Link to post
Share on other sites

hola, a todos !

(hasta donde se) la diferencia entre usar .Display o .Send

1) ninguno de los dos comandos hace el envío "en directo" del correo, simplemente lo ponen en la bandeja de salida del cliente de correo (Outlook en este caso)

2) cuando se automatizan envíos de correo por Outlook, es mas seguro que probable que "salte" algún cartel o advertencia indicando que algún programa intenta hacer envíos ("en tu nombre") desde Outlook y solicita el permiso del usuario

3) si se usa simplemente el .Send y las condiciones de seguridad lo imponen, obtendrás un RTE 287 ("hey, alguien esta intentando...") y el código se detendrá

4) si usas el .Display saltará el cartelito en la interfaz de usuario lo que te da la oportunidad de autorizar el envío "en tu nombre"

5) otras alternativas pudieran ser:

- modificar las reglas o políticas de seguridad de Outlook (poco recomendable)

- usar mecanismos alternos de envíos masivos (p.ej. CDO)

- muy probablemente otras (ver pagina de Ron de Bruin)

saludos,

hector.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.




×
×
  • Create New...

Important Information

Privacy Policy