クライアントからメールを送信しようとするとき、何処の 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 に変えただけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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 のどちらでもメールを送れるようになります。