我遇到一个问题,我们使用 ASP.NET 框架和 SendGrid api/sdk 向用户发送电子邮件。我们的附件名称采用西班牙语字符,如下所示,但收到邮件时,它在 Outlook 中的编码不同。在 Gmail 中,西班牙语字符显示正确,但此问题与 Outlook 相关。
我尝试了不同的方法,例如标准化字符串和转换为 Base64,但这种方法不起作用。它仅发生在电子邮件附件中,但不会发生在电子邮件正文中。我了解到 SendGrid 默认将 Ascii 编码转换为 UTF-8 编码。请参考下面的代码。
这个问题在outlook中比较普遍,有人可以分享解决方案吗?
看起来您正在使用 UTF32 对文件名进行编码并将其发送到 SendGrid。我建议你尝试UTF8。
我目前在 SendGrid 上也遇到同样的问题,并找到了解决方案。
如果添加:
<!-- ™ -->
在您的字符集声明之后,这将强制 html 正文为 utf-8,您可以添加任何非 ASCII 字符,并且您的文件名将正确显示。
我已在下面的示例中附加了您的字符和其他非 ASCII 字符。
对我有用
var fileName = HttpUtility.HtmlEncode(file.FileName);
msg.AddAttachment(fileName, base64Data);
你可以尝试一下。
def encode_filename(filename:str) -> str:
encoded_filename = base64.b64encode(filename.encode('utf-8')).decode('utf-8')
return f'=?utf-8?B?{encoded_filename}?='
file_name = "Calendrier de l'Avent à lire et à écouter.pdf"
print(encode_filename(file_name))
# =?utf-8?B?Q2FsZW5kcmllciBkZSBsJ0F2ZW50IMOgIGxpcmUgZXQgw6Agw6ljb3V0ZXIucGRm?=