【.NET/C#】SmtpClientにGMailのSMTPサーバーを指定してメールを送信する
2023-3-30 | C#
.NETでSmtpClientにGMailのSMTPサーバーを指定してメールを送信したい!
概要
今回の記事では、.NETでSmtpClientにGMailのSMTPサーバーを指定してメールを送信する手順を掲載する。
仕様書
環境
- .NET 5.0
手順書
「下準備編」と「プログラム編」の2部構成です。
下準備編
まず、Googleアカウントの2段階認証を設定して後、更にアプリパスワードを設定する必要がある。詳細は下記のリンクを参照。
アプリパスワードの発行のページへのアクセスがちょっとわかりにくいので説明する。2段階認証は予め設定しておく。
- ChromeでGMailなどのGoogleのページを開いて右上の「Googleアプリ」のアイコンを左クリックする。表示されるのアイコンの中の「アカウント」を左クリックする。
- 左のリストのセキュリティを左クリックする。
- 「Googleにログインする方法」の中の「2段階認証プロセス」を左クリックする。
- 表示された下の方に「アプリパスワード」があるので左クリックする。
- アプリを「メール」、デバイスを「Windowsパソコン」に設定して「生成」を左クリックする。
- 右上の黄色地の部分にアプリパスワードが表示される。次節のプログラムで使用するので控えておく。
プログラム編
下記はSmtpClientにGMailのSMTPサーバーを指定してメールを送信するサンプルのコード。
using System;
using System.Net.Mail;
public class MailTest
{
static public void SendMail(
string from,
string to,
string subject,
string body)
{
var msg = new MailMessage();
msg.To.Clear();
msg.To.Add(new MailAddress(to));
msg.CC.Clear();
msg.Bcc.Clear();
SmtpClient sc = new SmtpClient();
sc.Timeout = 5000;
msg.From = new MailAddress("<USER_NAME>@gmail.com", "<USER_NAME>");
sc.Host = "smtp.gmail.com";
sc.Port = 587;
sc.EnableSsl = true;
sc.Credentials = new System.Net.NetworkCredential("<USER_NAME>@gmail.com", "<APP_PW>");
msg.Subject = subject;
msg.Body = body;
try
{
sc.Send(msg);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
msg.Dispose();
sc.Dispose();
}
return;
}
}
sc.Credentials = new System.Net.NetworkCredential("<USER_NAME>@gmail.com", "<APP_PW>");
の<APP_PW>
は前節で控えたアプリパスワードを入力する。<USER_NAME>@gmail.com
はアプリパスワードを発行したGoogleアカウントのメールアドレスを入力する。
まとめ(感想文)
以前は、アプリパスワードは必要なくて、アカウントのパスワードで良かったんだけども、セキュリティの観点からアプリパスワードを使うように仕様変更されたんだと思われ。