Докато работя по проект, който изпраща по имейл файлове с международни файлови имена, попаднах на необичаен проблем. ако прикача само с US-ASCII име на файл, мога да получа повече от 200 знака без грешки.
Ако включа разширен знак, той кодира в UTF-8 и дължината, преди да стане фънки, е много малка (‹ 40 знака). За да дефинирате funky.. ето примерно име на файл, след като се повреди:
=utf-8BSU5GT1JNw4FUSUNBX0ltcGFjdF9Bc3Nl
изглежда като UTF8 кодиран низ с инструкция за декодиране UTF-8 или mime граница... не съм сигурен кое.
Някой виждал ли е това преди -- и какви са правилата/ограниченията на имената на файлове -- Опитах се да изпратя файла на ръка чрез Outlook и той го обработва, така че не мисля, че е специфично за MIME ограничение.
Примерен код:
class Program
{
private const string DOMAIN = "foobar.com";
private const string SMTPHOST = "mail." + DOMAIN;
private const string FROM = "chadwick.posey@" + DOMAIN;
private const string TO = FROM;
static void Main(string[] args)
{
MailMessage msg = new MailMessage(FROM, TO, "Subject", "Body");
string path = Path.GetTempPath();
string name = "AAAAAA_AAAAAAAAAAAA_AAAAAAA_AAAA - IIIIIII CCCCCCCCCC DD IIIIIIÁIIII_20111018_091327.pptx";
File.WriteAllText(path + "\\" + name, "blah");
Attachment att = new Attachment(path + "\\" + name, new ContentType("application/vnd.openxmlformats-officedocument.presentationml.presentation"));
msg.Attachments.Add(att);
SmtpClient client = new SmtpClient(SMTPHOST, 25);
client.Send(msg);
}
}
Опитах (досега) -- зададох кодирането за прикачения файл.NameEncoding на UTF8 и UTF32, нито едното не работи. Задаването на ContentDisposition.FileName на прикачения файл е неуспешно, защото не използва само US-ASCII знаци.
Някакви предложения как да го накарате да включва пълното име на файла с акцента / разширените символи в такт?
Благодаря Чадуик