Outlookを使用して複数の顧客に電子メールを送信したい。このために、受信者を反復し、メッセージ本文を作成し、最初のメッセージをプレビューとして表示するメソッドをプログラム内に持っています。Outlookで複数のメールを生成する
これは、その方法の簡易版である:Outlookのメッセージウィンドウが表示されたら、私は同じようにすぐに次のMailItem
があるべきように、ウィンドウを閉じるか、「送信」をクリックすると、どんなに
public void CreateMails(List<InfoMailRecipient> recipients)
{
Microsoft.Office.Interop.Outlook.Application outlook = new Microsoft.Office.Interop.Outlook.Application();
foreach (InfoMailRecipient recipient in recipients)
{
MailItem mail = outlook.CreateItem(OlItemType.olMailItem);
mail.SentOnBehalfOfName = "Sending User";
mail.BCC = recipient.EMailAddress;
mail.Subject = "TEST";
mail.BodyFormat = OlBodyFormat.olFormatHTML;
mail.HTMLBody = "<html><body>test</body></html>";
mail.Display(true);
}
}
私は例外 "RPCサーバーを利用できません"を作成しました。明らかにOutlookが終了しているため。私は
mail.Display(true);
とちょうどすべてのメッセージが正常に送信され.Send();
を呼び出す行を削除するとことが判明しました。しかし、Outlookは開いたままです。 foreach
のループの後に私が.Quit()
と呼んでも。
このOutlookインスタンスを適切に処理する方法を教えてください。
アップデート1 - マニュアルGC-コール
public void CreateMails(List<InfoMailRecipient> recipients)
{
Microsoft.Office.Interop.Outlook.Application outlook = new Microsoft.Office.Interop.Outlook.Application();
foreach (InfoMailRecipient recipient in recipients)
{
MailItem mail = outlook.CreateItem(OlItemType.olMailItem);
mail.SentOnBehalfOfName = "Sending User";
mail.BCC = recipient.EMailAddress;
mail.Subject = "TEST";
mail.BodyFormat = OlBodyFormat.olFormatHTML;
mail.HTMLBody = "<html><body>test</body></html>";
mail.Send();
}
outlook.Quit();
GC.Collect();
GC.WaitForPendingFinalizers();
}
Outlookが動作し続けます。
すべての受信者がまったく同じメッセージを取得しますか? – mjwills
いいえ、メッセージはパーソナライズされている必要があります –
Display呼び出しを削除し、Quitへの呼び出しを追加してからGC.Collect()およびGC.WaitForPendingFinalizers()に呼び出しを追加できますか?この機能から抜け出すと、Outlookは終了しますか? – mjwills