クライアントからメールを送信しようとするとき、何処の 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 のどちらでもメールを送れるようになります。