最近工作上需要給大量郵箱發(fā)email,每封信內(nèi)容還不完全一樣.為了偷懶,研究了一下.net2.0的System.Net.Mail ,發(fā)現(xiàn)跟.net1.0版本有不同.
要實現(xiàn)smtp發(fā)信太簡單了,這里不再班門弄斧,只是現(xiàn)在的smtp服務(wù)器本來就少,還基本都需要登陸認證,太麻煩,看了一些文章用MailMessage.Field.Add方法實現(xiàn)登錄認證,找了半天.net2.0中沒有該方法.(注:"大文"兄對登錄認證的問題作了更正,為了大家閱讀方便,這里直接給出正確的方法:應(yīng)該用:
SmtpClient smtpClient = new SmtpClient("xxx.xxx.xxx.xxx");
smtpClient.Credentials = new NetworkCredential("account", "password");
smtpClient.Timeout = 100;
smtpClient.EnableSsl = false;
)要通過網(wǎng)上的公開smtp服務(wù)器發(fā)郵件是不可能了.(其實是可以的,只是較慢)
于是考慮通過本地smtp服務(wù)器來群發(fā),還是想偷懶,找了幾個免費的smtp本地服務(wù)器軟件.其中magic winmail4.2和musemail server2.0兩個軟件順利通過測試,前者不需要作任何配置,安裝完畢就可以用SmtpClient.Send方法發(fā)送郵件,記住要把Host設(shè)成本地主機127.0.0.1 .美中不足是只能30天試用期,后者需要簡單的配置(勾掉"強制進行SMTP發(fā)信認證",并將SMTP綁定到127.0.0.1),但是沒有時間限制.
以下提供了關(guān)鍵代碼.
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)中顯示為亂碼,且無法通過設(shè)置Encoding來解決.還有一些郵箱發(fā)送后無法收到(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);