C# で Gmail を使ってメールを送信する
必要なライブラリ
- System.Net.Mail: メール送信の基本的な機能を提供します。
- Google.Apis.Gmail.v1: GoogleのGmail APIと連携するためのライブラリです。
基本的な手順
Gmail APIの有効化:
- Google Cloud Platformのコンソールでプロジェクトを作成します。
- APIライブラリで「Gmail API」を有効化します。
- APIキーを作成し、安全に保管します。
コードの実装:
using System; using System.Net.Mail; using Google.Apis.Gmail.v1; using Google.Apis.Services; using Google.Apis.Util.Store; namespace EmailSender { class Program { static void Main(string[] args) { // Gmail APIの認証情報 string apiKey = "YOUR_API_KEY"; // ここにAPIキーを入力 string fromAddress = "[email protected]"; // メール送信先の情報 string toAddress = "[email protected]"; string subject = "Test Email"; string body = "This is a test email sent using Gmail API."; // Gmail APIの認証 var service = new GmailService(new BaseClientService.Initializer() { ApiKey = apiKey }); // メールを作成 var message = new MimeMessage(); message.From.Add(new Mailbox(fromAddress)); message.To.Add(new Mailbox(toAddress)); message.Subject = subject; message.Body = new TextPart("plain") { Text = body }; // メールをBase64エンコードする var encodedMessage = Base64UrlEncode(message.ToString()); // Gmail APIを使ってメールを送信 var request = service.Users.Messages.Send(new Message { Raw = encodedMessage }, "me"); var response = request.Execute(); Console.WriteLine("Email sent successfully!"); } // Base64エンコード関数 static string Base64UrlEncode(string input) { var bytes = System.Text.Encoding.UTF8.GetBytes(input); var base64 = Convert.ToBase64String(bytes); return base64.Replace('+', '-').Replace('/', '_').Replace("=", ""); } } }
注意:
- Gmail APIの認証情報は安全に管理してください。APIキーを公開することは避けてください。
- メール送信の頻度や送信量によっては、Googleの制限が適用されることがあります。
C#でGmail APIを使う:コード解説
コードの全体的な流れ
ライブラリのインポート:
apiKey
:Google Cloud Platformのコンソールで取得したAPIキーを設定します。service
:Gmail APIのサービスオブジェクトを作成します。
メールの作成:
メールのエンコード:
具体的なコード解説
using System.Net.Mail;
using Google.Apis.Gmail.v1;
using Google.Apis.Services;
using Google.Apis.Util.Store;
string apiKey = "YOUR_API_KEY"; // ここにAPIキーを入力
var service = new GmailService(new BaseClientService.Initializer()
{
ApiKey = apiKey
});
string fromAddress = "[email protected]";
string toAddress = "[email protected]";
string subject = "Test Email";
string body = "This is a test email sent using Gmail API.";
var message = new MimeMessage();
message.From.Add(new Mailbox(fromAddress));
message.To.Add(new Mailbox(toAddress));
message.Subject = subject;
message.Body = new TextPart("plain") { Text = body };
メールエンコード:
var encodedMessage = Base64UrlEncode(message.ToString());
メール送信:
var request = service.Users.Messages.Send(new Message { Raw = encodedMessage }, "me");
var response = request.Execute();
重要なポイント
- APIキーの安全な管理:APIキーを公開することは避けてください。
- メール送信の制限:Googleのポリシーに従って、送信頻度や送信量を制限してください。
- 複雑なメールの送信:より複雑なメールフォーマットや添付ファイルの送信には、追加のライブラリやコードが必要になる場合があります。
SMTPプロトコルを使用した直接接続
- 利点:
- GmailのAPIを使用せずに直接接続するため、APIの制限を受けることが少ない。
- SMTPサーバーの設定を柔軟に調整できる。
- 欠点:
- SMTPサーバーの認証やセキュリティ設定を適切に行う必要がある。
- 接続エラーが発生した場合の処理が複雑になる可能性がある。
using System.Net;
using System.Net.Mail;
// SMTPサーバーの設定
string smtpServer = "smtp.gmail.com";
int smtpPort = 587;
string fromAddress = "[email protected]";
string password = "your_password";
// メールを作成
var message = new MailMessage();
message.From = new MailAddress(fromAddress);
// ... (宛先、件名、本文の設定)
// SMTPクライアントを作成
using (var client = new SmtpClient(smtpServer, smtpPort))
{
client.EnableSsl = true;
client.Credentials = new NetworkCredential(fromAddress, password);
client.Send(message);
}
サードパーティのライブラリ
- 利点:
- Gmail APIやSMTPプロトコルを抽象化して扱いやすくする。
- さまざまな機能や設定オプションを提供する。
- 欠点:
- ライブラリの依存性やメンテナンスが必要になる。
- ライブラリの機能や制限が異なる場合がある。
例:MailKit
using MailKit.Net.Smtp;
using MimeKit;
// メールを作成
var message = new MimeMessage();
message.From.Add(new MailboxAddress("Your Name", "[email protected]"));
// ... (宛先、件名、本文の設定)
// SMTPクライアントを作成
using (var client = new SmtpClient())
{
client.Connect("smtp.gmail.com", 587, SslProtocols.Tls);
client.Authenticate("[email protected]", "your_password");
client.Send(message);
client.Disconnect(true);
}
Azure FunctionsやAWS Lambdaなどのクラウド関数
- 利点:
- サーバーレス環境でメール送信をスケーラブルに実行できる。
- さまざまな言語やフレームワークに対応している。
- 欠点:
- クラウドプラットフォームの知識や設定が必要になる。
- クラウドプラットフォームの料金が発生する。
例:Azure Functions
using System.Net;
using System.Net.Mail;
public static void Run(HttpRequest req, ILogger log)
{
// SMTPサーバーの設定
// ...
// メールを作成
// ...
// SMTPクライアントを作成
// ...
// メールを送信
}
c# .net email