最近工作上需要给大量邮箱发email,每封信内容还不完全一样.为了偷懒,研究了一下.net2.0的System.Net.Mail ,发现跟.net1.0版本有不同.
要实现smtp发信太简单了,这里不再班门弄斧,只是现在的smtp服务器本来就少,还基本都需要登陆认证,太麻烦,看了一些文章用MailMessage.Field.Add方法实现登录认证,找了半天.net2.0中没有该方法.(注:"大文"兄对登录认证的问题作了更正,为了大家阅读方便,这里直接给出正确的方法:应该用:
SmtpClient smtpClient = new SmtpClient("xxx.xxx.xxx.xxx");
smtpClient.Credentials = new NetworkCredential("account", "password");
smtpClient.Timeout = 100;
smtpClient.EnableSsl = false;
)要通过网上的公开smtp服务器发邮件是不可能了.(其实是可以的,只是较慢)
于是考虑通过本地smtp服务器来群发,还是想偷懒,找了几个免费的smtp本地服务器软件.其中magic winmail4.2和musemail server2.0两个软件顺利通过测试,前者不需要作任何配置,安装完毕就可以用SmtpClient.Send方法发送邮件,记住要把Host设成本地主机127.0.0.1 .美中不足是只能30天试用期,后者需要简单的配置(勾掉"强制进行SMTP发信认证",并将SMTP绑定到127.0.0.1),但是没有时间限制.
以下提供了关键代码.
private bool sendMail(string add, string from,string subject,string content, string attachmentadd)
{
try
{
MailMessage message = new MailMessage(from,add);
if (attachmentadd != "")
{
Attachment attachment = new Attachment(attachmentadd);
message.Attachments.Add(attachment);
}
if (content != "")
{
message.BodyEncoding = Encoding.GetEncoding("GBK");
message.Body = content;
}
if (subject != "")
{
message.Subject = subject;
}
SmtpClient sc = new SmtpClient("127.0.0.1",25);
sc.Send(message);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return false;
}
return true;
}
软件编出来后遇到了一个问题,就是中文主题再一些邮箱(如eyou)中显示为乱码,且无法通过设置Encoding来解决.还有一些邮箱发送后无法收到(qianlong,tom)各位大侠帮帮忙,看看有没有办法解决.
在.net 2.0中用以下代码就可以了。
MailMessage mlMsg = new MailMessage();
mlMsg.From = new MailAddress("from@mail.com", "fromName");
mlMsg.To.Add(new MailAddress("to@mail.com"));
mlMsg.Subject = "Title";
mlMsg.Body = "Test Mail";
mlMsg.IsBodyHtml = false;
SmtpClient smtpClient = new SmtpClient("xxx.xxx.xxx.xxx");
smtpClient.Credentials = new NetworkCredential("account", "password");
smtpClient.Timeout = 100;
smtpClient.EnableSsl = false;
smtpClient.Send(mlMsg);