Я использую код C # для отправки электронных писем различным пользователям с почтовыми клиентами на разных платформах: BlackBerry, iPhone, ПК, Mac и т. Д. Вот фрагмент:
Attachment attachment = null;
if (attachNameFile!=null)
{
attachment = new Attachment(attachNameFile, new System.Net.Mime.ContentType(attachMimeType));
}
SmtpClient smtp = new SmtpClient
{
Host = this.smtpServer,
Port = this.smtpPort,
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential()
};
using (MailMessage message = new MailMessage())
{
message.From = fromAddress;
if (macTo != null) message.To.AddRangeUnique(macTo);
if (macCc!=null) message.CC.AddRangeUnique(macCc);
if (macCcn != null) message.Bcc.AddRangeUnique(macCcn);
message.Subject = subject;
message.Body = sb.ToString();
if (replyTo != null)
message.ReplyTo = new MailAddress(replyTo);
else
message.ReplyTo = fromAddress;
if (attachment!=null)
{
message.Attachments.Add(attachment);
}
smtp.Send(message);
}
Некоторый пользовательсказал мне, что сообщение, которое он или она получает, не имеет вложения.Вложение представляет собой текстовый (UTF8) файл.После некоторого анализа я увидел, что вложение отображается в теле письма, и только некоторые почтовые клиенты показывают его в качестве вложения.Для меня это не проблема, но у BlackBerry есть некоторые проблемы с такого рода вложениями, потому что он показывает только тело и обрезает вложение.Но это работает в Google, iMail, Thunderbird и т. Д. И т. Д.
Я проанализировал источник сообщения и увидел, что ContentTransferEncoding присоединения имеет 8 бит:
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; name=Attachment.2324333.txt
Думаю, я решу свою проблему, если установить свойство ContentTransferEncoding объекта Вложение в C # на Base64 кодировка:
Attachment attachment = null;
if (attachNameFile!=null)
{
attachment = new Attachment(attachNameFile, new System.Net.Mime.ContentType(attachMimeType));
attachment.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
}
Как вы думаете, это хороший и рабочий подход?Нужно ли устанавливать другие свойства?
Спасибо всем