因为硬盘损坏和换工作两个原因,我曾经写过的绝大多数代码都丢失了。这是件让我感觉很遗憾的事情,软件开发的高效率是建立在重用基础上的,代码丢失无疑是对重用的一个绝大打击,以前封装好的功能现在统统需要重新来过,我的工作效率一下子下降了不知多少倍,某种意义上讲,我从此踏上一个新的程序开发征程。此刻,为我的代码们默哀,为我新的程序生涯祈愿!愿我将来在技术的领域中能走得更远。
今天写一个C#发送邮件的功能,由于不想花太多时间,我打算从同事的代码中移植一份过来。拿到同事的程序后心里不禁一动。那段代码中有一行我熟悉的文字,而这段文字是我两年以前写的,而且从命名风格和程序结构的风格来看这个程序确实是我当年所写。两年前我是一个入行不久的新人,喜欢把工作中新学会的东西和通用性强的代码贴在blog上。没想到那时的代码通过互联网传播到彼时我完全不认识的一个人——此时我的同事这里。是应该感叹我们的缘分还是互联网的传播能力呢!
今天我对代码进行了一些改造,拿出来共享,兴许对某些人有所帮助。
注意:126的邮箱只支持老账号发送,新申请的账号用此程序不能发送
Code
using System;
using System.Data;
using System.Configuration;
using System.Net.Mail;
/**/
/// <summary>
/// sendMail 的摘要说明
/// </summary>
public class Mail
{
/// <summary>
/// 发送邮件 For Ex:Mail.Send("zhaoyao@126.com", new string[] { "zhaoyao@126.com", "zyip@qq.com" }, "test attment and mutile receive", false, "body", "mail.126.com", null, null, new string[] { "c:\\sp.txt", "c:\\sp.txt" })
/// </summary>
/// <param name="from">发送人邮件地址</param>
/// <param name="to">接收人邮件地址列表</param>
/// <param name="subject">邮件主题</param>
/// <param name="isBodyHtml">是否是Html</param>
/// <param name="body">邮件体</param>
/// <param name="smtpHost">SMTP服务器地址,例如:smtp.163.com</param>
/// <param name="userName">用户名,不需要身份验证时使用null</param>
/// <param name="password">密码,不需要身份验证时使用null</param>
/// <param name="attachments">附件地址列表</param>
/// <returns>是否成功</returns>
public static bool Send(string from, string[] to, string subject, bool isBodyHtml, string body, string smtpHost, string userName, string password, string[] attachments)
{
bool isSuccess = true;
try
{
MailMessage mm = new MailMessage();
mm.From = new MailAddress(from);
for (int i = 0; i < to.Length; i++)
{
mm.To.Add(new MailAddress(to[i]));
}
mm.Subject = subject;
mm.IsBodyHtml = isBodyHtml;
mm.Body = body;
#region 附件
if (attachments!=null)
{
for (int i = 0; i < attachments.Length; i++)
{
if (System.IO.File.Exists(attachments[i]))
{
Attachment a = new Attachment(attachments[i]);
mm.Attachments.Add(a);
}
}
}
#endregion
SmtpClient sc = new SmtpClient(smtpHost);
sc.Host = smtpHost;
sc.UseDefaultCredentials = false;
//smtpClient.EnableSsl = true;//如果服务器不支持ssl则报,服务器不支持安全连接 错误
if (!(string.IsNullOrEmpty(userName) && string.IsNullOrEmpty(password)))
{
sc.UseDefaultCredentials = true;//winform中不受影响,asp.net中,false表示不发送身份严正信息
sc.Credentials = new System.Net.NetworkCredential(userName, password);
}
sc.Send(mm);
mm.Dispose();
sc = null;
mm = null;
}
catch
{
isSuccess = false;
}
return isSuccess;
}
}
为方便多语言混合使用我编译了一个bin文件,如果vb.net或者c++。net使用的话可以直接引用bin文件,当然也可以翻译代码到目标语言
bin source /Files/zyip/jmail.rar
使用jmail
下载jmail
注册jmail.dll 发布时需要这一部
在项目中加入jmail.dll的引用
Code
/**//// <summary>
/// 发送邮件 For Ex:Mail.Send("zhaoyao@solutionkeys.com", new string[] { "zhaoyao@solutionkeys.com", "zyip@qq.com" }, "test attment and mutile receive", false, "body", "mail.solutionkeys.com", null, null, new string[] { "c:\\sp.txt", "c:\\sp.txt" })
/// </summary>
/// <param name="from">发送人邮件地址</param>
/// <param name="to">接收人邮件地址列表</param>
/// <param name="subject">邮件主题</param>
/// <param name="isBodyHtml">是否是Html</param>
/// <param name="body">邮件体</param>
/// <param name="smtpHost">SMTP服务器地址,例如:smtp.163.com</param>
/// <param name="userName">用户名,不需要身份验证时使用null</param>
/// <param name="password">密码,不需要身份验证时使用null</param>
/// <param name="attachments">附件地址列表</param>
/// <returns>是否成功</returns>
public static bool JSend(string from,string[] to,string subject,bool isBodyHtml,string body,string smtpHost,string userName,string password,string[] attachments)
{
bool r = false;
jmail.SMTPMailClass smtp = new jmail.SMTPMailClass();
jmail.MessageClass email = new jmail.MessageClass();
email.Logging = true;
email.Silent = true;
email.MailServerUserName = userName;
email.MailServerPassWord = password;
email.From = from;
email.Subject = subject;
if (attachments != null)
{
for (int i = 0; i < attachments.Length; i++)
{
email.AddAttachment(attachments[i], true, "");
}
}
if (isBodyHtml)
email.HTMLBody=body;
else
email.Body = body;
for (int i = 0; i < to.Length; i++)
{
email.AddRecipient(to[i], "", null);
}
r = email.Send(smtpHost, false);
return r;
//MessageBox.Show(email.Send("mail.solutionkeys.com", false).ToString());
//MessageBox.Show(email.Log);
}