※SendGridを SMTPサーバとして使用しメール送信する C#実装は楽なのですが、実装途中、へんにハマったので、2025年版の C#+SendGrid開発手順を纏めました。
※一部画像はブラウザの翻訳機能で日本語表示になっていますが、元は全画面英語です。
C#でSendGrid開発する手順は、GitHubの Readmeが分かり易い。
https://github.com/sendgrid/sendgrid-csharp

SendGridアカウント作成
Twilioに買収されてから、ログインアカウントは Twilioアカウントになっている。
https://sendgrid.com/en-us

SendGridにログイン
※ログイン時に Twilioの認証を通らないと、ID/PWは合っているのにログインに失敗し続けてハマる。
失敗パターン
サイイン。
https://sendgrid.com/en-us

ユーザ名入力。
https://login.sendgrid.com/login/identifier

正しい ID/PWを入力し Continueをクリックすると、「Your username or password is invalid. If you are using Twilio login, please use your email address as your username on the previous page.」エラーになる。

正しいID/PWで ログインに失敗する場合、Twilio SendGrid Docsページの Loginボタンからログイン画面へ遷移すると、ログインに成功するようになる。
https://www.twilio.com/docs/sendgrid/ui/account-and-settings/twilio-login-overview?_gl=1*1a10os4*_gcl_au*MTQ4NTc3MzEwNC4xNzQzODk3NzQx*_ga*MTE1MDIyODcxMS4xNzQzODk3NzQy*_ga_8W5LR442LD*MTc0MzkxNTY4My41LjEuMTc0MzkxNTkyNC4wLjAuMA..

成功パターン
サイイン。
https://sendgrid.com/en-us

ユーザ名を入力。
https://login.sendgrid.com/login/identifier

ID/PW 入力。

スマフォに届いたショートメッセージからコードを入力。

ログインに成功するとダッシュボード画面へ遷移する。
https://app.sendgrid.com/

SendGrid API キーを作成
「設定 > APIキー」画面へ遷移し、「APIキー作成」をクリック。
https://app.sendgrid.com/settings/api_keys

「API Key Name」「API Key Permissions」を入力し、「Create & View」をクリック。
※無料の範囲内で使う場合も、「API Key Permissions」は「Full Access」を選択して良い。

API Key が発行されるのでコピーしメモしておく。

SendGrid 送信者を作成
「設定 > 送信者認証」画面の「新しい送信者の作成」をクリック。
https://app.sendgrid.com/settings/sender_auth/senders

各欄を入力し「Create」をクリック。

Visual Studio プロジェクトに SendGridパッケージをインストール
Visual Studio の「パッケージ マネージャー コンソール」でインストールコマンドを実行。
1 2 3 |
PM> Install-Package SendGrid |
メール送信プログラムを実装
Webアプリ実行時に例外が発生した場合、例外の内容を SendGridを使って管理者へメール送信する共通ライブラリを作成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using SendGrid.Helpers.Mail; using SendGrid; namespace WebApplication1.Cmn { public static class SendGridSt { public static async Task SendAsync(string requestUrl, Exception ex) { // ★ここにSendGridのAPIキーを入力してください(例: "SG.XXXXXXXXXXXXXXXXXXXX") var client = new SendGridClient("【SendGridのAPIキー】"); var msg = MailHelper.CreateSingleEmail( // ★ここに送信元メールアドレスと名前を入力してください(認証済みである必要あり) new EmailAddress("【送信元メールアドレス】", "【送信元の表示名】"), // ★ここに送信先メールアドレスと名前を入力してください new EmailAddress("【送信先メールアドレス】", "【送信先の表示名】"), "【件名:例外発生通知メール】", // テキスト形式のメール本文(URLと例外情報) $"[Request URL]\n{requestUrl}\n\n[Exception]\n{ex}", // HTML形式のメール本文(整形済み) $"<p><strong>[Request URL]</strong><br>{System.Net.WebUtility.HtmlEncode(requestUrl)}</p>" + $"<p><strong>[Exception]</strong></p>" + $"<pre style='font-family: Consolas, monospace'>{System.Net.WebUtility.HtmlEncode(ex.ToString())}</pre>" ); var response = await client.SendEmailAsync(msg).ConfigureAwait(false); } } } |
ASP.NET Core MVC のコントローラーに実装されている try catch で、共通ライブラリを使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using Microsoft.AspNetCore.Http.Extensions; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; using System.Diagnostics; using System.Text; using WebApplication1.Cmn; using WebApplication1.Models; namespace WebApplication1.Controllers { public class HomeController : BaseController { private readonly IMemoryCache MemoryCache; private readonly ILogger<HomeController> Logger; public HomeController(IMemoryCache memoryCache, ILogger<HomeController> logger) { MemoryCache = memoryCache; Logger = logger; } [HttpGet] public IActionResult Index([FromQuery] HomeIndexQuery query) { try { var viewModel = HomeControllerSt.GetViewModel( MemoryCache, Logger, query.Culture, query.X1, query.X2, query.X3, query.X4, query.X5, query.X6 ); return View(viewModel); } catch (Exception ex) { _ = SendGridSt.SendAsync(HttpContext?.Request?.GetDisplayUrl(), ex); return BadRequest(); } } } } |
メール送信プログラムを実行テスト
メール送信処理が正常終了していることを確認。

メール受信できていることを確認。
※Gmailだと迷惑メール扱いになっている可能性あり。

コメント