11


5

System.Net.mail.MailMessageを.msgファイルとして保存します

MailMessage(System.Net.mail.MailMessage)を作成してディスクに保存する義務があるアプリケーションを構築しています .msg extention not .eml

以下は、MailMessageを.msgファイルとして保存するために使用しているメソッドです。

   public static void Save(MailMessage Message, string FileName)
    {
        Assembly assembly = typeof(SmtpClient).Assembly;
        Type _mailWriterType =
          assembly.GetType("System.Net.Mail.MailWriter");

        using (FileStream _fileStream =
               new FileStream(FileName, FileMode.Create))
        {
            // Get reflection info for MailWriter contructor
            ConstructorInfo _mailWriterContructor =
                _mailWriterType.GetConstructor(
                    BindingFlags.Instance | BindingFlags.NonPublic,
                    null,
                    new Type[] { typeof(Stream) },
                    null);

            // Construct MailWriter object with our FileStream
            object _mailWriter =
              _mailWriterContructor.Invoke(new object[] { _fileStream });

            // Get reflection info for Send() method on MailMessage
            MethodInfo _sendMethod =
                typeof(MailMessage).GetMethod(
                    "Send",
                    BindingFlags.Instance | BindingFlags.NonPublic);

            // Call method passing in MailWriter
            _sendMethod.Invoke(
                Message,
                BindingFlags.Instance | BindingFlags.NonPublic,
                null,
                new object[] { _mailWriter, true },
                null);

            // Finally get reflection info for Close() method on our MailWriter
            MethodInfo _closeMethod =
                _mailWriter.GetType().GetMethod(
                    "Close",
                    BindingFlags.Instance | BindingFlags.NonPublic);

            // Call close method
            _closeMethod.Invoke(
                _mailWriter,
                BindingFlags.Instance | BindingFlags.NonPublic,
                null,
                new object[] { },
                null);
        }
    }

ただし、保存されたmsgファイルは開かず、以下のエラーが表示されます。 。 "_

私の質問は次のとおりです。* System.Net.mail.MailMessageをmsgファイルとして保存するにはどうすればよいですか?*

6 Answer


4


https://stackoverflow.com/questions/1264672/how-to-save-mailmessage-object-to-disk-as-eml-or-msg-file [こちら]ライアンは、それを簡単に行う素晴らしい方法を提案します努力。

_ 実際には、ネットワークではなくファイルシステムに電子メールを送信するようにSmtpClientを構成できます。 次のコードを使用してプログラム的にこれを行うことができます。 _

SmtpClient client = new SmtpClient("mysmtphost");
client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
client.PickupDirectoryLocation = @"C:\somedirectory";
client.Send(message);

次のようにアプリケーション構成ファイルでこれを設定することもできます。



3


Outlook MSGファイル形式を参照している場合は、http://msdn.microsoft.com/en-us/library/cc463912.aspx [Microsoft発行のMSG形式仕様]を確認してください。 https://stackoverflow.com/questions/15880/read-from-msg-files [類似の質問]への回答に従うことも役立ちます。


2


Outlook .msgファイルを参照している場合、これは.NETでネイティブに実行できません。

Outlookの.msgファイルは複合ドキュメントであるため、その形式で保存し、適切なプロパティをすべて正確な場所に配置する必要があります。

独自に作成するか、サードパーティを使用するか、Outlookの相互運用を行う必要があります。

ごめんなさい、

Dave


2


Outlook Interopライブラリを使用するこの短い例を確認してくださいhttp://weblogs.asp.net/darrensim/archive/2008/06/29/creating-an-outlook-message-file-with-c.aspx[Outlookメッセージファイルの作成C#]で。 それはまさにあなたが求めていたものではありませんが、手動で値を相互に_コピー_する方法があります。


1


MicrosoftサポートKB記事:http://support.microsoft.com/kb/171907/en-us[INFO:メッセージをMSG複合ファイルに保存]


0


Outlookから表示されるエラーメッセージは、。msg *拡張子が原因です。 同じ方法を使用して、MailMessageオブジェクトをディスクに保存しますが、ファイルは拡張子が .eml *のOutlookでのみ開くことがわかりました。