邮件附件及其内容传输编码设置(BlackBerry问题)

时间:2010-12-23 07:07:51

标签: c# email blackberry smtp

我使用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;
        }

你认为这是一种好的工作方法吗?我是否必须设置其他属性?

感谢所有

3 个答案:

答案 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,黑莓很有可能会喜欢它,但是直到你真正看到它才能确定它。)。