关于如何邮件发送失败的问题

achao201 2009-03-21 06:36:43

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);这样是捕获不了的。。。请问大家有什么其它的方法没?
...全文
218 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
toxxj 2009-03-22
  • 打赏
  • 举报
回复
用Notes邮件服务器来发送
wuyq11 2009-03-21
  • 打赏
  • 举报
回复
最好自己构建邮件服务器,不要用第三方
smartxue1987 2009-03-21
  • 打赏
  • 举报
回复
//判断是否连通邮件服务商
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("当前邮件发送为关闭状态");
}
}这个能判断吗?
周公 2009-03-21
  • 打赏
  • 举报
回复
没有办法,最多只是在填写时检测电子邮件是否满足指定格式,然后再发送邮件,通过邮箱收到的邮件发送状态来判断是否是正确的邮件。
CutBug 2009-03-21
  • 打赏
  • 举报
回复
貌似没有方法,只能从检测邮件地址入手了
宝_爸 2009-03-21
  • 打赏
  • 举报
回复
没有方法了。

除非你写个程序读取你的邮箱地址的收件箱,读取并解析邮件,看不是不退信,但是什么时候收到退信也不是确定的。

这篇文章是关于检查邮件地址合法性的,看能不能帮你:
http://www.cnblogs.com/smileman/archive/2008/01/02/1023121.html

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧