zoukankan      html  css  js  c++  java
  • 邮件发送错误解决一例

    北京网站建设-恒动时空

    网站中有用到通过程序发送邮件的功能,之前一直使用的是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" />
  • 相关阅读:
    HTTP报文语法/HTTP组成
    get和post的区别
    Jmeter图形结果
    Jmeter用表格查看结果
    Jmeter聚合报告
    Jmeter查看结果树
    Jmeter集合点
    Jmeter-BeanShell Sampler调用java代码
    Jmeter简单的接口测试
    get、post接口测试-java
  • 原文地址:https://www.cnblogs.com/superfeeling/p/2825687.html
Copyright © 2011-2022 走看看