当前位置: 首页 > ops >正文

.net发送邮件失败的部分解决方法

 最近使用.net的System.Web.Mail发送邮件在服务器上失败,经过多次尝试,终于解决了这个问题:

一般System.Web.Mail是.net自带的发送邮件的库.但发现失败的原因有几种,贴出来给大家参考一下:

<%@ Page Language="C#" %>
<script language="C#" runat="server">

void Page_Load()
{
// 使用一个SMTP的服务器,并且通过验证
  System.Web.Mail.MailMessage myEmail = new System.Web.Mail.MailMessage();
 myEmail.From = "username@126.com";
 myEmail.To = "aim@eyou.com";
 myEmail.Subject = "测试";
 myEmail.BodyFormat = System.Web.Mail.MailFormat.Text;
 myEmail.Body = "看到了么?";
 // 通过SMTP服务器验证
 myEmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
 myEmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "username");
 myEmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "userpassword");
 System.Web.Mail.SmtpMail.SmtpServer = "smtp.126.com";
 System.Web.Mail.SmtpMail.Send(myEmail);
 lblMailStatus.Text = "Mail successfully sent.";
}

</script>

<html>
<body>

<asp:Label id="lblMailStatus" runat="server" />

</body>
</html>

这个是常见的发送方式,

案例一:见到网上有些资料缺少

 // 通过SMTP服务器验证
 myEmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
 myEmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "username");
 myEmail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "userpassword");

这一部分,是失败原因其中之一.有些邮件服务器(smtp)需要用户验证.

附CdoConfiguration相关属性参考:(转自:http://dev.csdn.net/article/78/78245.shtm)
public abstract class CdoConfiguration
{
      // Fields
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoAutoPromoteBodyParts = "http://schemas.microsoft.com/cdo/configuration/autopromotebodyparts";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoFlushBuffersOnWrite = "http://schemas.microsoft.com/cdo/configuration/flushbuffersonwrite";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoHTTPCookies = "http://schemas.microsoft.com/cdo/configuration/httpcookies";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoLanguageCode = "http://schemas.microsoft.com/cdo/configuration/languagecode";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoNNTPAccountName = "http://schemas.microsoft.com/cdo/configuration/nntpaccountname";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoNNTPAuthenticate = "http://schemas.microsoft.com/cdo/configuration/nntpauthenticate";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoNNTPConnectionTimeout = "http://schemas.microsoft.com/cdo/configuration/nntpconnectiontimeout";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoNNTPServer = "http://schemas.microsoft.com/cdo/configuration/nntpserver";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoNNTPServerPickupDirectory = "http://schemas.microsoft.com/cdo/configuration/nntpserverpickupdirectory";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoNNTPServerPort = "http://schemas.microsoft.com/cdo/configuration/nntpserverport";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoNNTPUseSSL = "http://schemas.microsoft.com/cdo/configuration/nntpusessl";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoPostEmailAddress = "http://schemas.microsoft.com/cdo/configuration/postemailaddress";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoPostPassword = "http://schemas.microsoft.com/cdo/configuration/postpassword";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoPostUserName = "http://schemas.microsoft.com/cdo/configuration/postusername";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoPostUserReplyEmailAddress = "http://schemas.microsoft.com/cdo/configuration/postuserreplyemailaddress";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoPostUsingMethod = "http://schemas.microsoft.com/cdo/configuration/postusing";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSaveSentItems = "http://schemas.microsoft.com/cdo/configuration/savesentitems";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSendEmailAddress = "http://schemas.microsoft.com/cdo/configuration/sendemailaddress";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSendPassword = "http://schemas.microsoft.com/cdo/configuration/sendpassword";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSendUserName = "http://schemas.microsoft.com/cdo/configuration/sendusername";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSendUserReplyEmailAddress = "http://schemas.microsoft.com/cdo/configuration/senduserreplyemailaddress";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSendUsingMethod = "http://schemas.microsoft.com/cdo/configuration/sendusing";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSMTPAccountName = "http://schemas.microsoft.com/cdo/configuration/smtpaccountname";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSMTPAuthenticate = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSMTPConnectionTimeout = "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSMTPServerPickupDirectory = "http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSMTPServerPort = "http://schemas.microsoft.com/cdo/configuration/smtpserverport";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoSMTPUseSSL = "http://schemas.microsoft.com/cdo/configuration/smtpusessl";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoURLGetLatestVersion = "http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoURLProxyBypass = "http://schemas.microsoft.com/cdo/configuration/urlproxybypass";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoURLProxyServer = "http://schemas.microsoft.com/cdo/configuration/urlproxyserver";
      [MarshalAs(UnmanagedType.BStr)]
      public const string cdoUseMessageResponseText = "http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext";
}
例子代码如下:
   MailMessage myMail = new MailMessage();
   myMail.From = emailFrom;
   myMail.To = emailTo;
   myMail.Subject = subject;
   myMail.Body = sb.ToString();
   myMail.BodyFormat = MailFormat.Html;
   myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing","2");
   myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendemailaddress",emailFrom);
   myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpuserreplyemailaddress",emailFrom);
   myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpaccountname",userName);
   myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",Your 163.com's userName);
   myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword",your 163.com's password);
   myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate","1");
   myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver","smtp.163.com");
   //SmtpMail.SmtpServer = "smtp.163.com";
   SmtpMail.Send(myMail);

案例二:

已经加上smtp验证,仍然发送失败:原因应该是IIS的设置

运行后系统提示错误信息:

Email Fail
Could not access 'CDO.Message' object.
Here is the full error message output:
System.Web.HttpException: Could not access 'CDO.Message' object. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException (0x8004020F): The server rejected one or more recipient addresses. The server response was: 550 5.7.1 Unable to relay for 12321323@mobile.att.net

检查SMTP SERVICE,正常,估计是权限设置问题。打开IIS ADMIN,右键点击SMTP VIRTUAL SERVER,选择属性,在ACCESS中点RELAY,增加127.0.0.1。一路OK回去。

这时候再运行程序,邮件发送成功。

转自:http://blog.joycode.com/cafecat/archive/2004/11/06/38186.aspx

案例三,就是我所遇到的问题,和同事调试多次之后才发现:服务器为了安全,把一些控件(dll)禁用了.

抛出无法加载Dll的错误.

最后发现,发送邮件需要调用到msado15.dll.而ADO被禁用.导致出错.

希望这些能帮到使用System.Web.Mail的人:)

 

 

http://www.xdnf.cn/news/11665.html

相关文章:

  • 【网络管理工具】NETworkManager工具的基本使用教程
  • C#(asp.net)电商后台管理系统-计算机毕业设计源码70015
  • AI技术:分享8个非常实用的AI绘画网站
  • Oracle minus用法详解及应用实例
  • MT8377 MT8389 MT6589 MT6577解析
  • linux文件目录:/etc/profile文件
  • VB入门在线视频教程大全学习
  • 织梦采集侠破解版_最新dedecms织梦采集侠v2.6破解版
  • NAT、PAT的原理及配置
  • ANN(人工神经网络)基础知识
  • 数据库挖掘 概念 定义 什么是数据挖掘
  • 数字电路设计——断线报警器的仿真与实物制作
  • qq盗号的小插件 各位同胞注意别被骗了
  • android 3d壁纸源码,3D Wallpaper Parallax app下载-3D Wallpaper Parallax(3D视差壁纸)下载v1.3安卓版-西西软件下载...
  • 【pytorch】加载部分模型参数及冻结部分参数
  • 经典组合 | PTS + ARMS打造性能和应用诊断利器
  • Unix操作系统的前世今生
  • 盘点世界上最出名的十大黑客(每个都能改变历史的大神人物)
  • 社会工程学工具
  • 2023美赛F题讲解+数据领取
  • 电能表原理
  • 科普:黑客入侵网站究竟是怎么回事?
  • 搜狗浏览器,添加自定义搜索引擎~
  • 【java毕业设计】基于javaEE+原生Servlet+MySql的村镇旅游网站设计与实现(毕业论文+程序源码)——村镇旅游网站
  • MessageBox()简易对话框的用法
  • c216芯片组服务器,几无改变 9系芯片组架构及新功能_Intel主板_主板评测-中关村在线...
  • C语言手搓游戏之经典《推箱子》
  • 【面试重点系列】操作系统常见面试重点题(万字图解)
  • httpUnit介绍及使用示例
  • Wavesplit: End-to-End Speech Separation by Speaker Clustering