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つのテキストボックスを作成します。
txtFromtxtPasswordtxtTotxtTitletxtBody
txtPassword テキストボックスで、passwordChar プロパティに文字(*または•)を追加して、右下のソリューションエクスプローラーパネルでユーザーが入力したパスワードを非表示にします。
Send を含む btnSend という名前のボタンを作成し、青色を割り当てます。このボタンは、宛先の電子メールアドレスに電子メールを送信します。
ここで、送信する前にファイルを電子メールに添付するためのもう 1つのボタンと、選択したファイルパスを示すラベルが必要です。それでは、LinkLabel を作成して、linkLabel1 と lblLocation というラベルを付けましょう。
ソリューションエクスプローラーから 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) {}
}
}
出力:

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