チュートリアル
簡単にライブラリーを使用するためのチュートリアルコレクション
C# アプリケーションからメールを送信する ことは、ビジネスや業務システム開発において一般的なタスクです。プロジェクトの進捗報告、アラート通知、自動レポートなど、信頼性の高いメール送信機能は欠かせません。
この記事では、SMTP 通信とメールフォーマットを簡単に実装できる強力なコンポーネントである Spire.Email for .NET を使って、C# でメールを送信する方法を解説します。SMTP 設定、Gmail との連携、HTML/テキスト本文、ファイル添付、複数宛先の指定など、多彩な機能を紹介します。
目次
まずは .NET プロジェクト(Console App または ASP.NET)を作成し、Spire.Email for .NET パッケージを導入します。
Install-Package Spire.Email
または Spire.Email for .NET を手動でダウンロードし、ローカルのインストールフォルダから Spire.Email.dll を参照設定します。
以下の例では、SMTP サーバーを経由してプレーンテキストのメールを送信する方法を紹介します。
using Spire.Email;
using Spire.Email.Smtp;
// SMTP クライアントを構成します
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.example.com";
smtp.Port = 587;
smtp.Username = "your@example.com";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
// メールアドレスを作成します
MailAddress sender = new MailAddress("your@example.com", "送信者名");
MailAddress recipient = new MailAddress("recipient@example.com", "受信者名");
MailMessage message = new MailMessage(sender, recipient);
// メールの内容を設定します
message.Subject = "テストメール";
message.BodyText = "これはプレーンテキストのテストメールです。";
// メールを送信します
smtp.SendOne(message);
ポイント:
MailAddress
と MailMessage
クラスを使用ConnectionProtocols.StartTls
により、TLS によるセキュアな通信を確立以下のスクリーンショットは、上記のコードで実際に送信されたメールの内容です。
以下は Gmail の SMTP を使用して、HTML メールを複数の宛先に送信し、添付ファイルを追加する例です。HTML をサポートしないメールクライアント向けにテキスト本文も設定しています。
using Spire.Email;
using Spire.Email.Smtp;
// MailAddress オブジェクトを作成します
MailAddress from = new MailAddress("your@gmail.com", "あなたの名前");
MailAddress to1 = new MailAddress("user1@example.com", "ユーザー1");
MailAddress to2 = new MailAddress("user2@example.com", "ユーザー2");
// メールメッセージを作成します
MailMessage message = new MailMessage(from, to1);
message.To.Add(to2);
message.Cc.Add(new MailAddress("cc@example.com", "CC担当者"));
message.Bcc.Add(new MailAddress("bcc@example.com"));
// メッセージの HTML 本文とテキスト本文を設定します
message.Subject = "月次レポート - 2025年6月";
message.BodyHtml = "<h2 style='color:#2E86C1;'>レポート概要</h2><p>添付のPDFレポートをご確認ください。</p>";
message.BodyText = "レポート概要 - 添付のPDFをご確認ください。";
// メールに添付ファイルを追加します
Attachment attachment = new Attachment(@"Sample.pdf");
message.Attachments.Add(attachment);
// SMTP クライアントを構成します
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.Username = "your@gmail.com";
smtp.Password = "your_app_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
// メールを送信します
smtp.SendOne(message);
ポイント:
MailAddress
, MailMessage
, Attachment
, SmtpClient
を使用BodyHtml
+ BodyText
を併用することで、HTML/非対応クライアントの両方に対応To.Add()
, Cc.Add()
, Bcc.Add()
で複数宛先を追加StartTls
でセキュアに使用💡 2 段階認証を有効にしている場合、アプリ パスワード の設定が必要です。
以下は、Gmail SMTP を通じて送信された HTML メール(CC・BCC・PDF 添付あり)の表示例です。
関連チュートリアル: C# で添付ファイル付きのメールを送信する方法
このセクションでは、Spire.Email の機能を使って、埋め込み画像やバッチ送信など、さらに高度なメール送信の例を紹介します。
using Spire.Email;
using Spire.Email.Smtp;
// 画像を埋め込んだメールを準備します
MailMessage message = new MailMessage(
new MailAddress("your@domain.com", "送信者"),
new MailAddress("client@domain.com", "クライアント"));
message.Subject = "ブランディング更新";
message.BodyHtml = "<h1>新しいロゴ</h1><img src=\"cid:logo\">";
message.BodyText = "画像を見るにはHTML形式でこのメッセージをご覧ください。";
Attachment logo = new Attachment(@"C:\Images\logo.png");
logo.ContentId = "logo";
logo.DispositionType = "Inline";
message.Attachments.Add(logo);
// 2通目のメールを準備します
MailMessage message2 = new MailMessage(
new MailAddress("your@domain.com"),
new MailAddress("sales@domain.com"));
message2.Subject = "週間サマリー";
message2.BodyText = "これは自動送信された週間更新メールです。";
// SMTP クライアントを作成します
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.domain.com";
smtp.Port = 587;
smtp.Username = "your@domain.com";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
// 1通のメールを送信します
smtp.SendOne(message);
// 複数のメールを一括送信します
smtp.SendSome(new List<MailMessage> { message, message2 });
ポイント:
Attachment.ContentId
+DispositionType = "Inline"
により、HTML 内に画像を埋め込み表示SendOne()
で個別メールを送信SendSome()
で複数メールをまとめて一括送信(例:定期レポートや通知)以下のスクリーンショットは、企業ロゴを埋め込んだ HTML メールの表示例です。
エラー内容 | 主な原因 |
---|---|
認証失敗 | 認証情報が間違っている、またはアプリパスワードが未設定 |
セキュア接続が必要です | ConnectionProtocols に StartTLS または SSL が必要 |
HTML が表示されない | BodyHtml と BodyText の両方を適切に設定していない |
ファイルが見つかりません | 添付ファイルのパスが間違っている |
Spire.Email for .NET は、以下のようなシナリオに最適です:
SMTP ヘッダや MIME フォーマット、エンコーディング処理を意識せず、直感的に操作できる API を提供します。
Spire.Email for .NET を使えば、C# アプリケーションに信頼性の高いメール送信機能を簡単に組み込むことができます。トランザクションメール、HTML レポート、スケジュール配信など、あらゆる用途に柔軟に対応可能です。
プレーンテキスト/HTML 両対応、添付ファイル、Gmail SMTP、画像の埋め込み、複数送信など、豊富な機能を備えており、外部ライブラリに頼らずメール機能を統合できます。
メール本文や添付ファイルに表示される評価版の警告を削除するには、無償の一時ライセンスを申請してください。
フォームを記入し、指示に従ってライセンスを適用するだけで、全機能が試用可能になります。
MailMessage
オブジェクトの BodyHtml
プロパティに HTML を設定することで HTML メールを送信できます。HTML 非対応のクライアント向けに BodyText
も併用することをおすすめします。
message.To.Add()
、message.Cc.Add()
、message.Bcc.Add()
を使って複数宛先を追加できます。Spire.Email は To/Cc/Bcc の各フィールドに対応しています。
ASP.NET や MVC プロジェクトでも、Console アプリと同様に SmtpClient
を設定し、SendOne()
や SendSome()
メソッドを使ってメールを送信できます。
C# で添付ファイル付きのメールを送信 するのは、レポートや請求書、ログの共有など、業務アプリケーションでよく求められる機能の一つです。.NET の標準ライブラリでも基本的なメール送信は可能ですが、添付ファイルの扱いやエンコーディング、動的に生成されるファイルの送信など、やや複雑な処理が必要になる場合があります。
この記事では、C# でメールにファイルを添付して送信する方法 を、具体的な C# コードとともにわかりやすく解説します。ローカルファイルの添付、メモリストリームやバイト配列からの添付、SMTP の設定方法などを順を追って紹介していきます。コンソールアプリや ASP.NET など、さまざまなプロジェクトに応用できる内容です。
目次
Spire.Email for .NET は、Outlook や他のメールクライアントに依存せず、C# アプリケーション内でメールの作成・送信・受信・管理を実現できるプロフェッショナルなライブラリです。SMTP、POP3、IMAP をサポートし、添付ファイルや HTML 本文、インラインリソースなども簡単に扱えます。
NuGet 経由で簡単にインストールできます:
Install-Package Spire.Email
または、公式サイトから Spire.Email をダウンロード して手動でインストールすることも可能です。
業務システムなどでは、PDF レポートなどのファイルを定期的に送信するケースが多くあります。ここでは、ローカルディスク上のファイル(例:PDF)を添付し、Spire.Email を使って C# から送信する基本的な方法を紹介します。
主なステップは以下の通りです:
サンプルコード
この実践的な例では、C#を使用して添付ファイル付きのメールを送信する方法を、わずか数行のコードで明確に説明しています。
using Spire.Email;
using Spire.Email.Smtp;
class Program
{
static void Main()
{
try
{
// 差出人、宛先、CC のメールアドレスを作成
MailAddress addressFrom = new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "送信者名");
MailAddress addressTo = new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "受信者名");
MailAddress addressCc = new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "CC 名");
// メールメッセージを作成し、差出人と宛先を設定
MailMessage message = new MailMessage(addressFrom, addressTo);
// CC を追加
message.Cc.Add(addressCc);
// 件名と本文(HTML)を設定
message.Subject = "2025年6月分 月次レポート";
message.BodyHtml = "<div style='font-family:Meiryo, sans-serif; font-size:14px; color:#333; line-height:1.8;'>" +
"<p>関係者各位</p>" +
"<p>いつもお世話になっております。</p>" +
"<p>2025年6月分の<strong style='color:#2E86C1;'>月次レポート</strong>を添付いたしましたので、ご確認ください。</p>" +
"<p>ご不明な点がございましたら、お気軽にご連絡ください。</p>" +
"<p style='margin-top:30px;'>どうぞよろしくお願いいたします。</p>" +
"<p style='font-style:italic; color:#555;'>送信者名</p>" +
"</div>";
// 添付ファイルを追加
string filePath = @"Sample.pdf";
Attachment attachment = new Attachment(filePath);
message.Attachments.Add(attachment);
// SMTP クライアントの設定
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.yourcompany.com";
smtp.Port = 587;
smtp.Username = "your_username";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
// メールを送信
smtp.SendOne(message);
// 成功メッセージ
Console.WriteLine("メールを正常に送信しました。");
}
catch (Exception ex)
{
// エラーメッセージ
Console.WriteLine("メールの送信に失敗しました。");
Console.WriteLine("エラー内容: " + ex.Message);
}
}
}
実行すると、以下のように PDF を添付したメールが送信されます。
ドキュメントや画像をリアルタイムで生成して添付したい場合、ファイルを保存せずにそのまま添付できると便利です。Spire.Email では、MemoryStream や byte[] から直接添付が可能です。
メモリストリームからPDFを添付する:
using System.IO;
using Spire.Email;
String filePath = @"Sample.pdf";
MemoryStream stream = new MemoryStream(File.ReadAllBytes(filePath));
Attachment attachment = new Attachment(stream, Path.GetFileName(filePath);
message.Attachments.Add(attachment);
バイト配列からも添付できます:
String filePath = @"Sample.pdf";
byte[] fileBytes = File.ReadAllBytes(filePath);
MemoryStream memStream = new MemoryStream(fileBytes);
Attachment imgAttachment = new Attachment(memStream, Path.GetFileName(filePath));
message.Attachments.Add(imgAttachment);
添付ファイル名には拡張子(.pdf, .xlsx など)を必ず含めてください。MIME タイプの判別に影響します。
Outlook(Microsoft 365)の SMTP サーバーを利用してメールを送信することも可能です。設定は以下の通りです。
Outlook SMTP 設定
smtp.Host = "smtp.office365.com";
smtp.Port = 587;
smtp.Username = "このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
TLS や STARTTLS にも対応しているため、セキュアな通信が可能です。
実際のビジネスシナリオでは、プロジェクトの進捗レポートを複数の受信者に送信し、それぞれにパーソナライズされた内容を含める必要があることがよくあります。Spire.Email for .NET を使用すれば、添付ファイル付きで挨拶文をカスタマイズした個別メールを、シンプルな C# アプリケーション内で簡単に送信できます。
以下の例では、プロジェクトの進捗レポートを複数の顧客に送信する方法を紹介します。挨拶文に受信者名を動的に挿入し、PDF や Excel ファイルを添付しています。
完全なコード例
using Spire.Email;
using Spire.Email.Smtp;
class Program
{
static void Main()
{
// 差出人を定義
MailAddress addressFrom = new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "送信者");
// 宛先リストを定義(名前とメールアドレス)
List<MailAddress> recipients = new List<MailAddress>
{
new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "営業チームA"),
new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "マネージャーB"),
new MailAddress("このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。", "サポートチームC")
};
// 添付ファイルを定義
string[] attachmentFiles = { @"Sample.pdf", @"Sample.xlsx" };
// SMTP 設定(1回だけ)
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.yourcompany.com";
smtp.Port = 587;
smtp.Username = "your_username";
smtp.Password = "your_password";
smtp.ConnectionProtocols = ConnectionProtocols.StartTls;
// 各宛先に個別にメールを送信
foreach (var recipient in recipients)
{
try
{
// 宛先ごとに新しいメールメッセージを作成
MailMessage message = new MailMessage(addressFrom, recipient);
message.Subject = "2025年第2四半期 プロジェクト進捗報告";
// 宛名をあいさつに使用
string greetingName = string.IsNullOrEmpty(recipient.DisplayName)
? "ご担当者様"
: recipient.DisplayName + " 様";
// 本文(HTML形式)
message.BodyHtml = $@"
<div style='font-family:Meiryo, sans-serif; font-size:14px; color:#333; line-height:1.8;'>
<p>{greetingName}</p>
<p>いつも大変お世話になっております。</p>
<p>2025年第2四半期の<strong>プロジェクト進捗報告書</strong>を添付いたします。内容は以下の通りです:</p>
<ul style='padding-left:20px; margin:0;'>
<li>達成したマイルストーン</li>
<li>未完了のタスク</li>
<li>主要な考察・所見</li>
</ul>
<p>ご質問やご不明点などがございましたら、お気軽にご連絡ください。</p>
<p style='margin-top:30px;'>引き続きどうぞよろしくお願いいたします。<br><strong>送信者</strong></p>
</div>";
// 添付ファイルを追加
foreach (string file in attachmentFiles)
{
Attachment attachment = new Attachment(file);
message.Attachments.Add(attachment);
}
// メールを送信
smtp.SendOne(message);
Console.WriteLine($"{recipient.Address} にメールを送信しました。");
}
catch (Exception ex)
{
Console.WriteLine($"{recipient.Address} へのメール送信に失敗しました。");
Console.WriteLine("エラー内容: " + ex.Message);
}
}
}
}
このコードは、C# コンソールアプリや ASP.NET アプリでも簡単に応用できます。
以下は送信されたメールのスクリーンショットです。
Spire.Email を使えば、これらの問題にもスマートに対応できます。
今回は、Spire.Email for .NET を使って、C# で添付ファイル付きメールを送信する方法を一通り紹介しました。ローカルファイル、ストリーム、Outlook 対応まで、実用的なパターンに対応しています。
.NET アプリでメール機能を簡単に導入したい方は、一時ライセンスを申請 してぜひお試しください。
message.Attachments.Add(new Attachment(@"file.pdf"));
メモリストリームやバイト配列からの添付にも対応しています。
添付後に SmtpClient.SendOne() を使って送信します。SMTP の設定や認証情報を正しく構成してください。
はい。Spire.Email for .NET は .NET Core, .NET Standard, .NET 5+, .NET Framework, ASP.NET, MonoAndroid, Xamarin.iOS に対応しています。
もちろん可能です:
message.Attachments.Add(new Attachment(@"report.xlsx"));
有効なファイルパスを指定し、アプリからアクセス可能である必要があります。