enviar - Correo electrónico de Outlook y firma de Excel VBA-.Body vs.HTMLbody
outlook.mailitem signature (2)
Cuando establece la propiedad HTMLBody, asegúrese de fusionar el HTMLBody
existente (con la firma) y sus datos nuevos; no puede concatenar dos cadenas de HTML y espera un HTML válido. encuentre la posición de la cadena "<body"
, encuentre la posición de la siguiente ">" (para cuidar los elementos del cuerpo con atributos), inserte sus datos después de eso ">".
Tengo un botón en mi hoja de trabajo para enviar un correo electrónico (más más, pero no importante). Quiero mi firma predeterminada con su formato HTML, pero ninguna de las opciones está produciendo los resultados que deseo:
.Body
produce el cuerpo correcto (fuentes y retornos de carro) pero la firma es texto sin formato.HMTLBody
produce la firma correcta, pero el cuerpo por alguna razón, la fuente va a Times New Roman en lugar de la Calibri predeterminada, y los retornos de carro no funcionan si utilizovbNewLine
,vbCr
ovbCrLf
¿Soy SOL? ¿Debo simplemente escoger uno y lidiar con eso, o hay alguna forma de que yo tenga mi torta y la coma también?
Código:
.Display '' need to display email first for signature to work
.Subject = Title
.To = ActiveSheet.Range("E10").Value '' <-- Put email of the recipient here
.CC = "" '' <-- Put email of ''copy to'' recipient here
.HTMLBody = "Thank you for the opportunity to bid on " & ActiveSheet.Range("B9").Value & ". " & _
" Please read our attached proposal in its entirety to be sure of all inclusions, exclusions, and products proposed. Give us a call with any questions or concerns." & _
vbCrLf & vbCrLf & _
"Thank you," & _
.HTMLBody '' Adds default signature
.Attachments.Add PdfFile
Actualizar:
Código de trabajo final gracias a la ayuda de ambas respuestas a continuación:
.Display '' We need to display email first for signature to be added
.Subject = Title
.To = ActiveSheet.Range("E10").Value
.CC = ""
.HTMLBody = "<font face=""calibri"" style=""font-size:11pt;"">Thank you for the opportunity to bid on " & ActiveSheet.Range("B9").Value & ". " & " Please read our attached proposal in its entirety to be sure of all inclusions, exclusions, and products proposed. Give us a call with any questions or concerns." & _
"<br><br>" & _
"Thank you," & _
.HTMLBody & "</font>" '' Adds default signature
.Attachments.Add PdfFile
intente insertar sus datos en las etiquetas html correctas:
.HTMLBody = "<font face=""verdana"" color=""black"">This is some text!</font>"
para espacios debe agregar esta etiqueta "<br>"
, por ejemplo:
.HTMLBody = "<font face=""calibri"" color=""black""> hello <br>"
.HTMLBody = .HTMLBody & " how <br>" & " are <br>" & " you?</font>"
resulta en:
Hola
cómo
son
¿tú?
Edit2
Para insertar imágenes (firma como imágenes) puede usar el siguiente código:
1 paso Copie este código y pegue en el módulo de clase y asígnele un nombre a ese módulo de clase como "MailOptions"
Private Message As CDO.Message
Private Attachment, Expression, Matches, FilenameMatch, i
Public Sub PrepareMessageWithEmbeddedImages(ByVal FromAddress, ByVal ToAddress, ByVal Subject, ByVal HtmlContent)
Set Expression = CreateObject("VBScript.RegExp")
Expression.Pattern = "/<EMBEDDEDIMAGE/:(.+?)/>"
Expression.IgnoreCase = True
Expression.Global = False ''one match at a time
Set Message = New CDO.Message
Message.From = FromAddress
Message.To = ToAddress
Message.Subject = Subject
''Find matches in email body, incrementally increasing the auto-assigned attachment identifiers
i = 1
While Expression.Test(HtmlContent)
FilenameMatch = Expression.Execute(HtmlContent).Item(0).SubMatches(0)
Set Attachment = Message.AddAttachment(FilenameMatch)
Attachment.Fields.Item("urn:schemas:mailheader:Content-ID") = "<attachedimage" & i & ">" '' set an ID we can refer to in HTML
Attachment.Fields.Item("urn:schemas:mailheader:Content-Disposition") = "inline" '' "hide" the attachment
Attachment.Fields.Update
HtmlContent = Expression.Replace(HtmlContent, "cid:attachedimage" & i) '' update the HTML to refer to the actual attachment
i = i + 1
Wend
Message.HTMLBody = HtmlContent
End Sub
Public Sub SendMessageBySMTP(ByVal SmtpServer, ByVal SmtpUsername, ByVal SmtpPassword, ByVal UseSSL)
Dim Configuration
Set Configuration = CreateObject("CDO.Configuration")
Configuration.Load -1 '' CDO Source Defaults
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SmtpServer
''Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SmtpPort
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
If SmtpUsername <> "" Then
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = SmtpUsername
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = SmtpPassword
End If
Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = UseSSL
Configuration.Fields.Update
Set Message.Configuration = Configuration
Message.Send
End Sub
Paso 2. En un módulo estándar, elaborará su contenido .html y creará una instancia de un objeto de la clase:
public sub send_mail()
Dim signature As String
dim mail_sender as new MailOptions ''here you are instantiating an object from the class module created previously
dim content as string
signature = "C:/Users/your_user/Documents/your_signature.png"
content = "<font face=""verdana"" color=""black"">This is some text!</font>"
content = content & "<img src=""<EMBEDDEDIMAGE:" & signature & " >"" />"
mail_sender.PrepareMessageWithEmbeddedImages _
FromAddress:="[email protected]", _
ToAddress:="[email protected]", _
Subject:="your_subject", _
HtmlContent:=content
''your_Smtp_Server, for example: RelayServer.Contoso.com
correos.SendMessageBySMTP "your_Smtp_Server", "your_network_user_account", "your_network_user_account_password", False
end sub