SmtpClient 类

简介: SmtpClient 类 .NET Framework 4     允许应用程序使用简单邮件传输协议 (SMTP) 来发送电子邮件。 继承层次结构 System.

SmtpClient 类

.NET Framework 4
 

 

允许应用程序使用简单邮件传输协议 (SMTP) 来发送电子邮件。

System.Object
  System.Net.Mail.SmtpClient

 

命名空间:  System.Net.Mail 程序集: System(在 System.dll 中)
C#
复制
public class SmtpClient : IDisposable

SmtpClient 类型公开以下成员。

  名称 说明
公共方法 SmtpClient 使用配置文件设置初始化 SmtpClient 类的新实例。
公共方法 SmtpClient(String) 初始化 SmtpClient 类的新实例,让其使用指定的 SMTP 服务器发送电子邮件。
公共方法 SmtpClient(String, Int32) 初始化 SmtpClient 类的新实例,让其使用指定的 SMTP 服务器和端口发送电子邮件。
页首
  名称 说明
公共属性 ClientCertificates 指定应该使用哪些证书来建立安全套接字层 (SSL) 连接。
公共属性 Credentials 获取或设置用于验证发件人身份的凭据。
公共属性 DeliveryMethod 指定如何处理待发的电子邮件。
公共属性 EnableSsl 指定 SmtpClient 是否使用安全套接字层 (SSL) 加密连接。
公共属性 Host 获取或设置用于 SMTP 事务的主机的名称或 IP 地址。
公共属性 PickupDirectoryLocation 获取或设置文件夹,应用程序在该文件夹中保存将由本地 SMTP 服务器处理的邮件。
公共属性 Port 获取或设置用于 SMTP 事务的端口。
公共属性 ServicePoint 获取用于传输电子邮件的网络连接。
公共属性 TargetName 获取或设置在使用扩展保护时用于身份验证的服务提供程序名称 (SPN)。
公共属性 Timeout 获取或设置一个值,该值指定同步 Send 调用的超时时间。
公共属性 UseDefaultCredentials 获取或设置 Boolean 值,该值控制 DefaultCredentials 是否随请求一起发送。
页首
  名称 说明
公共方法 Dispose 向 SMTP 服务器发送一条 QUIT 消息,适当地结束 TCP 连接,并释放由 SmtpClient 类的当前实例使用的所有资源。
受保护的方法 Dispose(Boolean) 向 SMTP 服务器发送一条 QUIT 消息,适当地结束 TCP 连接,释放由 SmtpClient 类的当前实例使用的所有资源,并可选择释放托管资源。
公共方法 Equals(Object) 确定指定的 Object 是否等于当前的 Object (继承自 Object。)
受保护的方法 Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
公共方法 GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
公共方法 GetType 获取当前实例的 Type (继承自 Object。)
受保护的方法 MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
受保护的方法 OnSendCompleted 引发 SendCompleted 事件。
公共方法 Send(MailMessage) 将指定的邮件发送到 SMTP 服务器以便传递。
公共方法 Send(String, String, String, String) 将指定的电子邮件发送到 SMTP 服务器以便传递。 使用 String 对象指定邮件的发件人、收件人、主题和邮件正文。
公共方法 SendAsync(MailMessage, Object) 将指定的电子邮件发送到 SMTP 服务器以便传递。 此方法不会阻止调用线程,并允许调用方将对象传递给操作完成时调用的方法。
公共方法 SendAsync(String, String, String, String, Object) 将电子邮件发送到 SMTP 服务器以便传递。 使用 String 对象指定邮件的发件人、收件人、主题和邮件正文。 此方法不会阻止调用线程,并允许调用方将对象传递给操作完成时调用的方法。
公共方法 SendAsyncCancel 取消异步操作以发送电子邮件。
公共方法 ToString 返回表示当前对象的字符串。 (继承自 Object。)
页首
  名称 说明
公共事件 SendCompleted 在异步电子邮件发送操作完成时出现。
页首

SmtpClient 类用于将电子邮件发送到 SMTP 服务器以便传递。 RFC 2821 中定义了 SMTP 协议,这可以在 http://www.ietf.org 上找到。

下表中显示的类用于构造可以使用 SmtpClient 发送的电子邮件。

 

说明

Attachment

表示文件附件。 此类允许您将文件、流或文本附加到电子邮件中。

MailAddress

表示发件人和收件人的电子邮件地址。

MailMessage

表示电子邮件。

若要使用 SmtpClient 构造并发送电子邮件,必须指定以下信息:

  • 用来发送电子邮件的 SMTP 主机服务器。 请参见 HostPort 属性。

  • 身份验证凭据(如果 SMTP 服务器要求)。 请参见 Credentials 属性。

  • 发件人的电子邮件地址。 请参见接受 from 参数的 Send 方法和 SendAsync 方法。 另请参见 MailMessage.From 属性。

  • 收件人的电子邮件地址。 请参见接受 recipient 参数的 Send 方法和 SendAsync 方法。 另请参见 MailMessage.To 属性。

  • 邮件内容。 请参见接受 body 参数的 Send 方法和 SendAsync 方法。 另请参见 MailMessage.Body 属性。

若要在电子邮件中包括附件,首先使用 Attachment 类创建附件,再使用 MailMessage.Attachments 属性将附件添加到邮件中。 根据收件人使用的电子邮件阅读程序和附件的文件类型,某些收件人可能无法阅读附件。 对于那些无法以附件的原始格式显示附件的客户端,可以通过使用 MailMessage.AlternateViews 属性来指定替代视图。

可以使用应用程序或计算机配置文件来指定所有 SmtpClient 对象的默认主机、端口和凭据值。 有关更多信息,请参见 <mailSettings> 元素(网络设置)

若要发送电子邮件并在等待电子邮件传输到 SMTP 服务器期间阻止其他操作,请使用一个同步 Send 方法。 若要允许程序的主线程在传输电子邮件的过程中继续执行,请使用一个异步 SendAsync 方法。 SendAsync 操作完成时会引发 SendCompleted 事件。 若要接收此事件,必须将 SendCompletedEventHandler 委托添加到 SendCompleted 中。 SendCompletedEventHandler 委托必须引用处理 SendCompleted 事件通知的回调方法。 若要取消异步电子邮件传输,请使用 SendAsyncCancel 方法。

注意注意

如果正在传输电子邮件时再次调用 SendAsyncSend,则会接收到 InvalidOperationException

如果应用程序希望向同一个 SMTP 服务器发送多个消息,SmtpClient 类的当前实例建立到该 SMTP 服务器的连接可能被重复使用。 当使用身份验证或加密建立一个到 SMTP 服务器的连接时,这是非常有用的。 进行身份验证并建立一个 TLS 会话的过程可能是大量消耗资源的操作。 当向同一个 SMTP 服务器发送大量电子邮件时,给每条消息重新建立连接的要求可能对性能有明显的影响。 存在大量的大容量电子邮件应用程序,用来发送电子邮件状态更新、新闻稿分发信息或电子邮件警报。 另外,很多的电子邮件客户端应用程序支持脱机模式,在此模式下用户可撰写许多电子邮件消息,并在其后建立了到 SMTP 服务器的连接时发送。 对电子邮件客户端来说,典型情况是将所有 SMTP 消息发送到一个特点的 SMTP 服务器(由 Internet 服务提供商提供),然后此服务器再将此电子邮件发送到其他 SMTP 服务器。

SmtpClient 类实现集中 SMTP 连接,以使其可以避免为每条到同一个服务器的消息都重新建立一个连接的开销。 应用程序可能重复使用相同的 SmtpClient 对象,以将许多不同电子邮件发往同一个 SMTP 服务器或许多不同的 SMTP 服务器。 如此一来,无法确认应用程序何时完成使用 SmtpClient 对象和该对象应在何时被清理。

当 SMTP 会话已完成,且客户端想要终止连接时,它必须发送 QUIT 消息到服务器,以表示它已没有消息要发送。 这使得服务器可以释放与来自客户端的连接相关的资源,并处理客户端发来的消息。

SmtpClient 类没有 Finalize 方法,因此应用程序必须调用 Dispose 来显式释放资源。 Dispose 方法在所有建立到 Host 属性中指定的 SMTP 服务器的连接中循环,并发送 QUIT 消息,其后平稳断开 TCP 连接。 Dispose 方法也释放由 Socket 使用的非托管资源,并根据需要释放托管资源。

使用完 SmtpClient 后调用 Dispose Dispose 方法使 SmtpClient 处于不可用状态。 调用完 Dispose 后,必须释放对 SmtpClient 的所有引用,这样垃圾回收器才能收回 SmtpClient 占用的内存。

Topic Location
如何:在 IIS 中安装和配置 SMTP 虚拟服务器 配置 ASP .NET Web 应用程序
如何:在 IIS 6.0 中安装和配置 SMTP 虚拟服务器 在 Visual Studio 中生成 ASP .NET Web 应用程序

下面的代码示例演示如何以异步方式发送电子邮件。

C#
复制
using System;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Threading;
using System.ComponentModel;
namespace Examples.SmptExamples.Async
{
    public class SimpleAsynchronousExample
    {
        static bool mailSent = false;
        private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
        {
            // Get the unique identifier for this asynchronous operation.
             String token = (string) e.UserState;

            if (e.Cancelled)
            {
                 Console.WriteLine("[{0}] Send canceled.", token);
            }
            if (e.Error != null)
            {
                 Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
            } else
            {
                Console.WriteLine("Message sent.");
            }
            mailSent = true;
        }
        public static void Main(string[] args)
        {
            // Command line argument must the the SMTP host.
            SmtpClient client = new SmtpClient(args[0]);
            // Specify the e-mail sender.
            // Create a mailing address that includes a UTF8 character
            // in the display name.
            MailAddress from = new MailAddress("jane@contoso.com", 
               "Jane " + (char)0xD8+ " Clayton", 
            System.Text.Encoding.UTF8);
            // Set destinations for the e-mail message.
            MailAddress to = new MailAddress("ben@contoso.com");
            // Specify the message content.
            MailMessage message = new MailMessage(from, to);
            message.Body = "This is a test e-mail message sent by an application. ";
            // Include some non-ASCII characters in body and subject.
            string someArrows = new string(new char[] {'\u2190', '\u2191', '\u2192', '\u2193'});
            message.Body += Environment.NewLine + someArrows;
            message.BodyEncoding =  System.Text.Encoding.UTF8;
            message.Subject = "test message 1" + someArrows;
            message.SubjectEncoding = System.Text.Encoding.UTF8;
            // Set the method that is called back when the send operation ends.
            client.SendCompleted += new 
            SendCompletedEventHandler(SendCompletedCallback);
            // The userState can be any object that allows your callback 
            // method to identify this send operation.
            // For this example, the userToken is a string constant.
            string userState = "test message1";
            client.SendAsync(message, userState);
            Console.WriteLine("Sending message... press c to cancel mail. Press any other key to exit.");
            string answer = Console.ReadLine();
            // If the user canceled the send, and mail hasn't been sent yet,
            // then cancel the pending operation.
            if (answer.StartsWith("c") && mailSent == false)
            {
                client.SendAsyncCancel();
            }
            // Clean up.
            message.Dispose();
            Console.WriteLine("Goodbye.");
        }
    }
}


 
目录
相关文章
|
JSON JavaScript 前端开发
超级实用!详解Node.js中的util模块和express模块
超级实用!详解Node.js中的util模块和express模块
|
Kubernetes API 调度
Kubernetes必备知识: CNI
CNI的全称是 Container Network Interface,即容器网络的 API 接口。 它是 K8s 中标准的一个调用网络实现的接口。Kubelet 通过这个标准的 API 来调用不同的网络插件以实现不同的网络配置方式。实现了这个接口的就是 CNI 插件,它实现了一系列的 CNI API 接口。常见的 CNI 插件包括 Calico、flannel、Terway、Weave Net 以及 Contiv。
2342 0
Kubernetes必备知识: CNI
|
前端开发 计算机视觉 Python
浅蓝色代表什么颜色?——Python中的颜色表示与处理
本文介绍了浅蓝色在计算机图形和Web开发中的表示方法,包括RGB、十六进制和HSL三种常见格式,并详细说明了如何使用Python的Pillow和colorsys库来处理和转换这种颜色,最后给出了生成浅蓝色背景的CSS代码示例。
972 6
|
9月前
|
前端开发 测试技术 API
我同学不知道UnoCSS是什么,我教他用之后效率直接倍增
原子化 CSS 是一种 CSS 的架构方式,它倾向于小巧且用途单一的 class,并且会以视觉效果进行命名。可以将原子化的 CSS 框架理解为这类 CSS 的统称
1135 5
|
SQL C# 数据库
EPPlus库的安装和使用 C# 中 Excel的导入和导出
本文介绍了如何使用EPPlus库在C#中实现Excel的导入和导出功能。首先,通过NuGet包管理器安装EPPlus库,然后提供了将DataGridView数据导出到Excel的步骤和代码示例,包括将DataGridView转换为DataTable和使用EPPlus将DataTable导出为Excel文件。接着,介绍了如何将Excel数据导入到数据库中,包括读取Excel文件、解析数据、执行SQL插入操作。
EPPlus库的安装和使用 C# 中 Excel的导入和导出
|
缓存 编译器 数据处理
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
1231 0
|
异构计算
无影云电脑产品使用之购买什么配置可以玩黑神话悟空游戏?
本文汇总了关于阿里云无影云电脑的常见问题及解答,包括所需配置以运行《黑神话:悟空》游戏、不同版本显卡型号、电竞模式库存情况及如何查看云电脑的使用情况等。提供了多个详细解答链接,帮助用户更好地了解和使用无影云电脑。
|
JavaScript IDE 开发工具
vue3【2024版】开发环境搭建(含官网和nvm下载切换最新版node,修改node下载源,创建项目,启动项目,安装vscode插件Vue - Official)
vue3【2024版】开发环境搭建(含官网和nvm下载切换最新版node,修改node下载源,创建项目,启动项目,安装vscode插件Vue - Official)
1420 3
|
消息中间件 缓存 NoSQL
探索Redis发布订阅与消息队列:构建实时消息通信系统
本篇深入探讨了Redis的发布订阅模式和消息队列功能,展示了如何使用这两个特性构建实时消息通信系统。我们首先介绍了Redis的发布订阅模式,演示了如何通过PUBLISH命令将消息发布到特定频道,并使用SUBSCRIBE和UNSUBSCRIBE命令进行订阅和取消订阅操作。
835 0
|
存储 关系型数据库 MySQL
深入浅出MySQL事务管理与锁机制
MySQL事务确保数据一致性,ACID特性包括原子性、一致性、隔离性和持久性。InnoDB引擎支持行锁、间隙锁和临键锁,提供四种隔离级别。通过示例展示了如何开启事务、设置隔离级别以及避免死锁。理解这些机制对优化并发性能和避免数据异常至关重要。【6月更文挑战第22天】
810 3