jmail组建虽然好用,但是在.NET中使用要注册组建,很是不爽,如果在别人的服务器上运行的话,更加麻烦。所以就使用。NET自带的邮件发送控件。
具体的代码如下:
/// <summary>
/// 发送邮件
/// </summary>
/// <param name="FEmail">发件人</param>
/// <param name="MtoEmail">收件人列表</param>
/// <param name="subject">主题</param>
/// <param name="content">内容</param>
/// <param name="attachment">附件</param>
/// <param name="hostName">smtp主机</param>
/// <param name="userName">用户名</param>
/// <param name="Pass">密码</param>
/// <returns></returns>
public static bool sendMail(string FEmail, string[] MtoEmail, string subject, string content, string[] attachment, string hostName, string userName, string Pass)
{
Mail_Class rm = new Mail_Class();//发送后存入数据库的类
try
{
SmtpClient sc = new SmtpClient(hostName,25);
sc.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
sc.Credentials = new System.Net.NetworkCredential(userName, StrOpers.decode(Pass));//用户名和密码,密码经过加密,先解密。
MailMessage mail = new MailMessage();
mail.From=new MailAddress(FEmail);
///添加收件人
for (int i = 0; i < MtoEmail.Length; i++)
{
MtoEmail[i] = rm.emialAd(MtoEmail[i].ToString());
if (MtoEmail[i].Trim() != "" && Validator.IsValidEmail(MtoEmail[i].Trim()))
{
mail .To.Add(new MailAddress(MtoEmail[i].ToString()));
}
}
///添加附件
for (int j = 0; j < attachment.Length; j++)
{
if (attachment[j].ToString() != "" && attachment[j].ToString().Length > 2)
{
mail.Attachments.Add(new Attachment(attachment[j].ToString()));
}
}
mail .Body=content;
mail.IsBodyHtml=true;
mail.Subject=subject;
sc.Send(mail);
return true;
}
catch
{
return false;
}
}
如果你要使用LumiSoft收取邮件时,可能收不到上面发的附件,要改下以前发的程序,具体如下:
#region 收取邮件
/// <summary>
/// 收取邮件
/// </summary>
/// <param name="Username"></param>
/// <param name="TID"></param>
/// <returns></returns>
public static string ReceiveMails(string Username, int TID)
{
Mail_Class mc = new Mail_Class();
if (TID != 0)
{
SqlDataReader dataReader = mc.ExtGetSetting(Username, TID);
if (dataReader.Read())
{
string PopServer = dataReader["PopServer"].ToString();//服务器名称
string UserName = dataReader["Username"].ToString();//用户名
string PopPass = dataReader["PopPassword"].ToString();//密码
PopPass = StrOpers.decode(PopPass);
int port = 110;//端口号
if (dataReader["PopPort"].ToString() != "" || dataReader["PopPort"] != null)
{
port = Convert.ToInt32(dataReader["PopPort"].ToString());
}
dataReader.Close();
if (PopServer != "" && UserName != "")
{
using (POP3_Client c = new POP3_Client())
{
//连接POP3服务器
//WellKnownPorts.POP3 = port;
try
{
c.Connect(PopServer, port);
//验证用户身份
c.Authenticate(UserName, PopPass, false);
}
catch
{
return "不能连接到主机,请检查邮箱设置是否正确或者网络是否畅通!";
}
int countre = 0;
if (c.Messages.Count > 0)
{
for (int i = c.Messages.Count - 1; i >= 0; i--)
{
string ss = c.Messages[i].UID;
if (!mc.JudgeEmail(ss, TID.ToString()))
{
try
{
Mime m = Mime.Parse(c.Messages[i].MessageToByte());
mc.SaveExtMail(m, TID, ss);
countre++;
}
catch
{
}
}
}
}
int count = c.Messages.Count;
c.Disconnect();
return "邮箱有" + count.ToString() + " 封邮件,收取" + countre.ToString() + " 封新邮件";
}
}
else
{
return "邮箱服务器或者用户名不能为空";
}
}
else
{
return "未找到你要收邮件的邮箱";
}
}
else
{
return "ID号不能为空";
}
}
#endregion
/// <summary>
/// 外部邮件主体保存
/// </summary>
/// <param name="mailbody"></param>
public void SaveExtMail(Mime m, int emailId, string MessageID)
{
#region 获取邮件的附件并下载保存
string filename = "";
string rootpath = HttpContext.Current.Server.MapPath("~");
foreach (MimeEntity me in m.Attachments)
{
if (!String.IsNullOrEmpty(me.ContentDisposition_FileName))
{
filename += "|" + me.ContentDisposition_FileName;
me.DataToFile(rootpath + "//EmailMange//EmailUpload//" + me.ContentDisposition_FileName);
}
else
{
if (!String.IsNullOrEmpty(me.ContentType_Name))
{
filename += "|" + me.ContentType_Name;
me.DataToFile(rootpath + "//EmailMange//EmailUpload//" + me.ContentType_Name);
}
}
}
#endregion
string cc = "", bcc = "";
if (m.MainEntity.Cc != null)
{
cc = m.MainEntity.Cc.ToAddressListString();
}
if (m.MainEntity.Bcc != null)
{
bcc = m.MainEntity.Bcc.ToString();
}
SqlParameter[] prams ={
new SqlParameter("@MailID",SqlDbType.VarChar),
new SqlParameter("@FromMail",SqlDbType.VarChar),
new SqlParameter("@ToEmail",SqlDbType.VarChar),
new SqlParameter("@ReadFlag",SqlDbType.Bit),
new SqlParameter("@FolderID",SqlDbType.Int),
new SqlParameter("@HeadersText",SqlDbType.VarChar),
new SqlParameter("@Subject",SqlDbType.VarChar),
new SqlParameter("@HtmlContent",SqlDbType.Text),
new SqlParameter("@FileName",SqlDbType.VarChar),
new SqlParameter("@CcTo",SqlDbType.VarChar),
new SqlParameter("@Bccto",SqlDbType.VarChar),
new SqlParameter("@SendDate",SqlDbType.DateTime),
new SqlParameter("@ReceiveDate",SqlDbType.DateTime),
new SqlParameter("@Flag",SqlDbType.Int),
new SqlParameter("@DelFlag",SqlDbType.Int)
};
if (MessageID == null)
{
MessageID = m.MainEntity.Date.ToLongDateString();
}
prams[0].Value = MessageID;
prams[1].Value = m.MainEntity.To.ToAddressListString().Length > 500 ? m.MainEntity.To.ToAddressListString().Substring(0, 500) : m.MainEntity.To.ToAddressListString();
prams[2].Value = m.MainEntity.From.ToAddressListString();
prams[3].Value = 0;
prams[4].Value = emailId;
prams[5].Value = m.MainEntity.HeaderString;
prams[6].Value = m.MainEntity.Subject.ToString();
prams[7].Value = m.BodyText + m.BodyHtml;
prams[8].Value = filename;
prams[9].Value = cc;
prams[10].Value = bcc;
prams[11].Value = DateTime.Now;
prams[12].Value = m.MainEntity.Date;
prams[13].Value = 0;
prams[14].Value = 0;
try
{
StringBuilder strSql = new StringBuilder();
strSql.Append(" INSERT INTO [TabExtMailList]([MailID],[FromMail],[ToMail],[ReadFlag],[FolderID],");
strSql.Append(" [HeadersText],[Subject],[HtmlContent],[FileName],[CcTo],");
strSql.Append(" [BccTo],[SendDate],[Receivedate],[Flag],[DelFlag]) VALUES( @MailID,@FromMail,@ToEmail, ");
strSql.Append(" @ReadFlag,@FolderID,@HeadersText,@Subject,@HtmlContent,@FileName,");
strSql.Append(" @CcTo,@BccTo,@SendDate,@ReceiveDate,@Flag,@DelFlag)");
DbHelperSQL.ExecuteSql(strSql.ToString(), prams);
}
catch (Exception ex)
{
//Error.Log(ex.ToString());
//throw new Exception("外部邮件保存出错!", ex);
}
}
#endregion