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

VB.NET

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

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

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

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

Less secure apps & your Google Account - Google Account Help
Starting on September 30, 2024, less secure apps, third-party apps, or devices that have you sign in with only your username and password will no longer be supp...

手順

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

Turn on 2-Step Verification - Computer - Google Account Help
With 2-Step Verification, also called two-factor authentication, you can add an extra layer of security to your account in case your password is stolen. After y...

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をコピーしました