1 回答
TA贡献1801条经验 获得超8个赞
RFC 2822样式的电子邮件标头不允许未转义的 Unicode 字符。您需要使用与 ASCII 兼容的编码,例如RFC2047 1或RFC 2231,例如:
内容处置:附件;
文件名="=?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?="
内容类型:应用程序/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''%D8%A%D8%A%D8%B9%D8%A%D8%B9%D8%A%D8%B9%D8%A%D8%A%D8%B9%D8 %A%D8%A%D8%A%DB%D8%A%D8%A%D8%A%D8%''文件名*=UTF-8''%85%D8%A7%D8%B1%D8% D8%B3%D8%D8%A9%2E%70%64%66.pdf
内容类型:应用程序/pdf;
D8%D8%A7%D8%B9%D8%A%D8%B9%D8%A%D8%B9%D8%A%D8%B9%D8%A%D8%B9%D8%D8%A7%D8D8D8a% D8%B9%D8%D8%D8%D8%D8%D8%D8%D8A7%女儿,姓名*=UTF-8'' %85%D8%A7%D8%B1%D8%D8%B3%D8%D8 %A9%2E%70%64%66.pdf
1:是的,我知道 RFC 2047在技术上不允许encoded-words 在带引号的字符串中,例如用于参数值。但是许多服务器确实允许这样做。
看:
如何对 MIME 消息中 Content-Disposition 标头的文件名参数值进行编码?
附件文件名的混乱
当 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},
}))
- 1 回答
- 0 关注
- 2246 浏览
添加回答
举报