分享
 
 
 

Snake.Net网络通讯模块 - SMTP(一)

王朝c#·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

<!--

div.code{

border: 1px solid #000000;

padding:12px;

background-color: #E1E1E1

}

-->

简介

设置多个收件人

发送HTML格式邮件

发送混合格式邮件

为邮件添加附件

其他功能

简介

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><p>Html Body</p></body></html>";

//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><p>Html Body</p></body></html>";

builder.HtmlBody = "<body><p>Html Test</p></body>";

//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 = "<body><table><tr><td><b>Here is an embedded IMAGE:<img src=\"cid:img@001\"></td></tr>\r\n<tr><td>Here's another: <img src=\"cid:img@002\"></td></tr></table></body>";

builder.AddImage(@"c:\a1.jpg", "img@001");

builder.AddImage(@"c:\a2.jpg", "img@002");

//create message

message = builder.ToMessage();

其他功能

自动回复,如果希望别人在收到你的信件后发送回复邮件,可使用Notification属性:

MailMessage.Message message;

message = new MailMessage.Message();

message.Notification = true

根据邮件文件创建新邮件,参见以下代码

MailMessage.Message message;

message = MailMessage.Message.FromFile(@"c:\mail.eml");

使用自定义头部消息, Message的头部信息可以由用户自定义,以便于某些程序作特殊处理,请参照以下代码:

MailMessage.Message message;

message = new MailMessage.Message();

message.Headers["X-Flag"] = "1";

更多的服务认证方式,一般情况下,Smtp服务器不需要进行用户身份认证,但是某些服务器为了增强服务器的安全,需要对发送者进行身份确认。对于大多数服务器而言仅提供Login 或Login Plain命令进行认证,这种认证一般使用明码或简单的使用Base64编码处理用户名和密码,并不十分安全。对于某些高级的Smtp服务器可以提供更高级别的用户认证,除了Login和Login Plain以外,Snake.Net还支持CramMD5和DigestMD5两种高级认证方式。

SmtpServer server;

server = new SmtpServer("smtp.mailserver.com", "user", "password");

server.AuthMode = SmtpServerAuthMode.CramMD5;

如果你希望了解过多关于Eastasp.Framework.Net的细节,可以通过Snake.Net的官方网站http://www.eastasp.com或者http://www.eastasp.org,阅读相关文章和帮助。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有