VB.NETで、SMTPサーバーにGmailを使ってメールを送信する方法に関する個人メモとなります。参考までにどうぞ。
まずGmailへのアプリ用ログインパスワードを作成する
まずは事前準備として、アプリ用のログインパスワードを作っておく必要があります。
また、アプリ用のパスワードを設定するにはアカウントに2段認証を設定しておく必要があります。詳しくは下記の記事を読んでください。
Less secure apps & your Google Account - Google Account Help
Starting January 2025, less secure apps, third-party apps, or devices that have you sign in with only your username and password will no longer be supported for...
手順
1.SMTPサーバーとして利用するGmailアカウントに対して2段認証を設定します。2段認証の設定方法は下記の記事を参考にしてください。
Turn on 2-Step Verification - Computer - Google Account Help
With 2-Step Verification, or two-factor authentication, you can add an extra layer of security to your account in case your password is stolen. After you set up...
2.アプリパスワード設定します。詳しくは下記の記事を読んでください。
Sign in with app passwords - Google Account Help
Important: App passwords aren’t recommended and are unnecessary in most cases. To help keep your account secure, use "Sign in with Google" to connect apps to yo...
用途やデバイスは↓のように適宜選択してください。
↓のような感じでアプリ用のログインパスワードが表示されます。
MailKitをプロジェクトに取り込む
今回はmailkitを用いることにします。まずはプロジェクトにmailkitを取り込みます。
1.当該プロジェクトをVisualStudioで立ち上げ、[ソリューションのNugetパッケージの管理(N)]を押します。
2.下記をしてください。
①”参照”を押します。
②”MailKit”と入力します。
③MailKitを選択します。
④MailKitをインストールするプロジェクトにチェックを付けます
⑤[インストール]をクリックします。
プログラムソースを書く
mailkitを使ってメールの送信を行います。上記で用意したGmailへのアプリ用ログインパスワードを用います。下記プログラムソースの中の大かっこ{}の箇所を適宜文字列に変更して使用してください。
Dim mimMsg = New MimeKit.MimeMessage
'送信者
mimMsg.From.Add(New MimeKit.MailboxAddress({送信者名}, {Googleアカウント(メールアドレス)を入力する}))
'宛先
mimMsg.To.Add(New MimeKit.MailboxAddress({宛先名}, {宛先メールアドレス}))
mimMsg.Cc.Add(New MimeKit.MailboxAddress(宛先名(CC), {宛先メールアドレス}))
mimMsg.Bcc.Add(New MimeKit.MailboxAddress(宛先名(BCC), {宛先メールアドレス}))
'タイトルを設定する
mimMsg.Subject = {ここにメールタイトルを入力する}
'メール本文を作成する
Dim tepText = New MimeKit.TextPart(MimeKit.Text.TextFormat.Text)
tepText.Text = {ここにメール本文を入力する}
'添付ファイルを設定する
Dim txtPath As String = {ここに添付ファイルのパスを入力する。}
Dim mimeType As String = MimeKit.MimeTypes.GetMimeType(txtPath)
Dim micAttach As MimeKit.MimePart = New MimeKit.MimePart(mimeType)
micAttach.Content = New MimeKit.MimeContent(System.IO.File.OpenRead(txtPath))
micAttach.ContentDisposition = New MimeKit.ContentDisposition(MimeKit.ContentDisposition.Attachment)
micAttach.ContentTransferEncoding = MimeKit.ContentEncoding.Default
micAttach.FileName = System.IO.Path.GetFileName(txtPath)
Dim mimlBody As MimeKit.Multipart = New MimeKit.Multipart("mixed")
mimlBody.Add(tepText)
mimlBody.Add(micAttach)
mimMsg.Body = mimlBody
'添付ファイルをつけない場合は↓のコメント行のようにtepTextをつければ良い。
'mimMsg.Body = tepText
Using misClient = New MailKit.Net.Smtp.SmtpClient()
Try
misClient.Connect("smtp.gmail.com", 587,) 'SMTP サーバー,ポートを設定する
misClient.Authenticate({ここにGoogleアカウント(メールアドレス)を入力する}, {ここにアプリパスワードを入力する}) '認証
misClient.Send(mimMsg) '送信
misClient.Disconnect(True) '切断
'非同期で送信する場合は↓のコメントアウトの内容を用いたうえで、呼び出し元の関数に「Async」を付ければ良い。
'Await misClient.ConnectAsync("smtp.gmail.com", 587) 'SMTP サーバー,ポートを設定する
'Await misClient.AuthenticateAsync({ここにGoogleアカウント(メールアドレス)を入力する}, {ここにアプリパスワードを入力する}) '認証
'Await misClient.SendAsync(mimMsg) '送信
'Await misClient.DisconnectAsync(True) '切断
Catch ex As Exception
Throw New Exception(ex.Message & vbCrLf & vbCrLf & "メールの送信が失敗しました。")
End Try
End Using
以上となります。参考になれば幸いです。