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 を作成して、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) {}
}
}
出力:
送信を押すと、次のメッセージボックスが表示されます。
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