邮件发送错误解决一例

北京网站建设-恒动时空

网站中有用到通过程序发送邮件的功能,之前一直使用的是using System.Web.Mail,邮箱用的是126的邮箱,发邮件很正常。今天客户要求使用万网的云邮箱,按照格式设置了云邮箱的发件账户后,居然出现了“óê?t?T·¨·¢?íμ? SMTP ·t???÷?£′?ê?′í?ó′ú???a 0x80040217?£·t???÷?ìó|?a not available”的错误。百度了一下,发现遇到这种错误的很多,但解决办法基本是抄来抄去的。其中有一篇文章提到,System.Web.Mail已经过时了,所以会出错,应该使用System.Net.Mail来发送邮件。查了下MSDN,确实是这样。

此命名空间中的类已被否决。改用 System.Net.Mail 命名空间。System.Web.Mail 命名空间包含使您可以使用 CDOSYS(Windows 2000 的协作数据对象)消息组件来构造和发送消息的类。邮件消息是通过内置在 Microsoft Windows 2000 中的 SMTP 邮件服务或任意的 SMTP 服务器来传送的。此命名空间中的类可以在 ASP.NET 或任何托管应用程序中使用。 


上面这段话来自MSDN,意思很明显,System.Web.Mail已经被微软否决了,既然如此,那就听微软的,改用System.Net.Mail来发送吧。System.Net.Mail发送邮件并不复杂,网上的相关代码也有很多。按System.Net.Mail配置好了邮件发送程序,结果在发送邮件时又出现了错误。以下是错误提示:

不允许使用邮箱名称。 服务器响应为: authentication is required

怪了,为什么使用System.Net.Mail还是出错呢,继续百度,有很多文章提到要改smtp的设置,也有文章提到说用不同的邮箱用户名部分不一样。难道是这个原因,试下吧。

原来用126的邮箱,用户名部分是@前边的内容,既然可能是问题,那就都写全了吧,如:***@126.com,发送测试,居然成功了。既然成功了,会不会是之前的System.Web.Mail也是这个原因造成的呢?把代码恢复到初始的时候,使用System.Web.Mail发送邮件,只是还是把用户名写全,发送测试,也成功了。

由此,原因找到,问题解决。因此,很多时候问题解决还是要多想一下,网上的答案未必就是你要的答案,更何况现在更多的天下文章一大抄,你抄我来我抄你,但这些往往不能解决你的问题。

顺带附上分别使用两种方式发送邮件的代码:

使用System.Web.Mail

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Web.Mail;

using System.Net.Mail;

using HengCms.Common;



/// <summary>

/// SendMail 的摘要说明

/// </summary>

public class OperaterMail

{

    public static void SendMail(string tomail, string subject, string emailcon)

    {

        MailMessage objMailMessage;



        // 创建邮件消息 

        objMailMessage = new MailMessage();

        objMailMessage.From = rwWebConfig.readConfigValue("formemail");

        objMailMessage.To = tomail;

        objMailMessage.Subject = subject;//发送邮件的标题 

        objMailMessage.BodyFormat = MailFormat.Html;

        objMailMessage.Body = emailcon;



        objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");

        //用户名 

        objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", rwWebConfig.readConfigValue("username"));

        //密码 

        objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", rwWebConfig.readConfigValue("password"));



        //SMTP地址 

        SmtpMail.SmtpServer = rwWebConfig.readConfigValue("smtp");

        //开始发送邮件 

        SmtpMail.Send(objMailMessage);

    }

}

使用System.Net.Mail

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Net.Mail;

using HengCms.Common;

using System.Net;



/// <summary>

/// SendMail 的摘要说明

/// </summary>

public class OperaterMail

{

    public static void SendMail(string tomail, string subject, string emailcon)

    {

    }



    static string strHost = rwWebConfig.readConfigValue("smtp");

    static string strAccount = rwWebConfig.readConfigValue("username");

    static string strPwd = rwWebConfig.readConfigValue("password");

    static string strFrom = rwWebConfig.readConfigValue("formemail");



    public static string sendMail(string to, string title, string content)

    {

        SmtpClient _smtpClient = new SmtpClient();

        _smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式

        _smtpClient.Host = strHost; ;//指定SMTP服务器

        _smtpClient.Credentials = new System.Net.NetworkCredential(strAccount, strPwd);//用户名和密码



        MailMessage _mailMessage = new MailMessage(strFrom, to);

        _mailMessage.Subject = title;//主题

        _mailMessage.Body = content;//内容

        _mailMessage.BodyEncoding = System.Text.Encoding.UTF8;//正文编码

        _mailMessage.IsBodyHtml = true;//设置为HTML格式

        _mailMessage.Priority = MailPriority.High;//优先级



        try

        {

            _smtpClient.Send(_mailMessage);

            return "正常";

        }

        catch(Exception e)

        {

            return e.Message;

        }

    }

}

Web.config中的邮件设置

关键点在于username,使用126的邮箱是*****,使用万网的云邮箱则是*****@****.com

    <add key="formemail" value="*****@*******.com" />

    <add key="username" value="******" />//这个不同的邮箱不同设置

    <add key="password" value="******" />

    <add key="smtp" value="smtp.126.com" />

 

你可能感兴趣的:(邮件发送)