开发者社区> awbeci> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SmtpClient 类

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

SmtpClient 类

.NET Framework 4
 

 

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

System.Object
  System.Net.Mail.SmtpClient

 

命名空间:  System.Net.Mail 程序集: System(在 System.dll 中)
复制
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.");
        }
    }
}


 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一场HttpClient调用未关闭流引发的问题
一场HttpClient调用未关闭流引发的问题
292 0
自定义Deployment粒度的链路追踪标签
本文将介绍使用[阿里云服务网格(ASM)](http://servicemesh.console.aliyun.com/)和[阿里云链路追踪(Tracing)](https://tracing.console.aliyun.com/),以业务无侵入的方式,实现POD粒度的自定义链路追踪标签。示例代码为[asm-best-practises](https://github.com/feuyeux/asm-best-practises/)
480 0
HttpClient-4.5总结(1)
apache httpclient不多介绍这个工具是什么,具体请看官网,不赘述。 进行记录的原因一个是把掉过坑的地方记住,另一个是自httpclient-4.4开始,官方对代码进行了很多调整,4.4以前的很多class和method都过时了,而国内之前很多关于httpclient的分享都是4.4之前的。
1056 0
NettyHttpClient
httpClient httpClientHandler
824 0
HttpClient
//使用Android的开源项目来实现GET和POST请求 //但是方式的性能不如前面讲的直接使用GET和POST,因为里面封装了许多东西 //在进行简单操作的时候没必要使用它.
586 0
HttpClient
引用:http://baike.baidu.com/view/2476238.htm HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
1167 0
HttpClient
读者定位为具有 Java 和 Web 开发经验的开发和设计人员。 读者可以学习到关于 Cookie 的工作原理和 Cookie 协议的细节,以及在一个 HTTP 应用代理的场景下 Cookie 的管理和处理思想,并可以直接使用文中的代码和思路,提高工作效率。
680 0
smbclient 简单应用
本文链接:http://user.qzone.qq.com/317352042/blog/1196438857 smbclient 简单应用 功能说明: 在Windows操作系统之间,可以通过网上邻居或UNC路径的方式,访问某个共享,在Linux下,可以通过smbclient命令来实现相似的功能,访问Windows的某个共享目录。
809 0
+关注
awbeci
我的名字叫张威(多好听的名字啊),毕业于哈弗大学(之前和比尔&middot;盖次是同学,自从那家伙创立了威软,我和他的关系就不太好,我发誓要打败他,然后进入安徽机电职业技术学院学习软件技术,你们觉得我会成功么), 现在在一家世界五百强公司任职UFO(想问我是什么公司?叫合肥优尔电子科技有限公司
590
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载