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

Saad Aslam 2023年10月12日
  1. C# で添付ファイル付きの電子メールを送信するために使用するフォームを作成する
  2. 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) {}
  }
}

出力:

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

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

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

著者: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn

関連記事 - Csharp Email