• .NET发邮件错误之"Could not access 'CDO.Message' object."


      今天,一个.NET的项目中涉及到发送邮件,其实.NET中发邮件是一件很简单的事,如果想发送一个simple的文本邮件只要几行代码就可以搞定。如:

    public void SendEmail(string smtpServer, string fromAddr, string toAddr, string ccAddr, string bccAddr, string subject, string message, out int errNum, out string errText )
    {
        MailMessage Message 
    = new MailMessage();
        Message.To 
    = toAddr;
        Message.From 
    = fromAddr;
        Message.Cc 
    = ccAddr;
        Message.Bcc 
    = bccAddr;
        Message.Subject 
    = subject;
        Message.Body 
    = message;
        
        
    try
        
    {
            SmtpMail.SmtpServer 
    = smtpServer;
            SmtpMail.Send(Message);
            errNum 
    = 0;
            errText 
    = "";
        }

        
    catch(HttpException ex)
        
    {
            errNum 
    = ex.ErrorCode;
            errText 
    = ex.Message;
        }

    }

      但就这么一段简单的代码,折腾了我一个上午,原因是总是提示"Could not access 'CDO.Message' object."的错误信息。由于是一个比较大的项目,测试起来比较麻烦,加之用的是公司的smtp server,所以就又写了一个单独的程序测试,结果一切正常。奇怪了,见鬼了?

      仔细对比代码,无任何不同之处,只有比较输入了,结果发现输入确实不同。在项目中,Message.Cc和Message.Bcc分别赋值为cc.address@xxx.combcc.address@xxx.com,而测试程序中这两项没有赋任何值。也许这就是原因所在,经过再次测试,果然如此。原来当我们把这两项赋值以后,公司的邮件程序会去验证它们的有效性,但如果不赋值,就不会去验证。之所以忽略了这一点,就是因为这两项是optional的,就想当然的随便填了一个值,结果就陷进去了。

      由此产生了对Message.From的测试,不过对于这个必填项它倒不去验证了。唉,都是公司的这个邮件服务器惹的祸。当我用localhost发邮件时,它才不管你三七二十一,只管发,什么地址也不验证。

      所以大家如果在公司写邮件程序并且打算用公司的smtp server的话,出现这个错误不要奇怪,只要把你的inputs好好理一下就没问题了。

      另外就这个错误在网上查了一下,其实有很多原因都可以引发这个错误,比如:

      1、smtp server没有设置正确,或它不可用

      2、用localhost或"127.0.0.1"作为smtp server,但却没有权限通过IIS SMTP Service来中转。要加入这个权限,打开IIS管理,右键单击SMTP Virtual Server,选择Properties->Access tab->Relay,在Relay Restrictions对话框中,加入127.0.0.1,然后重启IIS即可。
      3、最好邮件地址都用有效的,不要用些asdf@asdf.com什么的。

  • 相关阅读:
    beta冲刺(6/7)
    beta冲刺(5/7)
    beta冲刺(4/7)
    beta(3/7)
    beta冲刺(2/7)
    beta冲刺(1/7)
    团队项目测评博客
    东华理工18级计科五班团队作业六
    东华理工18级计科五班团队作业五
    东华理工18级计科五班团队作业四
  • 原文地址:https://www.cnblogs.com/michaelxu/p/1224360.html
Copyright © 2020-2023  润新知