C# で Gmail の SMTP サーバを使ってメールを送信する方法

C# で Gmail の SMTP サーバを使ってメールを送信する

ここでは、C# で Gmail の SMTP サーバを使ってメールを送信する方法をご説明します。

Google でアプリパスワード (App Password) を生成する

Gmail の SMTP サーバを使ってメールを送信する際に必要な、アプリパスワード (App Password) を生成します。

アプリパスワードを生成するには、2 段階認証プロセスが有効でなければならないので、していない方は先に有効にしておいてください。


Google アカウントの [セキュリティ (Security)] を選択し、[Google へのログイン (Signing in to Google)] の箇所の [アプリ パスワード (App Passwords)] を選択します。

C# で Gmail の SMTP サーバを使ってメールを送信する方法 1


アプリ パスワード (App Passwords) の画面で、アプリとデバイスを選択します。

C# で Gmail の SMTP サーバを使ってメールを送信する方法 2


今回はアプリには Mail、デバイスには Windows Computer を選択し、[生成 (GENERATE)] ボタンをクリックします。

C# で Gmail の SMTP サーバを使ってメールを送信する方法 3

C# で Gmail の SMTP サーバを使ってメールを送信する方法 4

C# で Gmail の SMTP サーバを使ってメールを送信する方法 5


アプリパスワードが生成され表示されるので、これを使います。

C# で Gmail の SMTP サーバを使ってメールを送信する方法 6


MailKit をインストールする

Visual Studio でコンソールアプリの新規プロジェクトを生成します。

SmtpClient Class のドキュメントページで紹介されている MailKit を使うので、インストールします。

C# で Gmail の SMTP サーバを使ってメールを送信する方法 10


ツール > NuGet パッケージ マネージャー > パッケージ マネージャーコンソールを選択します。

C# で Gmail の SMTP サーバを使ってメールを送信する方法 7


コンソールで Install-Package MailKit と入力して実行すると、MailKit がインストールされます。

C# で Gmail の SMTP サーバを使ってメールを送信する方法 8


C# で Gmail の SMTP サーバを使ってメールを送信する

C# で Gmail の SMTP サーバを使ってメールを送信するには、次のようにできます。

using MailKit.Net.Smtp;
using MimeKit;
using MailKit.Security;

namespace MailTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var smtpServer = "smtp.gmail.com";
            var port = 587;
            var user = "xxxxxxxxx@gmail.com";
            var password = "xxxxxxxxxxxxxxxxx";

            var fromAddress = "xxxxxxxxx@gmail.com";
            var toAddress = "toaddress@gmail.com";
            var subject = "Gmail SMTP Test";
            var body = "これは Gmail SMTP のテストメールです。";
            var isHtmlBody = false;

            var message = new MimeMessage();
            message.From.Add(new MailboxAddress(fromAddress, fromAddress));
            message.To.Add(new MailboxAddress(toAddress, toAddress));
            message.Subject = subject;

            var builder = new BodyBuilder();
            if (isHtmlBody)
            {
                builder.HtmlBody = body;
            }
            else
            {
                builder.TextBody = body;
            }
            message.Body = builder.ToMessageBody();

            using (var client = new SmtpClient())
            {
                client.Connect(smtpServer, port, SecureSocketOptions.StartTls);
                client.Authenticate(user, password);
                client.Send(message);
                client.Disconnect(true);
            }
        }
    }
}

C# で Gmail の SMTP サーバを使ってメールを送信する方法 9

Gmail の SMTP サーバは smtp.gmail.com、ポートは 587 です。

user にはアプリパスワードを生成したアカウントの gmail のアドレスを、password には生成したアプリパスワードを指定します。


22 ~ 25 行目では、MimeMessageオブジェクトを生成して、メールの From、To、Subject を指定しています。

27 ~ 36 行目では、メールの Body を生成しています。テキストでも HTML でもいいように BodyBuilder を使っています。


38 ~ 44 行目が、SmtpClientクライアントを使ってメールを送信している箇所です。

Connect メソッドに上で定義した smtpServer と port を渡し、SecureSocketOptions には SecureSocketOptions.StartTls を指定しています。

Authenticateメソッドに上で定義した user と password を渡して認証しています。

Send メソッドでメールを送信して、Disconnect で切断しています。


これを実行すると、以下のようなメールが送信されました。

C# で Gmail の SMTP サーバを使ってメールを送信する方法 11


以上、C# で Gmail の SMTP サーバを使ってメールを送信する方法をご説明しました。

© 2024 C# 入門