前言
目前,各大门户均已推出了各自的邮件服务系统,且功能日益强大,如腾讯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.22,IMail 的安装过程相当简单,在此文超不愿赘述详细的过程,文中的例子使用 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