【vb.net】SMTPサーバーにGmailを指定してメールを送信する方法

VB

VB.NETで、SMTPサーバーにGmailを使ってメールを送信する方法に関する個人メモとなります。参考までにどうぞ。

まずGmailへのアプリ用ログインパスワードを作成する

まずは事前準備として、アプリ用のログインパスワードを作っておく必要があります。

また、アプリ用のパスワードを設定するにはアカウントに2段認証を設定しておく必要があります。詳しくは下記の記事を読んでください。

Less secure apps & your Google Account - Google Account Help
If an app or site doesn’t meet our security standards, Google might block anyone who’s trying to sign in to your account from it. Less secure apps can make it e...

手順

1.SMTPサーバーとして利用するGmailアカウントに対して2段認証を設定します。2段認証の設定方法は下記の記事を参考にしてください。

Protect your account with 2-Step Verification - Computer - Google Account Help
With 2-Step Verification (also known as two-factor authentication), you add an extra layer of security to your account in case your password is stolen. After yo...

2.アプリパスワード設定します。詳しくは下記の記事を読んでください。

Sign in with App Passwords - Google Account Help
Tip: 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 your Goo...

用途やデバイスは↓のように適宜選択してください。

↓のような感じでアプリ用のログインパスワードが表示されます。

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

以上となります。参考になれば幸いです。

タイトルとURLをコピーしました