我使用的是C#代码在不同平台上发送一些电子邮件给不同的用户提供邮件客户端:黑莓,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)文件。 经过一番分析,我看到该附件在邮件正文显示,仅部分邮件客户端显示出它作为附件。 这是不是我的问题,但黑莓手机有一些问题,这种附件的,因为它表明只有身体和切断连接。 但它在谷歌,易网邮,Thunderbird等等。
我分析的消息的源和只见attacchment的ContentTransferEncoding是8位:
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; name=Attachment.2324333.txt
我想我解决我的问题,如果我设置在C#中Base64编码对象附件的ContentTransferEncoding属性:
Attachment attachment = null;
if (attachNameFile!=null)
{
attachment = new Attachment(attachNameFile, new System.Net.Mime.ContentType(attachMimeType));
attachment.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
}
你是否认为这是一个很好的和工作方法? 我一定要设置其他属性?
谢谢大家