チュートリアル

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

チュートリアル».NET»Spire.Email for .NET»C# で添付ファイル付きメールを送信する方法【実用例付きガイド】
2025-06-26

C# で添付ファイル付きメールを送信する方法【実用例付きガイド】

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"));

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

Read 24 times