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

#if false
    var smtp = new System.Net.Mail.SmtpClient();
    smtp.Host = "smtp.gmail.com"; //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("smtp.gmail.com", 587, SecureSocketOptions.Auto);
    smtp.Authenticate(id, pass);

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

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

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

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

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

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