BETA

ASP.NET Coreでメール送信機能を実装する

投稿日:2018-12-18
最終更新:2018-12-18

ASP.NET Coreでメール送信機能

長らくSystem.Net.Mail.SmtpClientクラスが使われてきたものの、現在は非推奨となっている。
新たに公式で推奨されているMailKitを使用する。
導入方法はVisualStudioならNuGetパッケージ管理画面から検索してインストールするだけ。
以下は簡易的なメール送信メソッド

public async void SendMailAsync(string to, string from, string subject, string text)  
{  
    var message = new MimeKit.MimeMessage();  
    // 宛先情報  
    message.From.Add(new MimeKit.MailboxAddress("<宛名>", from));  
    // 送り元情報  
    message.To.Add(new MimeKit.MailboxAddress("<送信者名>", to);  
    // 表題  
    message.Subject = subject;  
    // 内容  
    var textPart = new MimeKit.TextPart(MimeKit.Text.TextFormat.Plain);  
    textPart.Text = text;  
    message.Body = textPart;  

    using (var client = new MailKit.Net.Smtp.SmtpClient())  
    {  
        try  
        {  
            // SMTPサーバに接続  
            await client.ConnectAsync(<smtpのhost>,<smtpのport>);  
            Debug.WriteLine("接続完了");  

            // SMTPサーバ認証(あれば)  
            await client.AuthenticateAsync(<user>, <pass>);  

            // 送信  
            await client.SendAsync(message);  

            // 切断  
            await client.DisconnectAsync(true);  

        }  
        catch(Exception e)  
        {  
            Debug.WriteLine("{0} Exception caught.", e);  
        }  
    }  
}  

なぜSmtpClientクラスが非推奨になったかも含めてここが詳しい

送信テスト方法

IIS6以降、IISで簡易的にSMTPサーバーを立ててメール送信のテストを行うことができなくなった。
SMTPサーバーを別途用意するのは大変なので、smtp4devを使う。

Githubから最新リリースをダウンロードし、任意のディレクトリに解凍する。
内包されているRnwood.Smtp4dev.exeを起動するだけ。
色々警告がでるが無視してOK。
基本はlocalhostの5000番ポートで待ち受けているが、ポートを変えたいならappsettings.jsonの設定を変更する。

先ほどのメール送信メソッド内のsmtpのhostを"localhost",portを25に設定する。
認証部分はいらないのでコメントアウト。

上記過程を踏んだうえでメソッドを使用すると、smtp4devがメールをキャッチして、宛先、送信元、表題、内容を見ることができる。
実際の宛先には送信されない。

UIの情報等、少し古いがここを参考にした。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@showyleeの技術ブログ

よく一緒に読まれる記事

1件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
10/14 07:13

参考になりました message.To.Add(new MimeKit.MailboxAddress("<送信者名>", to);の後ろに)が不足しているようです 宛名と送付元の扱いが逆のようです

目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!