Pièce jointe de courriel avec nom long non-ascii
j'essaie d'envoyer System.Net.Mail.MailMessage
System.Net.Mail.Attachment
.
le nom de l'attachement est " Счёт-договор №4321 от 4 июля.pdf"
Code pour la fixation de création:
var nameEncoding = Encoding.UTF8;
return new System.Net.Mail.Attachment(new MemoryStream(bytes),
MessageBodiesHelpers.EncodeAttachmentName(fileName, nameEncoding),
attachment.MediaType)
{
TransferEncoding = TransferEncoding.Base64,
NameEncoding = nameEncoding
};
Code à l'intérieur de MessageBodiesHelpers.EncodeAttachmentName
tiré de https://social.msdn.microsoft.com/Forums/en-US/b6c764f7-4697-4394-b45f-128a24306d55/40-smtpclientsend-attachments-mit-umlauten-im-dateinamen?forum=dotnetframeworkde
si j'envoie cette pièce jointe à gmail ou ms exchange, alors le nom de l'attachement décodé avec succès. mais!
si j'envoie cette pièce jointe à icloud puis j'obtiens"????-??????? №4321 от4 ????.pdf"
en-têtes de courrier joint:
à Partir de ms exchange:
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
à Partir d'icloud:
Content-Transfer-Encoding: BASE64
Content-Type: APPLICATION/PDF;
name="????-??????? =?utf-8?B?4oSWNDMyMSDQvtGC?= 4 ????.pdf"
comment formater le nom d'icloud?
upd
si je transmets un message d'outlook (MS exchange) à icloud, alors le nom de la pièce jointe est décodé réussi. Les en-têtes:
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
si je lis des messages en utilisant l'interface web d'icloud (icloud.com), puis le nom de la pièce jointe décodée avec succès.
4 réponses
In .NET 4.0 SmtpClient implémente maintenant les limites de longueur de ligne RFC (76 caractères). Cela a nécessité des changements importants dans le processus d'encodage et n'a pas couvert quelques problèmes comme celui que vous décrivez.
dans votre cas, il y a un problème avec les noms de pièces jointes non ascii qui seraient encodés à plus de 41 octets utf-8 (encodage.UTF8.GetByteCount (fileName);). Dans ce scénario, les noms sont codés deux fois et peut avoir des sauts de ligne supplémentaires. La seule solution connue est de limiter la longueur des noms de fichiers non ascii.
vous pouvez lire ce post pour en savoir plus sur votre problème
essayez de changer L'encodage de Base64 à UTF8.
Référence: https://discussions.apple.com/thread/7450442
on dirait que c'est un bug icloud externe. Vous pouvez donner un retour d'informations sur cette question ici.
jetez un oeil à cette discussion. Vous devrez peut-être le traduire ou simplement regarder le code. a aussi quelques informations et références utiles le premier lien comme une solution de contournement.