.NETCFはSmtpClientクラスをサポートしていないことを学びました。最高のものは、私が使いたくないPocketOutlookクラスです。
OpenNETCFには、SmtpClientクラスを使用可能にするOpenNETCF.Net.Mail名前空間があることがわかりました。残念ながら、これは部分的にしか実装されておらず、添付ファイルを直接サポートしていません:http: //community.opennetcf.com/forums/t/11325.aspx
その投稿は、マルチパートMIMEメッセージを使用して添付ファイルを追加することがまだ可能であることを示唆しています。
アップデート
w3.orgの記事を見るというctackeの提案を読んだ後、私は次のようにメソッドを変更しようとしました。
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; charset = us-ascii
リクエストした写真を添付します。
--単純な境界コンテンツタイプ:image / jpg;
System.Byte []
-単純な境界-
フォーマットの問題はありますか?またはヘッダーがありませんか?