今回はメール送信のライブラリのMailKitを使用してSMTPサーバからgmailを送信する方法を紹介します。
事前準備
①以下urlを参考にして安全性の低いアプリを許可する設定を行う。
②2段階認証を有効にし、アプリパスワードを利用する設定を行う。
https://support.google.com/accounts/answer/185833?hl=ja
③MailKitのダウンロードや初期設定についてを以下を参考にしました。
https://itsakura.com/csharp-mailkit
ソースコード
// メールの送信に必要な情報
var smtpHostName = "smtp.gmail.com";
var smtpPort = 587;
var smtpAuthUser = "";//gmailのメールアドレス
var smtpAuthPassword = "";//gmailのパスワード
var from = "";//gmailのメールアドレス
var cc = "test_cc1@gmail.com; test_cc2@gmail.com;";//ccに設定したいメールアドレスをカンマ区切りで設定
var bcc = "test_bcc1@gmail.com; test_bcc2@gmail.com;";//bccに設定したいメールアドレスをカンマ区切りで設定
//Emailリスト作成
var emailList = new List<string>()
{
"test1@gmail.com",
"test2@gmail.com",
};
//添付ファイルを設定
var attachment = new MimeKit.MimePart("pdf/pdf");
// DirectoryInfoのインスタンスを生成する
DirectoryInfo di = new DirectoryInfo(@"..\PDF_Out\");//添付するPDFが格納されているフォルダを設定
FileInfo[] fiAlls = di.GetFiles();
if (fiAlls.Length != 1)//今回は1つでない場合はエラーにしています
{
//PDFファイル数エラー。
}
attachment.Content = new MimeKit.MimeContent(System.IO.File.OpenRead(Path.Combine(@"..\PDF_Out\", fiAlls[0].Name)));
attachment.ContentDisposition = new MimeKit.ContentDisposition();
attachment.ContentTransferEncoding = MimeKit.ContentEncoding.Base64;
attachment.FileName = System.IO.Path.GetFileName(Path.Combine(@"..\PDF_Out\", fiAlls[0].Name));
//件名
var subject = "件名";//メールの件名を設定
//テキストを設定
var path = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, @"EmailBody.txt");//exeと同じディレクトリにテキストをおいてその内容をメッセージに表示
var body = string.Empty;
MimeKit.TextPart textPart = new MimeKit.TextPart("plain");
body = System.IO.File.ReadAllText(path);
textPart.Text = body;
//Multipartオブジェクトの作成
var multipart = new MimeKit.Multipart("mixed");
multipart.Add(textPart);
multipart.Add(attachment);
// MailKit におけるメールの情報
var message = new MimeMessage();
// 送り元情報
message.From.Add(MailboxAddress.Parse(from));
// 宛先情報
foreach (var item in emailList)
{
message.To.Add(MailboxAddress.Parse(item));
}
// cc
var ccsplit = cc.Split(';');
foreach (var item in ccsplit)
{
if (!string.IsNullOrEmpty(item))
{
message.Cc.Add(MailboxAddress.Parse(item));
}
}
// bcc
var bccsplit = bcc.Split(';');
foreach (var item in bccsplit)
{
if (!string.IsNullOrEmpty(item))
{
message.Bcc.Add(MailboxAddress.Parse(item));
}
}
// 表題
message.Subject = subject;
message.Body = multipart;
var client = new SmtpClient();
// SMTPサーバに接続
client.Connect(smtpHostName, smtpPort, SecureSocketOptions.Auto);
if (string.IsNullOrEmpty(smtpAuthUser) == false)
{
// SMTPサーバ認証
client.Authenticate(smtpAuthUser, smtpAuthPassword);
}
// 送信
client.Send(message);
// 切断
client.Disconnect(true);
attachment.Dispose();
解説
1~17行目:ユーザー名やパスワード、メールアドレスを設定します。
ユーザー名とパスワードは「事前準備②2段階認証を有効にし、アプリパスワードを利用する設定を行う。」で設定したものを入れる。
19~32行目:添付ファイルを設定します。20行目で添付ファイルの種類を設定し、22行目でPDFが配置されているフォルダを設定します。23行目でフォルダ内のファイルを取得してファイルが一つでない場合はエラーにしています。
33~43行目:件名と本文を設定します。exeと同ディレクトリに”EmailBody.txt”ファイルを配置し、その内容を本文に設定します。(37行目)
45~48行目:PDFを添付する為、Multipartオブジェクトを作成しています。textPartオブジェクトが本文、attachmentオブジェクトがPDF部分です。
50~82行目:MimeMessageインスタンスを生成してメール送信する為の情報を設定します。宛先情報はList<string>型なのでforeachで回して宛先を追加しています。(55~59行目) cc情報は以下のようにカンマ区切りになっているのでカンマで分けてからforeachで回してccを追加しています。(60~68行目)bccも同様です。(69~77行目)
var cc = "test_cc1@gmail.com; test_cc2@gmail.com;";//ccに設定したいメールアドレスをカンマ区切りで設定
その他の備忘録はこちら👇
【美肌をかなえる はーたん流 美容の正解】を読破!
美肌をかなえる はーたん流 美容の正解 [ はーたん ] 楽天で購入 YouTuberでも有名なはーたんさんが…
【2022年版】フェイスマスク保水力ランキング ー ドラッグストアで買える ー 美ルルのスキンチェッカー使用
ドラッグストアで購入できるフェイスマスクからパックをした翌日の肌の水分値を調べて多い順にランキングさせて頂きま…
滋賀県大津市坂本の【比叡山延暦寺】へ先祖回向に行きました
なんだかいきなりどうしたというタイトルですよね笑 そもそも先祖回向とはなんぞや… ご回向えこうとは、お経やお念…