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