html-email - 通过带有表情符号的 ahk 发送电子邮件会产生问题

标签 html-email autohotkey emoji

我使用 ahk 脚本发送正常的电子邮件(将在问题结束时发布整个脚本)。我现在正在设置一个脚本来发送 HTML 格式的电子邮件。发送 HTML 格式的电子邮件所需的唯一更改是更改:

pmsg.TextBody
到:
pmsg.HtmlBody
我在 .html 文件名和主题中有一个表情符号:
MailSubject = ✌️ Welcome to Vinewood Studios!
FileRead, MailBody, J:\ONLINE_STORAGE\GOOGLE_DRIVE\Gmail Templates\VSA\VSA-PRE-ORDER\✌️ Welcome to Vinewood Studios!.html
该脚本可以很好地读取 html 文件并发送电子邮件。问题在于,只要有表情符号或特殊字符,例如 ™ 或 •,就会产生问号或符号。在此处查看主题行和页脚:
enter image description here
enter image description here
我尝试使用表情符号的 Unicode,如下所示(没有冒号):
MailSubject = {U+1F601} "Welcome to Vinewood Studios!"
但它根本没有阅读它(电子邮件主题说“没有主题”):
enter image description here
所有这些方式甚至都不会发送,我收到一个关于“对象文字中缺少“键”的错误。:
(我明白为什么我会收到错误,因为 {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!"
使用时:=
MailSubject := ✌️ Welcome to Vinewood Studios!
电子邮件主题只是读取数字“1”。
当使用表情符号的 Unicode 测试一个简单的 msgbox 并粘贴到 Google 时,它​​工作正常:
enter image description here
我也无法发送希伯来语 HTML 文件,出现 Gibrrish:
enter image description here
关于如何发送带有表情符号和特殊字符的电子邮件的任何想法?
更新:添加 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.
}

最佳答案

这可能不一定是一个完整的答案,但作为评论太长了,并且您的脚本需要解决一些问题。
我没有/使用 gmail SMTP 服务器,所以我无法测试。
所以到问题。
在您指定包含表情符号的字符串的所有尝试中,这只是一个正确的:MailSubject = ✌️ Welcome to Vinewood Studios!我斜体正确,因为它是遗留语法,在现代表达式语法中,它应该是这样的:MailSubject := "✌️ Welcome to Vinewood Studios!"这是正确的,如果 您使用支持 Unicode 字符(您的表情符号)的编码保存脚本文件,并使用 Unicode AHK 版本运行脚本(不过在这些方面您应该没问题,因为您设法获得了一个 AHK 消息框来显示该表情符号字符)。
以下是您错误尝试的错误所在:
MailSubject = {U+1F601} "Welcome to Vinewood Studios!"仍然使用旧语法。所有这些都将被解释为文字字符串。 AHK 认为这个字符串没有什么特别之处。
MailSubject := {U+1F601} "Welcome to Vinewood Studios!"MailSubject := {U+1F601} . "Welcome to Vinewood Studios!"这两个是相等的(连接运算符 . 是可选的/冗余的),但它们也同样错误。{U+...} Unicode 字符表示法应该被视为只是一个普通的字符串,没有什么比这更特别的了。一个受支持的 AHK 命令,然后注意到它并将其转换为相应的 Unicode 字符。
现在您要做的是将一些错误定义的(因此是您的脚本错误)对象与一个字符串连接起来。
正确的是MailSubject := "{U+1F601} Welcome to Vinewood Studios!" 然而 ,正如您可能已经注意到的,我提到只有受支持的 AHK 命令才会关心 {U+...}符号。
该符号用于发送命令 (docs) ,所以它不会对你有任何帮助。您的电子邮件主题只会读取文字字符串 {U+1F601} Welcome to Vinewood Studios! .
如果您想在不输入 Unicode 字符的情况下将 Unicode 字符存储在脚本中(这很有用,因此您不必担心在尝试共享脚本文件或诸如此类时始终在脚本文件上保留正确的编码),您可以使用例如Chr() (docs)像这样:MailSubject := Chr(0x1F601) " Welcome to Vinewood Studios!" .
emoji := {U+1F601}️MailSubject := emoji . "Welcome to Vinewood Studios!"这里有一些如上所述的问题。
如果您使用 emoji := "{U+1F601}️" ,如果在支持的 AHK 命令(发送命令)上使用,它将是正确的(表情符号和单词之间缺少空格 Welcome )。
MailSubject := ✌️ Welcome to Vinewood Studios!在这里,您使用的是现代表达式语法(应该如此),但是您没有使用引号来表示您正在指定一个字符串。
所以你在这里做的是将五个空变量(名为 ✌️WelcometoVinewoodStudios )连接在一起,这让你一无所有,然后你就进入了带有逻辑非运算符的值 ! (docs) .
没有任何评估为 false,然后反转 false 评估为 true (1)。

好的,希望您现在能够理解您的尝试出了什么问题。
但如上所述,MailSubject = ✌️ Welcome to Vinewood Studios!尝试应该有效吗? (至少据我所知,我只能假设您使用支持编码保存脚本并使用 Unicode AHK 版本运行脚本)。
很可能出现问题的是您必须为 CDO.Message 指定支持编码。目的。
Google 搜索 CDO.Message encoding对于遇到此问题的人(例如 thisthis )产生了相当多的结果,并且人们正在应用各种解决方案。其中最常见的似乎是指定一个名为 charset 的字段。至 utf-8 .
我无法测试实际的解决方案,但我希望这会有所帮助。
如果您仍然无法理解某些 AHK 代码,我可以回答这些问题。

关于html-email - 通过带有表情符号的 ahk 发送电子邮件会产生问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65869757/

相关文章:

regex - 用一个句点替换字符串中的多个句点

autohotkey - 使用 AutoHotkey 选择插入符号之前的最后 N 个字符

javascript - 如何将字符串中的所有表情符号替换为Unicode JS

swift - 获取表情符号字符的描述

autohotkey - 在 AHK 中如何更快地从屏幕区域获取像素数据?

android - 如何在安卓软键盘中替换表情符号

email - 在 HTML 电子邮件中发送 Base64 图像

html - 移动邮件客户端在表格单元格中的图像之间添加间距

html - 导出的 MailChimp HTML 模板看起来不一样

ruby-on-rails - 电子邮件中的 CSS 图像与 Rails 3