gpt4 book ai didi

c# - 带有长非 ASCII 名称的电子邮件附件

转载 作者:可可西里 更新时间:2023-11-01 09:13:33 25 4
gpt4 key购买 nike

我尝试使用 System.Net.Mail.Attachment 发送 System.Net.Mail.MailMessage

附件名称为“Счёт-договор №4321 от 4 июля.pdf”

附件创建代码:

var nameEncoding = Encoding.UTF8;
return new System.Net.Mail.Attachment(new MemoryStream(bytes),
MessageBodiesHelpers.EncodeAttachmentName(fileName, nameEncoding),
attachment.MediaType)
{
TransferEncoding = TransferEncoding.Base64,
NameEncoding = nameEncoding
};

MessageBodiesHelpers.EncodeAttachmentName 中的代码取自 https://social.msdn.microsoft.com/Forums/en-US/b6c764f7-4697-4394-b45f-128a24306d55/40-smtpclientsend-attachments-mit-umlauten-im-dateinamen?forum=dotnetframeworkde

如果我将该附件发送到 gmail 或 ms exchange,则附件名称已成功解码。 但是!

如果我将该附件发送到 icloud,那么我会收到“????-???????? №4321 от4 ????.pdf”

邮件附件标题:

来自 ms 交换:

Content-Type: application/pdf;
name="=?utf-8?B?0KHRh9GR0YIt0LTQ?==?utf-8?B?vtCz0L7QstC+0YAg?==?utf-8?B?4oSWNDMyMSDQvtGC?==?utf-8?B?IDQg0LjRjtC70Y8u?==?utf-8?B?cGRm?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment

来自 icloud:

Content-Transfer-Encoding: BASE64
Content-Type: APPLICATION/PDF;
name="????-??????? =?utf-8?B?4oSWNDMyMSDQvtGC?= 4 ????.pdf"

如何格式化 icloud 的名称?

更新

如果我将邮件从 outlook (ms exchange) 转发到 icloud,则附件名称已成功解码。 header :

Content-Transfer-Encoding: BASE64
Content-Disposition: ATTACHMENT;
size=200702;
modification-date="Mon, 04 Jul 2016 13:40:22 GMT";
filename*=utf-8''%D0%A1%D1%87%D1%91%D1%82%2D%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%20%E2%84%964321%20%D0%BE%D1%82%204%20%D0%B8%D1%8E%D0%BB%D1%8F.pdf;
creation-date="Mon, 04 Jul 2016 13:40:22 GMT"
Content-Type: APPLICATION/PDF;
name*=utf-8''%D0%A1%D1%87%D1%91%D1%82%2D%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%20%E2%84%964321%20%D0%BE%D1%82%204%20%D0%B8%D1%8E%D0%BB%D1%8F.pdf

upd2

如果我使用 icloud (icloud.com) 的 Web 界面阅读邮件,则附件名称已成功解码。

最佳答案

在 .NET 4.0 中,SmtpClient 现在实现了 RFC 行长度限制(76 个字符)。这需要对编码过程进行大量更改,并且没有涵盖像您描述的那样的一些问题。

在您的情况下,非 ascii 附件名称存在问题,这些名称将被编码为超过 41 个 utf-8 字节 (Encoding.UTF8.GetByteCount(fileName);)。在这种情况下,名称被编码两次,并且可能有额外的换行符。唯一已知的解决方法是限制非 ASCII 文件名的长度。

你可以阅读这个post 有关您的问题的更多信息

关于c# - 带有长非 ASCII 名称的电子邮件附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38187226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com