[英]Outlook Email and Signature from Excel VBA - .Body vs .HTMLbody
I have a button on my worksheet to send an email (plus more, but not important). 我的工作表上有一个按钮来发送电子邮件(加上更多,但不重要)。 I want my default signature with its HTML formatting but neither option is producing the results I want:
我想要我的默认签名与HTML格式,但两个选项都没有产生我想要的结果:
.Body
produces the correct body (fonts and carriage returns) but the signature is plain text .Body
生成正确的正文(字体和回车),但签名是纯文本
.HMTLBody
produces the correct signature but the body for some reason, the font goes to Times New Roman instead of the default Calibri, and the carriage returns don't work whether I use vbNewLine
, vbCr
, or vbCrLf
.HMTLBody
产生正确的签名但由于某种原因身体,字体转到Times New Roman而不是默认的Calibri,并且无论我使用vbNewLine
, vbCr
还是vbCrLf
,回车都不起作用
Am I just SOL? 我只是SOL吗? Do I need to just pick one and deal with it, or is there a way for me to have my cake and eat it too?
我需要选择一个并处理它,还是有办法让我吃蛋糕也吃它?
Code: 码:
.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
Final working code thanks to the help of both answers below: 最后的工作代码归功于以下两个答案的帮助:
.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
When you set the HTMLBody property, make sure you merge the existing HTMLBody
(with the signature) and your new data - you cannot just concatenate two HTML strings and expects a valid HTML. 设置HTMLBody属性时,请确保合并现有的
HTMLBody
(带签名)和新数据 - 您不能只连接两个HTML字符串并期望有效的HTML。 find the position of the "<body"
string, find the position of the next ">" (to take care of the body elements with attributes), insert your data after that ">". 找到
"<body"
字符串的位置,找到下一个“>”的位置(用属性处理body元素),在“>”之后插入数据。
try to insert your data into the properly html tags: 尝试将您的数据插入正确的html标记:
.HTMLBody = "<font face=""verdana"" color=""black"">This is some text!</font>"
for spaces you must to add this tag "<br>"
, For example: 对于空格,您必须添加此标记
"<br>"
,例如:
.HTMLBody = "<font face=""calibri"" color=""black""> hello <br>"
.HTMLBody = .HTMLBody & " how <br>" & " are <br>" & " you?</font>"
result in: 造成:
hello 你好
how 怎么样
are 是
you? 您?
Edit2 EDIT2
In order to insert images (signature as images) you could use the following code: 为了插入图像(签名为图像),您可以使用以下代码:
1 step. 一步。 Copy this code an paste in class module and name that class module like "MailOptions"
将此代码复制到类模块中,并将该类模块命名为“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
Step 2. In an standar module you will elaborate your .html content and instantiate a object from the class: 步骤2.在标准模块中,您将详细说明.html内容并从类中实例化一个对象:
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:="chrism_mail@blablabla.com", _
ToAddress:="addressee_mail@blablabla.com", _
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.