本地测试发送邮件,网上代码一大片,就先不介绍了;关于购买阿里云服务上进行发送邮件的,我们的坑有很多需要注意,因为阿里云对25端口进行屏蔽,我们只能选择994,网上网易企业邮箱的ssl端口是994,发送邮件的代码:
发送的问题包括:
1、System.Web.HttpException (0x80004005): 与服务器的传输连接失败。
---> System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.Runtime.InteropServices.COMException: 与服务器的传输连接失败。
2、System.Web.HttpException (0x80004005): 邮件无法发送到 SMTP 服务器。传输错误代码为 0x80040217。服务器响应为 not available
---> System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.Runtime.InteropServices.COMException: 邮件无法发送到 SMTP 服务器。传输错误代码为 0x80040217。服务器响应为 not available
解决上门的问题:
1、采用ssl加密进行发送邮件
2、一定记得邮箱授权码不要过期了
public static string SendMailForSSL(string FromMial, string ToMial, string AuthorizationCode, string File_Path, string Subject, string body)
{
try
{
CDO.Message oMsg = new CDO.Message();
CDO.Configuration conf = new ConfigurationClass();
conf.Fields[CdoConfiguration.cdoSendUsingMethod].Value = CdoSendUsing.cdoSendUsingPort;
conf.Fields[CdoConfiguration.cdoSMTPAuthenticate].Value = CdoProtocolsAuthentication.cdoBasic;
conf.Fields[CdoConfiguration.cdoSMTPUseSSL].Value = true;
#region 设置邮件服务器地址
string Host = "";
//在这里我使用的是163邮箱,所以是smtp.163.com,如果你使用的是qq邮箱,那么就是smtp.qq.com。
// client.Host = "smtp.163.com";
if (FromMial.Length != 0)
{
//根据发件人的邮件地址判断发件服务器地址 默认端口一般是25
string[] addressor = FromMial.Trim().Split(new Char[] { '@', '.' });
switch (addressor[1])
{
case "163":
Host = "smtp.163.com";
break;
case "126":
Host = "smtp.126.com";
break;
case "qq":
Host = "smtp.qq.com";
break;
case "gmail":
Host = "smtp.gmail.com";
break;
case "hotmail":
Host = "smtp.live.com";//outlook邮箱
break;
case "foxmail":
Host = "smtp.foxmail.com";
break;
case "chavomail":
Host = "smtp.qiye.163.com";//163企业邮箱
break;
case "sina":
Host = "smtp.sina.com.cn";
break;
default:
Host = "smtp.exmail.qq.com";//qq企业邮箱
break;
}
}
#endregion
conf.Fields[CdoConfiguration.cdoSMTPServer].Value = Host;//必填,而且要真实可用
conf.Fields[CdoConfiguration.cdoSMTPServerPort].Value = 465;//465特有
conf.Fields[CdoConfiguration.cdoSendEmailAddress].Value = "<" + FromMial + ">";
conf.Fields[CdoConfiguration.cdoSendUserName].Value = FromMial;//真实的邮件地址
conf.Fields[CdoConfiguration.cdoSendPassword].Value = AuthorizationCode; //为邮箱密码,必须真实
conf.Fields.Update();
oMsg.Configuration = conf;
oMsg.HTMLBody = body;
oMsg.Subject = Subject;
oMsg.From = FromMial;
oMsg.To = ToMial;
if (File_Path != "" && File_Path != null)
{
//将附件添加到邮件
//ADD attachment.
//TODO: Change the path to the file that you want to attach.
oMsg.AddAttachment(File_Path, "", "");
}
oMsg.Send();
return "";
}
catch (System.Net.Mail.SmtpException ex)
{
return ex.ToString();
}
}
方法大家一看就知道,还有个问题需要进行注意,每个邮箱的授权码是会过期的,如果碰到不能发送邮件了,一定先去看下授权码是不是过期了,授权码设置如下: