我使用C#代码向不同用户发送一些电子邮件,邮件客户端位于不同平台上:BlackBerry,iPhone,Pc,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)文件。 经过一些分析后,我看到附件显示在邮件正文中,只有一些邮件客户端将其显示为附件。对我来说这不是问题,但黑莓在这种附件上有一些问题,因为它只显示了身体并切断了附件。但它适用于Google,iMail,Thunderbird等。
我分析了消息的来源,我看到attacchment的 ContentTransferEncoding 是8位:
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; name=Attachment.2324333.txt
如果我将C#中对象附件的 ContentTransferEncoding 属性设置为 Base64 编码,我认为我解决了我的问题:
Attachment attachment = null;
if (attachNameFile!=null)
{
attachment = new Attachment(attachNameFile, new System.Net.Mime.ContentType(attachMimeType));
attachment.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
}
你认为这是一种好的工作方法吗?我是否必须设置其他属性?
感谢所有
答案 0 :(得分:3)
查看一些来自BlackBerry的附件,我认为您需要添加Content-Disposition标题:
Content-Transfer-Encoding: base64
Content-Type: text/plain
Content-Disposition: attachment; filename="myfilename.bin"
答案 1 :(得分:2)
请参阅:Sending email with attachments from C#, attachments arrive as Part 1.2 in Thunderbird
内容处理是解决我问题的方法。
答案 2 :(得分:0)
对我来说,你做的一切都是正确的,其他邮件客户证明了这一点。试试BASE64,黑莓很有可能会喜欢它,但是直到你真正看到它才能确定它。)。