zoukankan      html  css  js  c++  java
  • NET email

    SMTP称为简单Mail传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。SMTP的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送 。工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。 SMTP是个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接 在命名空间Eastasp.Framework.Net.Mail.Smtp下,Snake.Net提供一系列类和函数,可以为发送者提供全面而完善的发送邮件功能。现在主要介绍SmtpClient和SmtpExpress两个类是如何实现发送邮件的功能。 下面代码演示了使用SmtpExpress发送一封简单的邮件。 //发送一封简单的邮件 SmtpExpress.QuickSend(new SmtpServer("smtp.mailserver.com"), "form@mailserver.com", "to@mailserver.com", "subject", "content"); //发送一封简单的邮件,邮件服务器需要身份验证 SmtpExpress.QuickSend(new SmtpServer("smtp.mailserver.com", 25, "logn", "password"), "form@mailserver.com", "to@mailserver.com", "subject", "content");   接下来我们在看一下,如何使用SmtpClient来发送邮件。 //declare SmtpClient client; MailMessage.Message message = null; //initialize mail message message = new MailMessage.Message(); message.From = new Address("from@mailserver.com"); message.ToRecipients.Add(new Address("to@mailserver.com", "Recipients")); message.CcRecipients.Add(new Address("cc@mailserver.com", "cc")); message.BccRecipients.Add(new Address("bcc@mailserver.com")); message.Subject = "subject"; message.Body = "content"; //create smtp client client = new SmtpClient(new SmtpServer("smtp.mailserver.com", 25, "logn", "password")); try{ //open client client.Open(); //send message client.Send(message); } finally{ if (client != null){ try{client.Close();} catch{} client = null; } } 通过上面的代码我们可以发现使用SmtpClient比SmtpExpress要复杂很多,但是SmtpClient可以提供比SmtpExpress更多功能,接下来我们就要介绍一下SmtpClient所提供的高级功能。 构建更复杂的Message对象。Message对象用于表示一个邮件的实体,它包含了邮件的头部信息、发件人,收件人,标题,内容以及附件等各种信息。。 设置多个收件人 我们继续使用上段代码做演示,message对象提供了各类接受人的集合用于表示各类不同的收件人。其中ToRecipients表示收件人集合、CcRecipients表示抄送人集合,BccRecipients表示密件抄送人抄送人集合。通过添加删除收件人集合可以方便的设置收件人、抄送人和密件抄送人。 message.ToRecipients.Add("to@mailserver.com"); message.CcRecipients.Add("cc@mailserver.com", "cc"); message.CcRecipients.Add("cc2@mailserver.com", "cc2"); message.BccRecipients.Add("bcc@mailserver.com"); 发送HTML格式邮件 电子邮件载体是以纯文本来表现的,但是为了丰富邮件内容的表现形式,邮件的内容可以支持多种格式,比如纯文本、HTML、RichText等;而为了实现对各种区域语言以及各种二进制附件的良好支持,邮件载体又可以使用多种格式进行编码,常见的有Base64和QuotedPrintable。 message = new MailMessage.Message(ContentTransferEncoding.Base64); 为了自定义各种形式的邮件内容和编码格式,就需要在Message对象创建时使用不同的参数,如下例代码,但这对使用者提出了更高的要求,必须了解更多关于邮件格式的细节,这显然不便于开发者。因而Snake.Net提供了一种简便的方式,就是使用MessageBuilder去构建Message对象。MessageBuilder是一个超类,Snake.Net通过提供继承与MessageBuilder的HtmlMessageBuilder、AlternativeMessageBuilder来构建HTML格式和MultipartAlternative格式的Message对象。 //declare HtmlMessageBuilder builder; MailMessage.Message message; //create html message builder builder = new HtmlMessageBuilder(); builder.To = Address.Parse("to@mailserver.com"); builder.From = Address.Parse("form@mailserver.com"); builder.Subject ="subject"; builder.Body = "

    Html Body

    "; //create message message = builder.ToMessage(); 上面代码展示了使用HtmlMessageBuilder各建HTML格式邮件内容的范列。 发送混合格式邮件 由于不是所有的邮件客户端都支持,HTML格式的邮件,为了兼容不同种类的邮件客户端,在邮件格式中定义了一种MultipartAlternative格式的邮件,它是普通文本和HTML格式的复合体。MultipartAlternative格式的邮件可以定义两部分邮件内容,一部分为PlainText,将被不支持HTML的客户段用来显示邮件内容,而另一部分为HTML格式,可以被高级的邮件客户端显示HTML格式的内容。 //declare MailMessage.Message message; AlternativeMessageBuilder builder; //create html message builder builder = new AlternativeMessageBuilder (); builder.To = Address.Parse("to@mailserver.com"); builder.From = Address.Parse("form@mailserver.com"); builder.Subject ="subject"; builder.Body = "

    Html Body

    "; builder.HtmlBody = "

    Html Test

    "; //create message message = builder.ToMessage() 为邮件添加附件 Message类支持各种类型的附件和图像,并且支持在HTML内容中,引用作为附件的图片。让我们看一下演示代码。 //declare MessageBuilder builder; MailMessage.Message message; builder = new MessageBuilder(); builder.Subject = "Alternative Test"; builder.Body = "Text Test "; builder.AddAttachment(@"c:\a.zip"); builder.AddImage(@"c:\a1.jpg"); //create message message = builder.ToMessage(); 下面是在HTML文档中应用作为附件的图像的演示代码。   //declare MessageBuilder builder; MailMessage.Message message; builder = new HtmlMessageBuilder(); builder.Subject = "Alternative Test"; builder.Body = "
  • 相关阅读:
    生鲜购物篮模型
    shell脚本
    一号店评论文本聚类研究1
    数据框的合并(根据某一个字段)
    Reshape包
    R-kmeans
    python练习(续)
    python练习
    截取整数字符串
    java中PriorityQueue优先队列使用方法
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175974.html
Copyright © 2011-2022 走看看