前言

 

目前,各大门户均已推出了各自的邮件服务系统,且功能日益强大,如腾讯QMail;然而,作为一家公司的官方邮件,相信邮件地址里使用本公司的域名更具信服力(例如 c.com 以邮件使用 service@c.com 作为发信账号)。是以架设公司的邮件服务器也是一项重要事宜,不可怠慢。试想以 service@qq.com 发送一封邮件给客户以提供最近到货的商品列表,且不说 service 这个账号是否能顺利注册——你能否臆测用户看到这封邮件的观后感如何?这是 QQ 给我发来的信息?还是 c 公司给我发来的信息?这是谁在推销产品?邮件中的内容是否可信?……自然,你可能感觉这似乎过于杞人忧天,无论如何,免除用户的猜度使用户相信产品的来源也是销售产品的重中之重,这也说明使用自主架设的邮件服务器有其重要的一面。

所幸的是,可供选择的邮件服务器软件不在少数,洋产、国产各有特色。作为Windows Server 下历史最为悠久的IMail是我的首选,毕竟其岁数让我比较放心(这当然不是一概而论,例如某些大公司的大产品最终还是外临强敌、垂暮而逝),不幸的是,若配置不得当你可能会被它折磨得很惨——这也是写这篇文章的原意,并且我的主要目的是使用IMail能顺利地正确地外发(例如发送给使用QQ邮箱的客户)邮件给我们的客户,此外是为了帮助遇到同样问题的网友,他们可能跟文超一样找遍了Internet未果,上论坛上看/发帖子又遭遇牛人讳莫如深惜字如金只给你三两个英文字母(如“dns”之类),实际上文超的问题非牛人所指,或者作为中国人给你一大堆看不懂的英文,抑或动辄就怂恿你“重装系统、重装XXX”的尴尬。

文意既明,接下来我会介绍两件事情:

1.       IMail SMTP服务的可行配置。

2.       使用 System.Net.SmtpClient 发送邮件。

 

一、IMail SMTP 服务的可行配置

 

我独宠 SMTP 服务原因是因为它是使用IMail给人最多烦恼的源泉,很多人都遭遇无法发送邮件的情况,例如架设好后,能收不能发、能发却有不能外发,仅能发送给本机服务器的账户……。实话说再好的脾气在SMTTP多次挑衅下也恨不得把它给吃了。

 

文超使用的IMail版本是8.22IMail 的安装过程相当简单,在此文超不愿赘述详细的过程,文中的例子使用 http://www.testimail.com/作为网站的域名,下面是文超在安装过程中填写的各项内容:

HostName = testimail.com

Database = IMail User Database(你若要使用 SQL SERVER 等外部数据库可自行配置,我猜通常您是想使用IMail的主要作用是作为发送外部邮件的服务器,而非架设一个提供一个与QMail一样的邮局)。

 

IMail提供各项周到的服务,如果你和我一样只为了架设一个可以外发邮件的简易系统,我建议你选择下列数个IMail的服务:

1.       IMail SMTP Server(基于文超的目的,这个是必选的)

2.       IMail Queue Manager Service

3.       IMail Web Service (如果您并非所有情况下都是由程序自动发送邮件的话,这个服务将给你提供一个 Web 站点式的用户界面,你可以找一套比较漂亮点的中文界面来替换默认的界面,虽然文超也认同人不可貌相,但是丑得过分实在不应该出门跟人打招呼,如IMail自带的界面)

4.       IMail POP3 Server(如果你的服务邮箱也接收客户的反馈邮件,须开启这个服务)。

 

至于版权问题,我和大家的态度一样,人民币不容易赚,至于掏腰包还是掏工具包、具体如何做等问题各君自行解决吧。

 

一切准备就绪后,文超首先去解决一下域名 testimail.com 的解析问题,登录域名提供商的域名设置页面(例如万网),文超的设置是这样滴:

 

 

域名                       类型      

mail.testimail.com         A记录    (IMail所在的服务器静态IP)

testmail.com               MX记录   mail.testimail.com

 

OK,回到IMail SMTP配置这儿,纯手工活,照做便是。文超还是先啰嗦一下请先确保你开放了25端口(用于SMTP发送),并且创建了一个testimail.com的主机域:

 

 

 

我们创建一个 service 用户,接下来将以此账户(service@testimail.com)作为发送账号。

转到 SMTP服务:

 

SMTP 标签页,下面两个选项你需要认真对待:

Default Mail Host 填入你的MX记录设置的域名;

Domain Name Server address 中填入您服务器的 DNS,你可以通过在【本地连接】->Internet 协议TCP/IP】中查看,你要填入的就是红色框选中的DNS

 

 

点击 SMTP 服务的高级页(Advanced):

 

 

 

勾选 Enable SMTP To Listen On All IPs。然后按一下【应用】按钮,接下来重启一下 SMTP 服务,捅它两下就行:

 

OK。至此,文超没有做其他任何特殊的设置。如果你按部就班设置,此时估计你也能外发邮件了——就那么简单——当然,驾轻就熟的话一下子就完成了,但是如果你是在摸索,你得与蚊虫飞蛾相伴(文超这儿估计比你们还多了些蚂蚁),并耗上几个不眠之夜。

 

二、.NET 下使用 System.Net.SmtpClient 发送邮件

 

其实…上面的配置顺利的话并且能发送外部邮件,那么在你的项目里使用 System.Net.SmtpClient 发送应该就没什么问题了(当然我也无法臆度你的服务器可能还是矫情不从,再折腾折腾你)。

 

文超写了用于发送邮件的两个函数,权作参考:

 


 1public bool SendServiceMail( string sendTo, string subject, string body )
 2{
 3    return SendServiceMail( sendTo, subject, body, false );
 4}

 5
 6public bool SendServiceMail( string sendTo, string subject, string body, bool isHTML )
 7{
 8    bool result = false;
 9
10    SmtpClient client = new SmtpClient( "mail.testimail.com" );
11    client.Credentials = new NetworkCredential( "service@ testimail.com ""这个账号的密码" );
12    MailMessage msg = new MailMessage( "service@testimail.com", sendTo );
13    msg.SubjectEncoding = msg.BodyEncoding = Encoding.GetEncoding( "gb2312" );
14
15    msg.IsBodyHtml = isHTML;
16    msg.Subject = subject;
17    msg.Body = body;
18
19    try
20    {
21        client.Send( msg );
22        result = true;
23    }

24    catch ( Exception )
25    {
26        result = false;
27    }

28
29    return result;
30}

31
32
文章来自博客园-文超的技术博客
 posted on 2009-10-19 14:06  dongpo  阅读(537)  评论(0编辑  收藏  举报