0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】適切なメール送信方法について

Posted at

はじめに

メールを送る際に、System.Net.Mailが非推奨となっていた。
そのため、代替案を調査した。

前提

環境

.NET 8.0
MailKit 4.7.1.1
Outlook 2016

代替案

結論から申し上げると、MailKitをおすすめする。
OutlookをC#から操作する方法を使用した場合、メールを送信せず、Outlookが勝手に終了することがあるためである。

MailKit

OutlookをC#から操作する方法に比べ面倒が少ないため、MailKitをおすすめする。
また、Microsoftの公式ドキュメントに「MailKit」を名指しで書いているだけあり、ネットで検索した際に情報量が多いというメリットもある。

サンプルコード

@ITの「テキストメールを送信するには?」を参照すること。
記事は古いが、.NET 8.0のC#でも動作した。

Outlook(COMオブジェクト)

セットアップ済みのOutlookさえあれば、動作可能な点がメリットである。
一方で下記デメリットが存在する。

  • Outlookのインストール・セットアップが必要であること。
  • Outlook起動中に、C#からOutlookを操作し、メールを送信しようとすると、メッセージボックスが表示されてしまう。
    ※ メッセージボックスにて、何も選択しない場合は、メールを送信せずに終了する。

表示されるメッセージボックス

outlook.png

サンプルコード

using Outlook = Microsoft.Office.Interop.Outlook;
using System.Runtime.InteropServices;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            var outlook = new Outlook.Application();
            try
            {
                Outlook.MailItem mail = outlook.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
                Outlook.AddressEntry currentUser = outlook.Session.CurrentUser.AddressEntry;
                mail.Body = "hoge";
                mail.Recipients.Add("hoge@hoge.com");
                mail.Recipients.ResolveAll();
                mail.Send();
            }
            finally
            {
                outlook.Quit();
                Marshal.ReleaseComObject(outlook);
            }
        }
    }
}

注意事項

下記DLLの参照設定が必要である。
Microsoft.Office.Interop.Outlook.dll

さいごに

「System.Net.Mail」の代替案を調査した結果、「MailKit」をおすすめする。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?