gmail の SMTP を使ってメールを送信する

クライアントからメールを送信しようとするとき、何処の SMTP を踏み台にして送信しようか悩む。SMTP によって、一度 POP3 しないと駄目だったり、セキュリティ上外部受付していなかったりして、汎用的なモノがない…のだが、結構以前から gmail の smtp.gmail.com が使われていたりする。で、もう一度試しておこうと思って、System.Net.Mail.SmtpClient を使って送っていたのだが、

MailKitが公式に.NETのSmtpClientを置き換えることを明らかにした。
https://www.infoq.com/jp/news/2017/04/MailKit-MimeKit-Official

の問題もあったり、何故か gmail のほうで受け付けなくなったりしていて。

ということで、MailKit で置き換えたものを晒しておきます。

C#でSMTP(STARTTLS と SMTP over SSL)でメール送信する – YoshinoriN’s Memento
https://yoshinorin.net/2016/10/29/csharp-mail-smtps-starttls/

のコードを gmail に変えただけです。

static void Main(string[] args)
{
    Console.WriteLine("Hello SMTP World!");

    string id = &quot;<gmailのログインID>&quot;;
    string pass = &quot;<gmailのパスワード>&quot;;
    string from = &quot;<宛先>&quot;;
    string to = &quot;<自分のメール>&quot;;
    string subject = &quot;送信テスト : &quot; + DateTime.Now.ToString();
    string body = &quot;from t.masuda&quot;;

#if false
    var smtp = new System.Net.Mail.SmtpClient();
    smtp.Host = &quot;smtp.gmail.com&quot;; //SMTPサーバ
    smtp.Port = 587;              //SMTPポート
    smtp.EnableSsl = true;
    smtp.Credentials = new System.Net.NetworkCredential(id, pass); //認証
    var msg  = new System.Net.Mail.MailMessage(from, to, subject, body);
    smtp.Send(msg); //メール送信
#else           

    var smtp = new MailKit.Net.Smtp.SmtpClient();
    smtp.Connect(&quot;smtp.gmail.com&quot;, 587, SecureSocketOptions.Auto);
    smtp.Authenticate(id, pass);

    var mail = new MimeKit.MimeMessage();
    var builder = new MimeKit.BodyBuilder();

    mail.From.Add(new MimeKit.MailboxAddress(&quot;&quot;, from));
    mail.To.Add(new MimeKit.MailboxAddress(&quot;&quot;, to));
    mail.Subject = subject;
    builder.TextBody = body + &quot; by gmail&quot;;
    mail.Body = builder.ToMessageBody();

    smtp.Send(mail);
    smtp.Disconnect(true);
#endif

    Console.WriteLine(&quot;メールを送信しました&quot;);
}

NuGet で MailKit をインストールすると、.net standard 対応なので、.net core と .net framework のどちらでもメールを送れるようになります。

カテゴリー: 開発, C# パーマリンク