如何从Windows Mobile 6设备发送带有附件的电子邮件

时间:2012-12-05 21:25:50

标签: c# windows-mobile compact-framework opennetcf

我了解到.NET CF不支持SmtpClient类。它最好的是PocketOutlook类,我不想使用它。

我发现OpenNETCF确实有一个OpenNETCF.Net.Mail命名空间,它使SmtpClient类可用。遗憾的是,它仅部分实施,并且不直接支持附件:http://community.opennetcf.com/forums/t/11325.aspx

该帖子表明仍然可以使用多部分MIME消息添加附件。

更新

在阅读了ctacke关于w3.org文章的建议后,我试图改变我的方法:

using OpenNETCF.Net.Mail;

    public void EmailPicture(string picLoc)
    {
        var smtpClient = new SmtpClient
                             {
                                 Host = MailProperties.SmtpHost,
                                 Credentials = new SmtpCredential(MailProperties.UserName, MailProperties.Password, MailProperties.Domain),
                                 DeliveryMethod = SmtpDeliveryMethod.Network,
                                 Port = MailProperties.Port
                             };

        var message = new MailMessage();
        var fromAddress = new MailAddress(MailProperties.From);

        message.To.Add(MailProperties.To);
        message.From = fromAddress;
        message.Subject = "Requested Picture";
        message.IsBodyHtml = false;

        message.Headers.Add("MIME-Version", "1.0");
        message.Headers.Add("Content-Type", "multipart/mixed; boundary=\"simple boundary\"");

        var bodyBuilder = new StringBuilder();
        //add text
        bodyBuilder.Append("--simple boundary\r\n");
        bodyBuilder.Append("Content-type: text/plain; charset=us-ascii\r\n\r\n");
        bodyBuilder.Append("Requested Picture is attached.\r\n\r\n");
        //add attachment
        bodyBuilder.Append("--simple boundary\r\n");
        bodyBuilder.Append("Content-type: image/jpg;\r\n\r\n");
        var fs = new FileStream(picLoc, FileMode.Open, FileAccess.Read);
        var picData = new byte[fs.Length];
        fs.Read(picData, 0, picData.Length);
        bodyBuilder.Append(picData);
        bodyBuilder.Append("\r\n\r\n");
        bodyBuilder.Append("--simple boundry--\r\n");

        message.Body = bodyBuilder.ToString();

        smtpClient.Send(message);
    }

我收到的电子邮件最终看起来像这样:

- 简单的边界 内容类型:text / plain;字符集= US-ASCII

附上请求的图片。

- 简单的边界 内容类型:image / jpg;

System.Byte []

- 简单边界 -

我是否有格式问题?还是缺少标题?

2 个答案:

答案 0 :(得分:1)

正如您指出的论坛帖子所说,附件未在OpenNETCF邮件代码中实现。我们从来没有做过这件事。带附件的电子邮件只是多部分MIME邮件,它不是非常复杂且是covered in RFC 1341。您必须扩展代码以构建多部分MIME消息,然后设置适当的内容类型。

答案 1 :(得分:0)

我做了一个粗略的工作,创建了我自己的电子邮件类,其方法和属性名称与.NET的SMTP使用的名称完全相同。

在我的课程中,如果有附件,则在调用我的电子邮件课程的发送时将其复制到我们的服务器。我的电子邮件也只发送到同一个服务器,发送到一个最小的应用程序,该应用程序位于并监听TCP连接上的消息。

服务器收到信息后,可以构建SMTP电子邮件,使用复制的文件创建附件(如果附件路径为NULL,没有附件),并将电子邮件发送到该地址在我的电子邮件类的“收件人”,“抄送”和/或“密件抄送”字段中指定。

完成任务还有很长的路要走,但它就像一个冠军!

代码相当大,但这更多是因为我希望它能够与我编写的应用程序套件中的其他内容一起使用。此外,显然有两个项目:一个用于移动,一个用于Windows或Web(服务器)。