HOWTO · Csharp

C# で添付ファイル付きのメールを送信する

この記事では、C# で添付ファイル付きのメールを送信する方法を学習します。

このチュートリアルでは、C# で SMTP クライアントを使用して、添付ファイル付きの電子メールを送信する方法を示します。

NET および.NETCore には、System.Net.Mail 名前空間を介して電子メールを送信するための組み込み機能があります。これが最も簡単なオプションかもしれませんが、これには SMTP サーバーが必要です。

既存の Gmail アカウントを使用するか、新しいアカウントを作成して SMTP 経由でメールを送信します。Google の SMTP サーバーを利用するには、プロファイルの[セキュリティ]タブで安全性の低いアプリアクセスを有効にする必要があります。

C# で添付ファイル付きの電子メールを送信するために使用するフォームを作成する

まず、VisualStudio で新しい Windows フォームアプリケーションを作成します。

.cs デザインファイルを開き、フォーム内にパネルを作成します。作成ラベル 1、右端に X というテキストのラベルを追加して、このフォームを閉じます。

機能を追加するには、ラベルをダブルクリックすると、label_Click 機能に移動します。中に次の行を書いてください。

this.Dispose();

次のような名前の 5つのテキストボックスを作成します。

  • txtFrom
  • txtPassword
  • txtTo
  • txtTitle
  • txtBody

txtPassword テキストボックスで、passwordChar プロパティに文字(*または)を追加して、右下のソリューションエクスプローラーパネルでユーザーが入力したパスワードを非表示にします。

Send を含む btnSend という名前のボタンを作成し、青色を割り当てます。このボタンは、宛先の電子メールアドレスに電子メールを送信します。

ここで、送信する前にファイルを電子メールに添付するためのもう 1つのボタンと、選択したファイルパスを示すラベルが必要です。それでは、LinkLabel を作成して、linkLabel1lblLocation というラベルを付けましょう。

ソリューションエクスプローラーから LinkLabel に画像とテキスト添付ファイルを割り当てます。次に、.cs フォームデザインファイルでこの LinkLabel をダブルクリックすると、このボタンをクリックした機能コードに移動します。

この関数内で、ダイアログを開く必要があります。ただし、その前に、OpenFileDialog をフォームデザインにドラッグアンドドロップして、[ファイルを添付]ボタンに接続する必要があります。

linkLabel1_linkClicked 関数内に次のコードを記述してダイアログを開き、選択したファイルパスを接続して lblLocation に表示します。

openFileDialog1.ShowDialog();
lblLocation.Text = openFileDialog1.FileName;

出力:

添付ファイル付きの電子メールの送信に使用するフォームを作成しました

すべての準備が整ったので、送信者の電子メールとパスワード、受信者の電子メール、メッセージ、および添付ファイルを収集します。SMTP クライアントを使用してメールを送信する関数型コードを書いてみましょう。

フォームデザインで作成した送信ボタンをダブルクリックします。その button1_Click 関数内で、次の操作を実行します。

C# で添付ファイル付きのメールを送信する

まず、try-catch ステートメントブロックを作成します。プログラムの実行は try ブロックを試行し、エラーが発生した場合、自動的に例外をキャッチします。

try {
} catch () {
}

try ブロック内で、mail という名前のデータ型 MailMessage の変数を宣言し、デフォルトのコンストラクターMailMessage() を初期化して、電子メール送信プロセスでそのプロパティを使用します。

MailMessage mail = new MailMessage();

次に、データ型 SmtpClient の別の変数 smtp を宣言し、文字列ホストを必要とする SmtpClient の新しいインスタンスを初期化します。Gmail 間でメールを交換する必要があるため、smtp.gmail.com を渡します。

SmtpClient smtp = new SmtpClient("smtp.gmail.com");

次に、MailMessage クラスの .From.To.Add().Subject、および .Body を使用して、テキストボックスの値を割り当てます。

mail.From = new MailAddress(txtFrom.Text);
mail.To.Add(txtTo.Text);
mail.Subject = txtTitle.Text;
mail.Body = txtBody.Text;

次に、選択したファイルをメールに添付する必要があります。System.Net.Mail.Attachment データ型の変数 attachment を作成し、選択したファイルのパスを割り当てます。

.Attachments.Add() メソッドを使用してファイルをメールに添付し、添付ファイルを渡します。

System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment(lblLocation.Text);
mail.Attachments.Add(attachment);

Gmail が使用するポート、送信者のメールアドレス、パスワードなど、いくつかの値を SMTP に割り当てる必要があります。データを安全に送信するには、SSL(Secure Sockets Layer)を有効にする必要があります。

次に、Send() メソッドを呼び出してメールを渡します。メールを送信したら、情報アイコンと [OK]ボタンが付いたメッセージを表示するメッセージボックスを作成しましょう。

smtp.Port = 587;
smtp.Credentials = new System.Net.NetworkCredential(txtFrom.Text, txtPassword.Text);
smtp.EnableSsl = true;
smtp.Send(mail);
MessageBox.Show("Mail has been sent successfully!", "Email Sent", MessageBoxButtons.OK,
                MessageBoxIcon.Information);

これで、catch ブロックに次のコードが含まれます。これらのコード行は、発生した例外をキャッチし、メッセージボックスに出力します。

catch (Exception ex) {
  MessageBox.Show(ex.Message);
}

完全なソースコード

using System;
using System.Net.Mail;

namespace send_email_with_attachment {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void label1_Click(object sender, EventArgs e) {
      this.Dispose();
    }

    private void label5_Click(object sender, EventArgs e) {}

    private void label7_Click(object sender, EventArgs e) {}

    private void button1_Click(object sender, EventArgs e) {
      try {
        MailMessage mail = new MailMessage();
        SmtpClient smtp = new SmtpClient("smtp.gmail.com");
        mail.From = new MailAddress(txtFrom.Text);
        mail.To.Add(txtTo.Text);
        mail.Subject = txtTitle.Text;
        mail.Body = txtBody.Text;

        System.Net.Mail.Attachment attachment;
        attachment = new System.Net.Mail.Attachment(lblLocation.Text);
        mail.Attachments.Add(attachment);

        smtp.Port = 587;
        smtp.Credentials = new System.Net.NetworkCredential(txtFrom.Text, txtPassword.Text);
        smtp.EnableSsl = true;
        smtp.Send(mail);
        MessageBox.Show("Mail has been sent successfully!", "Email Sent", MessageBoxButtons.OK,
                        MessageBoxIcon.Information);

      } catch (Exception ex) {
        MessageBox.Show(ex.Message);
      }
    }

    private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
      openFileDialog1.ShowDialog();
      lblLocation.Text = openFileDialog1.FileName;
    }

    private void txtFrom_TextChanged(object sender, EventArgs e) {}
  }
}

出力:

添付ファイル付きの電子メールを送信するためのフォームに記入

送信を押すと、次のメッセージボックスが表示されます。

添付ファイル付きのメールの送信に成功