我正在尝试编写一个使用SMTP将PDF发送到Kindle的程序。
当我使用常规客户端(即Outlook)将附件发送到Kindle时,即使它是非ASCII格式,我也会得到正确的文件名。但是,当我使用代码发送它时,Unicode字符显示不正确。我尝试将附件发送到我的个人电子邮件中,但没有任何错误,只有Kindle无法识别这些字符。
这是我的附件标题:
Content-Disposition: attachment; filename="اÙضØÙ ÙاÙÙسÙاÙ.pdf"
Content-Transfer-Encoding: base64
Content-Type: application/pdf; name="اÙضØÙ ÙاÙÙسÙاÙ.pdf"
这是我的代码:
package main
import (
"log"
"gopkg.in/gomail.v2"
)
func main() {
m := gomail.NewMessage()
m.SetHeader("To", "[email protected]")
m.SetHeader("From", "[email protected]")
m.SetBody("text/plain", "")
path := "C:\\Users\\al111\\Downloads\\Telegram Desktop\\كيف تعمل الماركسية.pdf"
m.Attach(path)
d := gomail.NewDialer("smtp.live.com", 587, "[email protected]", "MY-PASSWORD")
err := d.DialAndSend(m)
if err != nil {
log.Fatal(err)
}
}
RFC 2822样式的电子邮件标头不允许使用非转义的 Unicode字符。您需要使用ASCII兼容的编码,例如RFC2047 1或RFC 2231,例如:
内容处置:附件; filename =“ =?UTF-8?Q?= D9 = 83 = D9 = 8A = D9 = 81 = 20 = D8 = AA = D8 = B9 = D9 = 85 = D9 = 84 = 20 = D8 = A7 = D9 = 84 = D9 = 85 = D8 = A7 = D8 = B1 = D9 = 83 = D8 = B3 = D9 = 8A = D8 = A9 = 2E = 70 = 64 = 66.pdf?=“ Content-Type:application / pdf; 名称=“ =?UTF-8?Q?= D9 = 83 = D9 = 8A = D9 = 81 = 20 = D8 = AA = D8 = B9 = D9 = 85 = D9 = 84 = 20 = D8 = A7 = D9 = 84 = D9 = 85 = D8 = A7 = D8 = B1 = D9 = 83 = D8 = B3 = D9 = 8A = D8 = A9 = 2E = 70 = 64 = 66.pdf?=“
内容处置:附件; 文件名* = UTF-8''%D9%83%D9%8A%D9%81%20%D8%AA%D8%B9%D9%85%D9%84%20%D8%A7%D9%84%D9 %85%D8%A7%D8%B1%D9%83%D8%B3%D9%8A%D8%A9%2E%70%64%66.pdf 内容类型:应用程序/ pdf; 名称* = UTF-8''%D9%83%D9%8A%D9%81%20%D8%AA%D8%B9%D9%85%D9%84%20%D8%A7%D9%84%D9 %85%D8%A7%D8%B1%D9%83%D8%B3%D9%8A%D8%A9%2E%70%64%66.pdf
1:是的,我知道RFC 2047在技术上不允许encoded-word
在带引号的字符串中使用s,例如用于参数值。但是许多服务器确实允许这样做。
看到:
如何在MIME消息中编码Content-Disposition标头的文件名参数值?
当Outlook向您发送电子邮件时,Outlook可能正是在这样做。您可以通过查看实际发送的电子邮件的原始数据来进行验证。
在Go中,该m.Attach()
函数具有一个可选settings
参数,可用于为附件传递其他参数,例如自定义文件名甚至自定义标头,例如:
baseName := mime.QEncoding.Encode("utf-8", filepath.Base(path))
m.Attach(path, gomail.Rename(baseName))
baseName := url.PathEscape(filepath.Base(path))
m.Attach(path, gomail.SetHeader(map[string][]string{
"Content-Disposition": {"attachment; filename*=UTF-8''" + baseName},
}))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句