1

我了解到 .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);
    }

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

--simple 边界 Content-type: text/plain; charset=us-ascii

附上要求的图片。

--简单边界Content-type: image/jpg;

系统字节[]

--简单的边界--

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

4

2 回答 2

1

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

于 2012-12-06T12:51:59.663 回答
0

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

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

服务器收到信息后,就可以构造一个 SMTP 邮件,使用复制过来的文件创建一个附件(如果 Attachment Path 为 NULL,则没有附件),并将邮件发送到我指定的地址电子邮件类的收件人、抄送和/或密件抄送字段。

这是完成它的更长的方法,但它就像一个冠军!

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

于 2012-12-06T14:31:14.143 回答