Zvi*_*sky 7 autohotkey html-email emoji
我使用 ahk 脚本发送正常的电子邮件(将在问题结束时发布整个脚本)。我现在正在设置一个脚本来发送 HTML 格式的电子邮件。发送 HTML 格式的电子邮件所需的唯一更改是更改:
pmsg.TextBody
Run Code Online (Sandbox Code Playgroud)
到:
pmsg.HtmlBody
Run Code Online (Sandbox Code Playgroud)
我在 .html 文件名和主题中有一个表情符号:
MailSubject = ?? Welcome to Vinewood Studios!
FileRead, MailBody, J:\ONLINE_STORAGE\GOOGLE_DRIVE\Gmail Templates\VSA\VSA-PRE-ORDER\?? Welcome to Vinewood Studios!.html
Run Code Online (Sandbox Code Playgroud)
该脚本可以很好地读取 html 文件并发送电子邮件。问题在于,只要有表情符号或特殊字符,例如 ™ 或 •,就会产生问号或符号。在此处查看主题行和页脚:
我尝试使用表情符号的 Unicode,如下所示(没有冒号):
MailSubject = {U+1F601} "Welcome to Vinewood Studios!"
Run Code Online (Sandbox Code Playgroud)
所有这些方式甚至都不会发送,我收到一个关于对象文字中“缺少“键”的错误。:(我明白为什么我会收到错误,因为 {U+1F601} 没有被视为“值”,但是而是一个字符串。但是,这是当您想用表情符号替换文本时使用它的方式,所以我不知道为什么在这种情况下会有所不同)
MailSubject := {U+1F601} "Welcome to Vinewood Studios!"
MailSubject := {U+1F601} . "Welcome to Vinewood Studios!"
emoji := {U+1F601}?
MailSubject := emoji . "Welcome to Vinewood Studios!"
Run Code Online (Sandbox Code Playgroud)
使用时:=
MailSubject := ?? Welcome to Vinewood Studios!
Run Code Online (Sandbox Code Playgroud)
电子邮件主题只是读取数字“1”。
当使用表情符号的 Unicode 测试一个简单的 msgbox 并粘贴到 Google 时,它工作正常:
我也无法发送希伯来语 HTML 文件,出现 Gibrrish:
关于如何发送带有表情符号和特殊字符的电子邮件的任何想法?
更新:添加 pmsg.BodyPart.Charset := "utf-8" 解决了在主题行中发送正确表情符号的问题。无法在电子邮件正文中显示希伯来字符。
这是脚本:
MailSubject := ?? Welcome to Vinewood Studios!
FileRead, MailBody, J:\ONLINE_STORAGE\GOOGLE_DRIVE\Gmail Templates\VSA\VSA-PRE-ORDER\?? Welcome to Vinewood Studios!.html
SendEmail(MailBody, MailSubject)
SendEmail(MailBody, MailSubject, SendTo:="ztwersky@gmail.com")
{
pmsg := ComObjCreate("CDO.Message")
pmsg.From := """VSA Management"" <support@vinewoodstudios.com>"
pmsg.To := SendTo
pmsg.BCC := "" ; Blind Carbon Copy, Invisable for all, same syntax as CC
pmsg.CC := ""
pmsg.Subject := MailSubject
pmsg.HtmlBody := MailBody
pmsg.BodyPart.Charset := "utf-8" ;Displays emoji correctly in subject only
;sAttach := ; "Path_Of_Attachment" ; can add multiple attachments
; the delimiter is |
fields := Object()
fields.smtpserver := "smtp.gmail.com" ; specify your SMTP server
fields.smtpserverport := 465 ; 25
fields.smtpusessl := True ; False
fields.sendusing := 2 ; cdoSendUsingPort
fields.smtpauthenticate := 1 ; cdoBasic
fields.sendusername := "ztwersky@gmail.com"
fields.sendpassword := "PASSWORD"
fields.smtpconnectiontimeout := 60
schema := "http://schemas.microsoft.com/cdo/configuration/"
pfld := pmsg.Configuration.Fields
For field,value in fields
pfld.Item(schema . field) := value
pfld.Update()
Loop, Parse, sAttach, |, %A_Space%%A_Tab%
pmsg.AddAttachment(A_LoopField)
pmsg.Send()
msgbox, Email sent.
}
Run Code Online (Sandbox Code Playgroud)
这可能不一定是完整的答案,但评论太长,并且有一些问题需要用您的脚本修复。
\n我没有/使用 gmail SMTP 服务器,因此无法测试。
那么就来解决问题吧。
\n在指定包含表情符号的字符串的所有尝试中,这只是正确的一个:
\n MailSubject = \xe2\x9c\x8c\xef\xb8\x8f Welcome to Vinewood Studios!
\n我用斜体显示了正确的,因为它是旧语法,在现代表达式语法中,它应该如下所示:
\n MailSubject := "\xe2\x9c\x8c\xef\xb8\x8f Welcome to Vinewood Studios!"
\n这如果您使用支持 Unicode 字符(您的表情符号)的编码保存脚本文件并使用 Unicode AHK 版本运行脚本(不过您在这些方面应该没问题,因为您设法获得了 AHK 消息框),那么这将是正确的显示该表情符号字符)。
以下是您的错误尝试的错误之处:
\nMailSubject = {U+1F601} "Welcome to Vinewood Studios!"\n仍采用旧语法。所有这些都将被解释为文字字符串。AHK 认为这个字符串没有什么特别之处。
MailSubject := {U+1F601} "Welcome to Vinewood Studios!"
\n MailSubject := {U+1F601} . "Welcome to Vinewood Studios!"
\n这两个是相等的(连接运算符.是可选的/冗余的),但它们也同样是错误的。
\ {U+...}nUnicode 字符表示法应该被视为普通字符串,没有什么比这更特别的了。受支持的 AHK 命令,然后注意到它并将其转换为相应的 Unicode 字符。
\n现在您正在尝试做的是将一些错误定义(因此您的脚本错误)对象与字符串连接起来。
\n正确的应该是
\n MailSubject := "{U+1F601} Welcome to Vinewood Studios!"
\n但是,正如您可能已经注意到的那样,我提到只有受支持的 AHK 命令才会关心该{U+...}符号。
\n该符号用于发送命令(文档),因此它对您没有任何帮助。您的电子邮件主题只会读取文字字符串{U+1F601} Welcome to Vinewood Studios!。
\n如果您想在脚本中存储 Unicode 字符而不键入 Unicode 字符(这很有用,因此您在尝试共享脚本文件或其他内容时不必担心始终在脚本文件上保留正确的编码),您可以像这样使用例如Chr()(文档)
: \nMailSubject := Chr(0x1F601) " Welcome to Vinewood Studios!"。
emoji := {U+1F601}\xef\xb8\x8f
\n MailSubject := emoji . "Welcome to Vinewood Studios!"
\n这里存在如上所述的一些问题。
\n如果您使用,则如果在支持的 AHK 命令(发送命令)上使用,emoji := "{U+1F601}\xef\xb8\x8f"它将是正确的(除了表情符号和单词 之间缺少空格)。Welcome
MailSubject := \xe2\x9c\x8c\xef\xb8\x8f Welcome to Vinewood Studios!
\n这里您使用的是现代表达式语法(您应该如此),但您没有使用引号来指示您正在指定字符串。
\n所以你在这里所做的是将五个空变量(名为、 、 和\xe2\x9c\x8c\xef\xb8\x8f)Welcome连接to在一起,这会让你什么都没有,然后你用逻辑非运算符反转该值(文档)。\n没有任何内容计算为 false,然后将 false 反转计算为 true (1)。VinewoodStudios!
好的,希望您现在能够理解您的尝试出了什么问题。
\n但正如上面所说,这次MailSubject = \xe2\x9c\x8c\xef\xb8\x8f Welcome to Vinewood Studios!尝试应该有效吗?(至少据我所知,我只能假设您使用支持编码保存脚本并使用 Unicode AHK 版本运行脚本)。
很可能出现的问题是您必须为对象指定支持编码CDO.Message。
\nGoogle 搜索会为CDO.Message encoding遇到此问题的人提供相当多的结果(例如,这个或这个),并且人们正在应用多种解决方案。其中最常见的似乎是指定一个名为charsetto的字段utf-8。
我无法测试实际的解决方案,但我希望这会有所帮助。
\n如果您仍然无法理解某些 AHK 代码,我可以回答这些问题。