迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

在 C# 中发送带附件的电子邮件

作者:迹忆客 最近更新:2024/02/01 浏览次数:

本教程将演示如何使用 C# 中的 SMTP 客户端发送带附件的电子邮件。

NET 和 .NET Core 具有通过 System.Net.Mail 命名空间发送电子邮件的内置功能。虽然这可能是最简单的选择,但这需要一个 SMTP 服务器。

使用你现有的 Gmail 帐户或创建一个新帐户以通过 SMTP 发送电子邮件。你必须在你的个人资料的安全选项卡上启用安全性较低的应用访问,才能使用 Google 的 SMTP 服务器。


C# 中创建一个用于发送带有附件的电子邮件的表单

首先,在 Visual Studio 中创建一个新的 Windows 窗体应用程序。

打开你的 .cs 设计文件并在表单中创建一个面板。添加带有文本 Composelabel1 的标签,并在最右侧添加 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# 中的 REST API

下一篇:在 C# 中混淆代码

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C# 中将双精度值四舍五入为整数值

发布时间:2024/02/03 浏览次数:84 分类:编程语言

Math.Ceiling(),Math.Floor()和 Math.Round()函数有 3 种主要方法可用于在 C# 中将双精度值四舍五入为整数值。使用 C# 中的 Math.Ceiling() 函数将双精度值四舍五入为整数值

C# 中的 async 和 await

发布时间:2024/02/03 浏览次数:97 分类:编程语言

async 和 await 关键字用于 C# 中的异步编程。C# 中的异步编程 如果同步应用程序中有任何进程被阻止,则整个应用程序将被阻止并停止响应

在 Mac OS 上设置 C#

发布时间:2024/02/03 浏览次数:135 分类:编程语言

在本文中,了解设置 C# 语言以在 Mac OS 上进行开发的过程。本文将演示 Mac OS 上 C# 语言的完整设置和基本语法。在 Mac OS 上安装和设置 C#

在 C# 中创建内联函数

发布时间:2024/02/03 浏览次数:132 分类:编程语言

在 C# 中创建内联函数的方法主要有 3 种,分别是使用 lambda 表达式、使用 lambda 语句和使用局部函数。在 C# 中使用 Lambda 表达式创建内联函数 在 C 和 C++ 之类的编程语言中,内联函数用 inline 关

从 C# 中的函数返回多个值

发布时间:2024/02/03 浏览次数:88 分类:编程语言

有 3 种主要方法可用于从 C# 中的函数返回多个值,使用数组作为函数返回类型,使用类或结构体作为函数返回类型,以及使用 Tuple类作为函数的返回类型。

C# 中的抽象函数与虚拟函数

发布时间:2024/02/03 浏览次数:121 分类:编程语言

抽象函数自身不提供任何定义,而虚拟函数在 C# 中具有默认定义。本教程将比较 C# 中的抽象函数和虚拟函数。C# 中的抽象函数 在 C# 中,抽象函数没有自己的定义。

在 C# 中退出函数

发布时间:2024/02/03 浏览次数:138 分类:编程语言

在本教程中,通过示例了解在 C# 中退出函数的不同方法。使用 break、continue、goto、return 和 throw 异常语句。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便