public static bool SendEmailToPeople(string smtpHost, string userName, string pwd,
string emailFrom, string emailTo,
string emailSubject, string emailBody, bool IsBodyHtml,string url)
{
bool message = false;
try
{
MailMessage email = new MailMessage(emailFrom, emailTo); email.IsBodyHtml = IsBodyHtml; email.Body = emailBody; email.Subject = emailSubject; email.Priority = MailPriority.Normal;
email.SubjectEncoding = Encoding.Default; email.BodyEncoding = Encoding.Default; System.Net.Mail.SmtpClient stmp = new SmtpClient(smtpHost);
//设置是否需要发送是否需要身份验证,如果不需要下面的credentials是不需要的
stmp.UseDefaultCredentials = true;
stmp.Credentials = new System.Net.NetworkCredential(userName, pwd);
stmp.DeliveryMethod = SmtpDeliveryMethod.Network;
email.Attachments.Add(new Attachment(url));
stmp.Send(email);
message = true;
}
catch (Exception ex)
{
//throw new Exception("发送email出错\n" + ex.ToString());
}
return message;
}这里写了一个邮箱发送的方法!
这个方法是可以发送邮件的,但是却不能验证邮件发送是否成功!
用户注册网站填入邮箱,系统邮箱给其发送邮件,但是如果用户邮箱填错,或者其邮箱的服务器给拒绝了,我们的系统邮箱会收到退信的邮件,告知其邮箱不能找到!或者服务器拒绝! 但是,我们如何在程序中捕获这样的异常呢?告知其邮件发送失败呢?
stmp.Send(email);这样是捕获不了的请问大家有什么其它的方法没?
http://www.cnblogs.com/smileman/archive/2008/01/02/1023121.html
public static bool SmtpProviderStatus(string pingaddress)
{
Process p = new Process(); p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
string pingrst;
p.Start();
p.StandardInput.WriteLine("ping -n 1 " + pingaddress);
p.StandardInput.WriteLine("exit");
string strRst = p.StandardOutput.ReadToEnd();
if (strRst.IndexOf("(0% loss)") != -1)
pingrst = "连接"; else if (strRst.IndexOf("Destination host unreachable.") != -1)
pingrst = "无法到达目的主机"; else if (strRst.IndexOf("Request timed out.") != -1)
pingrst = "超时"; else if (strRst.IndexOf("Unknown host") != -1)
pingrst = "无法解析主机"; else
pingrst = strRst;
if (pingrst != "连接")
{
return false;
}
else
{
return true;
}
}
//判断是否已经开启端口
public static bool Smtpport(string websiteaddress)
{
bool openstatus = false;
System.Net.IPAddress ip = System.Net.IPAddress.Parse(websiteaddress);
System.Net.IPEndPoint point = new System.Net.IPEndPoint(ip, 25);
try
{
System.Net.Sockets.TcpClient tc = new System.Net.Sockets.TcpClient();
tc.Connect(ip, 25);
openstatus = true;
}
catch
{
openstatus = false;
}
return openstatus;
}
//返回电子邮件地址
public static string[] returnmailaddress(string name)
{
SqlParameter[] p ={
new SqlParameter("name",name)
};
DataTable dt = Oacommand.ExecuteTable("P_returnmailaddress", p);
string[] s = new string[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
s[i] = dt.Rows[i][0].ToString();
}
return s;
}
//发送电子邮件
public static void Sendmail(string ReceiveName, string Topic, string Content)
{
if (ConfigurationManager.AppSettings["AllowsendEmail"].ToString() == "yes")
{
string smtpaddress = ConfigurationManager.AppSettings["SmtpAddress"].ToString();
//判断是否连接
if (SmtpProviderStatus(smtpaddress) == false)
{
System.Web.HttpContext.Current.Response.Write("<script>window.confirm('当前邮件服务存在问题,是否放弃发送继续操作?')</script>");
}
else
{
//判断端口是否打开
string SmtpProviderAddress = ConfigurationManager.AppSettings["SmtpProviderAddress"].ToString();
if (Smtpport(SmtpProviderAddress) == false)
{
System.Web.HttpContext.Current.Response.Write("<script>window.confirm('当前邮件服务存在问题,是否放弃发送继续操作?')</script>");
}
else
{
string[] ReceiverAddress = returnmailaddress(ReceiveName);
for (int i = 0; i < ReceiverAddress.Length; i++)
{
MailMessage message = new MailMessage();
message.To.Add(new MailAddress(ReceiverAddress[i])); //收件人邮箱
message.Subject = Topic;//邮件主题
message.Body = Content; //邮件正文
SmtpClient mailClient = new SmtpClient();
mailClient.Send(message);
}
}
}
}
else
{
Oasystem.ShowMessage("当前邮件发送为关闭状态");
}
}这个能判断吗?