【发布时间】:2012-11-23 20:10:18
【问题描述】:
我了解到 .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);
}
我收到的电子邮件最终看起来像这样:
--简单边界 内容类型:文本/纯文本; charset=us-ascii
请求的图片已附上。
--简单边界 内容类型:图片/jpg;
System.Byte[]
--简单边界--
我有格式问题吗?还是缺少标题?
【问题讨论】:
-
我从来没有做过这个客户端,但是你有什么办法可以把它交给一个可以发送电子邮件的存储过程?
-
我没有考虑过存储过程。我不知道可以写一个来发送电子邮件。我正在考虑编写一个网络服务来传递附件,然后发送电子邮件。如果 .NET CF 没有那么糟糕,那将是一个更简洁的实现。
-
您为什么不想使用 PocketOutlook?它是所有 Windows Mobile Pro 设备的标准配置和易于使用的 API。
-
是的,不幸的是,CF 的功能不如其臃肿的桌面同胞...
标签: c# windows-mobile compact-framework opennetcf