在 C# 中发送带附件的电子邮件
本教程将演示如何使用 C# 中的 SMTP 客户端发送带附件的电子邮件。
NET 和 .NET Core 具有通过 System.Net.Mail 命名空间发送电子邮件的内置功能。虽然这可能是最简单的选择,但这需要一个 SMTP 服务器。
使用你现有的 Gmail 帐户或创建一个新帐户以通过 SMTP 发送电子邮件。你必须在你的个人资料的安全选项卡上启用安全性较低的应用访问,才能使用 Google 的 SMTP 服务器。
在 C#
中创建一个用于发送带有附件的电子邮件的表单
首先,在 Visual Studio 中创建一个新的 Windows 窗体应用程序。
打开你的 .cs
设计文件并在表单中创建一个面板。添加带有文本 Compose
、label1
的标签,并在最右侧添加 X
以关闭此表单。
要添加功能,请双击标签,它会将你导航到 label_Click
功能。在里面写下下面这行。
this.Dispose();
创建 5 个文本框,命名如下:
-
txtFrom
-
txtPassword
-
txtTo
-
txtTitle
-
txtBody
在 txtPassword
文本框中,在 passwordChar
属性中添加一个字符(*
或 •
)以隐藏用户在解决方案资源管理器右下角输入的密码。
创建一个名为 btnSend
的按钮,其中包含 Send
,并将其指定为蓝色。此按钮会将电子邮件发送到其目标电子邮件地址。
现在,你需要一个按钮来在发送之前将文件附加到你的电子邮件中,并需要一个标签来显示选定的文件路径。因此,让我们创建一个 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 的新实例。我们通过 smtp.gmail.com
因为我们需要在 Gmail 之间交换邮件。
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);
我们需要为 SMTP 分配一些值,包括 Gmail 使用的端口、发件人的电子邮件地址和密码。我们应该启用 SSL(安全套接字层)来安全地传输数据。
然后,我们调用 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
块将包含以下代码。这些代码行将捕获发生的任何异常并将其输出到 MessageBox。
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) {}
}
}
相关文章
在 C# 中将 List<string>转换为字符串
发布时间:2024/03/16 浏览次数:198 分类:编程语言
-
在 C# 中,有两种主要方法可用于将 List
转换为字符串变量,Linq 方法和 String.Join()函数。
在 C# 中将 List<string>转换为字符串
发布时间:2024/03/16 浏览次数:171 分类:编程语言
-
在 C# 中,有两种主要方法可用于将 List
转换为字符串变量,Linq 方法和 String.Join()函数。
在 C# 中将 List<string>转换为字符串
发布时间:2024/03/16 浏览次数:187 分类:编程语言
-
在 C# 中,有两种主要方法可用于将 List
转换为字符串变量,Linq 方法和 String.Join()函数。
在 C# 中发出 HTTP POST Web 请求
发布时间:2024/02/04 浏览次数:131 分类:编程语言
-
在 C# 中,可以使用 3 种主要方法来发出 HTTP POST Web 请求:WebClient 类,HttpWebRequest 类和 HttpClient 类。本教程将讨论在 C# 中发出 HTTP POST Web 请求的方法。使用 C# 中的 WebClient 类发出 HTTP POST Web 请求
在 C# 中运行命令提示符命令
发布时间:2024/02/04 浏览次数:130 分类:编程语言
-
Process 类可用于在 C# 中运行命令提示符命令。在 C# 中使用 Process.Start() 函数运行命令提示符命令
在 C# 中调整图像大小
发布时间:2024/02/04 浏览次数:203 分类:编程语言
-
有两种主要方法可用于在 C# 中调整图像的大小,Bitmap 类构造函数和 graphics.DrawImage()函数。在本教程中,我们将讨论在C#中调整图像大小的方法。我们将带您完成整个过程,从加载原始图像到保
在 C# 中下载图片
发布时间:2024/02/04 浏览次数:138 分类:编程语言
-
有 3 种主要方法可用于下载 C# 中的图片,WebClient.DownloadFile()函数,Bitmap 类和 Image.FromStream()函数。在 C# 中使用 WebClient 类下载图片 WebClient 类提供了用于向 C# 中的 URL 发送数据和从 URL 接收数据
在 C# 中使用秒表
发布时间:2024/02/04 浏览次数:139 分类:编程语言
-
我们可以使用 Stopwatch 类来计算 C# 中的经过时间。使用 C# 中的秒表类计算经过时间 Stopwatch 类在 C# 中准确测量经过的时间。
在 C# 中获取可执行路径
发布时间:2024/02/04 浏览次数:200 分类:编程语言
-
有 3 种主要方法可用于获取 C# 中程序的可执行路径,即 Assembly 类,AppDomain 类和 Path 类。本教程将介绍获取 C# 代码的可执行路径的方法。使用 C# 中的 Assembly 类获取可执行路径