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

本文总结了使用System.Web.Mail发送邮件时可能遇到的问题及解决方案,包括SMTP服务器验证、IIS设置问题以及服务器安全设置导致的DLL加载失败等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 最近使用.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.youkuaiyun.com/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的人:)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值