1

.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 []

-単純な境界-

フォーマットの問題はありますか?またはヘッダーがありませんか?

4

2 に答える 2

1

あなたが指摘しているフォーラムの投稿にあるように、添付ファイルは OpenNETCF メール コードに実装されていません。私たちはそれをやろうとはしませんでした。添付ファイル付きの電子メールは単純なマルチパート MIME メッセージであり、それほど複雑ではなく、RFC 1341 でカバーされています。コードを拡張してマルチパート MIME メッセージを作成し、適切なコンテンツ タイプを設定する必要があります。

于 2012-12-06T12:51:59.663 に答える
0

.NET の SMTP で使用される名前とまったく同じ名前のメソッド名とプロパティ名を持つ独自のメール クラスを作成することで、大雑把な回避策を実行しました。

クラス内で添付ファイルがある場合、メール クラスの Send が呼び出されたときにサーバーにコピーされます。私の電子メールも、この同じサーバーにのみ送信されます。これは、TCP 接続に沿って座ってメッセージをリッスンする最小限のアプリケーションです。

サーバーが情報を受信すると、SMTP 電子メールを作成し、コピーされたファイルを使用して添付ファイルを作成し (添付ファイル パスが NULL の場合、添付ファイルはありません)、my.xml ファイルで指定されたアドレスに電子メールを送信します。 email クラスの To、CC、および/または BCC フィールド。

それを成し遂げるには長い道のりですが、チャンピオンのように機能します!

コードはかなり大きいですが、これは、私が作成したアプリケーション スイート内の他のものと連携させたいためです。また、明らかに 2 つのプロジェクトがあります。1 つはモバイル用、もう 1 つは Windows または Web (サーバー) 用です。

于 2012-12-06T14:31:14.143 に答える