[C#]MailKitを使用してGmailからメールを送信する。※PDF添付有

今回はメール送信のライブラリのMailKitを使用してSMTPサーバからgmailを送信する方法を紹介します。

事前準備

①以下urlを参考にして安全性の低いアプリを許可する設定を行う。

https://www.ipentec.com/document/software-google-gmail-allow-users-to-manage-their-access-to-less-secure-apps

②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に設定したいメールアドレスをカンマ区切りで設定

その他の備忘録はこちら👇

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です