チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

Displaying items by tag: email net

Spire.Email でメールを送信 – HTML フォーマット、SMTP 設定、添付ファイル、複数宛先対応

C# アプリケーションからメールを送信する ことは、ビジネスや業務システム開発において一般的なタスクです。プロジェクトの進捗報告、アラート通知、自動レポートなど、信頼性の高いメール送信機能は欠かせません。

この記事では、SMTP 通信とメールフォーマットを簡単に実装できる強力なコンポーネントである Spire.Email for .NET を使って、C# でメールを送信する方法を解説します。SMTP 設定、Gmail との連携、HTML/テキスト本文、ファイル添付、複数宛先の指定など、多彩な機能を紹介します。

目次

1. プロジェクトの準備

まずは .NET プロジェクト(Console App または ASP.NET)を作成し、Spire.Email for .NET パッケージを導入します。

NuGet からインストール:

Install-Package Spire.Email

または Spire.Email for .NET を手動でダウンロードし、ローカルのインストールフォルダから Spire.Email.dll を参照設定します。

2. プレーンテキストメールを SMTP 経由で送信する方法(C#)

以下の例では、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);

ポイント

  • MailAddressMailMessage クラスを使用
  • ConnectionProtocols.StartTls により、TLS によるセキュアな通信を確立

以下のスクリーンショットは、上記のコードで実際に送信されたメールの内容です。

Spire.Email を使用したプレーンテキストメールの送信

3. Gmail SMTP を使って HTML メールと添付ファイルを送信(C#)

以下は 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 を使用
  • BodyHtmlBodyText を併用することで、HTML/非対応クライアントの両方に対応
  • To.Add(), Cc.Add(), Bcc.Add() で複数宛先を追加
  • Gmail の SMTP を StartTls でセキュアに使用

💡 2 段階認証を有効にしている場合、アプリ パスワード の設定が必要です。

以下は、Gmail SMTP を通じて送信された HTML メール(CC・BCC・PDF 添付あり)の表示例です。

C# で Gmail SMTP 経由の HTML メール(添付あり)を送信

関連チュートリアル: C# で添付ファイル付きのメールを送信する方法

4. 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.ContentIdDispositionType = "Inline" により、HTML 内に画像を埋め込み表示
  • SendOne() で個別メールを送信
  • SendSome() で複数メールをまとめて一括送信(例:定期レポートや通知)

以下のスクリーンショットは、企業ロゴを埋め込んだ HTML メールの表示例です。

埋め込み画像付き HTML メール(Spire.Email)

5. よくあるエラーとトラブルシューティング

エラー内容 主な原因
認証失敗 認証情報が間違っている、またはアプリパスワードが未設定
セキュア接続が必要です ConnectionProtocolsStartTLS または SSL が必要
HTML が表示されない BodyHtmlBodyText の両方を適切に設定していない
ファイルが見つかりません 添付ファイルのパスが間違っている

6. Spire.Email の活用シーン

Spire.Email for .NET は、以下のようなシナリオに最適です:

  • 日次/週次のレポート自動配信
  • ユーザー登録完了通知
  • 注文確認メール(添付付き)
  • Web フォームからの通知
  • 埋め込み画像付きのニュースレター配信

SMTP ヘッダや MIME フォーマット、エンコーディング処理を意識せず、直感的に操作できる API を提供します。

結論

Spire.Email for .NET を使えば、C# アプリケーションに信頼性の高いメール送信機能を簡単に組み込むことができます。トランザクションメール、HTML レポート、スケジュール配信など、あらゆる用途に柔軟に対応可能です。

プレーンテキスト/HTML 両対応、添付ファイル、Gmail SMTP、画像の埋め込み、複数送信など、豊富な機能を備えており、外部ライブラリに頼らずメール機能を統合できます。

7. 無償の一時ライセンスを申請する方法

メール本文や添付ファイルに表示される評価版の警告を削除するには、無償の一時ライセンスを申請してください。

👉 1 ヶ月の無償ライセンスを申請する

フォームを記入し、指示に従ってライセンスを適用するだけで、全機能が試用可能になります。

8. よくある質問(FAQ)

C# で HTML メールを送信するには?

MailMessage オブジェクトの BodyHtml プロパティに HTML を設定することで HTML メールを送信できます。HTML 非対応のクライアント向けに BodyText も併用することをおすすめします。

C# で複数の宛先にメールを送るには?

message.To.Add()message.Cc.Add()message.Bcc.Add() を使って複数宛先を追加できます。Spire.Email は To/Cc/Bcc の各フィールドに対応しています。

ASP.NET や MVC プロジェクトで SMTP を使ってメールを送信する方法は?

ASP.NET や MVC プロジェクトでも、Console アプリと同様に SmtpClient を設定し、SendOne()SendSome() メソッドを使ってメールを送信できます。

Published in Spire.Email for .NET
Tagged under

C# で PDF を添付してメール送信するイメージ

C# で添付ファイル付きのメールを送信 するのは、レポートや請求書、ログの共有など、業務アプリケーションでよく求められる機能の一つです。.NET の標準ライブラリでも基本的なメール送信は可能ですが、添付ファイルの扱いやエンコーディング、動的に生成されるファイルの送信など、やや複雑な処理が必要になる場合があります。

この記事では、C# でメールにファイルを添付して送信する方法 を、具体的な C# コードとともにわかりやすく解説します。ローカルファイルの添付、メモリストリームやバイト配列からの添付、SMTP の設定方法などを順を追って紹介していきます。コンソールアプリや ASP.NET など、さまざまなプロジェクトに応用できる内容です。

目次

1. はじめに:Spire.Email で C# メール送信を始める

Spire.Email for .NET は、Outlook や他のメールクライアントに依存せず、C# アプリケーション内でメールの作成・送信・受信・管理を実現できるプロフェッショナルなライブラリです。SMTP、POP3、IMAP をサポートし、添付ファイルや HTML 本文、インラインリソースなども簡単に扱えます。

インストール

NuGet 経由で簡単にインストールできます:

Install-Package Spire.Email

または、公式サイトから Spire.Email をダウンロード して手動でインストールすることも可能です。

2. C# でローカルファイルを添付してメールを送信する方法

業務システムなどでは、PDF レポートなどのファイルを定期的に送信するケースが多くあります。ここでは、ローカルディスク上のファイル(例:PDF)を添付し、Spire.Email を使って C# から送信する基本的な方法を紹介します。

主なステップは以下の通りです:

  • 送信者・受信者情報の設定
  • HTML 形式のメール本文の作成
  • Attachment クラスを使ったファイル添付
  • SMTP クライアントの構成と認証設定

サンプルコード

この実践的な例では、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 を添付したメールが送信されます。

C# コードによる添付メールの送信結果

3. C# でメモリストリームやバイト配列からファイルを添付する方法

ドキュメントや画像をリアルタイムで生成して添付したい場合、ファイルを保存せずにそのまま添付できると便利です。Spire.Email では、MemoryStreambyte[] から直接添付が可能です。

メモリストリームから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 タイプの判別に影響します。

4. C# で Outlook の SMTP を使ってメールを送信する方法

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 にも対応しているため、セキュアな通信が可能です。

5. C# による実用的な添付メール送信の例:動的宛名と複数送信

実際のビジネスシナリオでは、プロジェクトの進捗レポートを複数の受信者に送信し、それぞれにパーソナライズされた内容を含める必要があることがよくあります。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 アプリでも簡単に応用できます。

以下は送信されたメールのスクリーンショットです。

C# による個別化された添付付きメールの例


6. トラブル対処とベストプラクティス

  • 認証エラー:SMTP の認証情報(ユーザー名・パスワード・TLS 設定)を再確認
  • ポート制限:ポート 25 がブロックされている場合は 587(TLS)や 465(SSL)を使用
  • 添付サイズ制限:SMTP サーバーの制限に注意。大きなファイルは圧縮や分割を検討
  • 認証情報の安全管理:コードへの埋め込みは避け、環境変数や安全な設定ファイルへ
  • MIME タイプの誤認識:ファイル名に正しい拡張子を含める

Spire.Email を使えば、これらの問題にもスマートに対応できます。


7. まとめと次のステップ

今回は、Spire.Email for .NET を使って、C# で添付ファイル付きメールを送信する方法を一通り紹介しました。ローカルファイル、ストリーム、Outlook 対応まで、実用的なパターンに対応しています。

.NET アプリでメール機能を簡単に導入したい方は、一時ライセンスを申請 してぜひお試しください。


8. よくある質問(FAQ)

❓ C# でファイルを添付してメール送信するには?

message.Attachments.Add(new Attachment(@"file.pdf"));

メモリストリームやバイト配列からの添付にも対応しています。

❓ 添付付きメールの送信方法は?

添付後に SmtpClient.SendOne() を使って送信します。SMTP の設定や認証情報を正しく構成してください。

❓ .NET Core でも使えますか?

はい。Spire.Email for .NET.NET Core, .NET Standard, .NET 5+, .NET Framework, ASP.NET, MonoAndroid, Xamarin.iOS に対応しています。

❓ Excel ファイルも添付できますか?

もちろん可能です:

message.Attachments.Add(new Attachment(@"report.xlsx"));

有効なファイルパスを指定し、アプリからアクセス可能である必要があります。

Published in Spire.Email for .NET
Tagged under