2015-01-17 1 views
0

Мое приложение размещено на IIS, запущенном на окнах 2008R2.Код для отправки почты указан ниже.Не удается отправить почту из приложения asp.net (framework версии 4), размещенного в IIS, запущенного в Windows 2008R2?

public bool SendMail(string to, string cc, string subject, string body) 
    { 
     bool abc = false; 
     System.Net.Mail.SmtpClient smtpClient = null; 
     System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(); 
     bool IsSSLfailed = false; 
     bool allPortsFailed = false; 
     bool SSLEnabled = false; 
     bool CertificateByPassed = false; 
     smtpClient = new System.Net.Mail.SmtpClient(); 
    again: try 
     { 

      // SmtpClient smtpserver = new SmtpClient("smtp.gmail.com", 25); 

      string from = ConfigurationSettings.AppSettings.Get("UserName"); 
      string Password = ConfigurationSettings.AppSettings.Get("Password"); 
      message.From = new MailAddress(from); 
      message.To.Add(to); 
      message.Subject = subject; 
      message.IsBodyHtml = true; 
      message.Body = body; 
      message.Subject = WebUtility.HtmlEncode(subject); 
      message.SubjectEncoding = Encoding.UTF8; 
      message.IsBodyHtml = true; 
      message.Body = WebUtility.HtmlDecode(body); 
      message.BodyEncoding = Encoding.UTF8; 



      smtpClient.Timeout = 10000; 
      message.SubjectEncoding = Encoding.UTF8; 
      if (IsSSLfailed) 
      { 
       if (smtpClient.Port == 587) 
       { 
        smtpClient.Port = 465; 
       } 
       else if (smtpClient.Port == 465) 
       { 
        smtpClient.Port = 25; 
       } 
       else if (smtpClient.Port == 25) 
       { 
        smtpClient.Port = 2525; 
        allPortsFailed = true; 
       } 


      } 
      else 
      { 
       smtpClient.Port = 587; 
      } 
      smtpClient.EnableSsl = SSLEnabled; 
      if (!CertificateByPassed) 
      { 
       BypassCertificateError();  
      } 

      System.Net.NetworkCredential nc = new System.Net.NetworkCredential(from, Password); 
      smtpClient.Credentials = nc; 
      smtpClient.Send(message); 
      abc = true; 
     } 
     catch (System.Net.Mail.SmtpFailedRecipientException ex) 
     { 
      IsSSLfailed = true; 
      logger.ErrorFormat("Error occured in SendMail() method,CertificateBypassed:" + CertificateByPassed.ToString() + " SSLEnabled: " + SSLEnabled.ToString() + " smtp User:" + ((NetworkCredential)smtpClient.Credentials).UserName + " pwd:" + ((NetworkCredential)smtpClient.Credentials).Password + " smtpClient.DeliveryMethod:" + smtpClient.DeliveryMethod.ToString() + " smtpClient.EnableSsl:" + smtpClient.EnableSsl.ToString() + " smtpClient.Host:" + smtpClient.Host.ToString() + " smtpClient.Port:" + smtpClient.Port.ToString()+ " smtpClient.UseDefaultCredentials:" + smtpClient.UseDefaultCredentials.ToString() + " Detailed error:{0}{1}", Environment.NewLine, ex.Message.ToString()); 
      logger.ErrorFormat("Inner Exception", Environment.NewLine, ex.InnerException != null ? ex.InnerException.Message.ToString() : string.Empty); 

      if (!allPortsFailed) 
      { 
       goto again; 
      } 
      else if (!SSLEnabled) 
      { 
       SSLEnabled = true; 
       IsSSLfailed = false; 
       allPortsFailed = false; 
       goto again; 
      } 
      else if (!CertificateByPassed) 
      { 
       CertificateByPassed = true; 
       SSLEnabled = false; 
       IsSSLfailed = false; 
       allPortsFailed = false; 
       goto again; 

      } 
      this.upForm.Update(); 
      throw ex; 
     } 
     catch (System.Net.Mail.SmtpException ex) 
     { 
      IsSSLfailed = true; 
      logger.ErrorFormat("SendMail SmtpException,CertificateBypassed:" + CertificateByPassed.ToString() + " SSLEnabled: " + SSLEnabled.ToString() + " smtp User:" + ((NetworkCredential)smtpClient.Credentials).UserName + " pwd:" + ((NetworkCredential)smtpClient.Credentials).Password + " smtpClient.DeliveryMethod:" + smtpClient.DeliveryMethod.ToString() + " smtpClient.EnableSsl:" + smtpClient.EnableSsl.ToString() + " smtpClient.Host:" + smtpClient.Host.ToString() + " smtpClient.Port:" + smtpClient.Port.ToString() + " smtpClient.UseDefaultCredentials:" + smtpClient.UseDefaultCredentials.ToString() + " StatusCode:" + ex.StatusCode.ToString() + " " + smtpClient.Port.ToString(), Environment.NewLine, ex.Message.ToString()); 
      logger.ErrorFormat("SendMail Inner ExceptionSmtpException StatusCode:" + ex.StatusCode.ToString() + " " + smtpClient.Port.ToString(), Environment.NewLine, ex.InnerException != null ? ex.InnerException.Message.ToString() : string.Empty); 

      if (!allPortsFailed) 
      { 
       goto again; 
      } 
      else if (!SSLEnabled) 
      { 
       SSLEnabled = true; 
       IsSSLfailed = false; 
       allPortsFailed = false; 
       goto again; 
      } 
      else if (!CertificateByPassed) 
      { 
       CertificateByPassed = true; 
       SSLEnabled = false; 
       IsSSLfailed = false; 
       allPortsFailed = false; 
       goto again; 

      } 
      this.upForm.Update(); 
      throw ex; 
     } 
     catch (Exception ex) 
     { 
      IsSSLfailed = true; 
      logger.ErrorFormat("SendMail error sending mail,CertificateBypassed:" + CertificateByPassed.ToString() + " SSLEnabled: " + SSLEnabled.ToString() + " smtp User:" + ((NetworkCredential)smtpClient.Credentials).UserName + " pwd:" + ((NetworkCredential)smtpClient.Credentials).Password + " smtpClient.DeliveryMethod:" + smtpClient.DeliveryMethod.ToString() + " smtpClient.EnableSsl:" + smtpClient.EnableSsl.ToString() + " smtpClient.Host:" + smtpClient.Host.ToString() + " smtpClient.Port:" + smtpClient.Port.ToString() +" smtpClient.UseDefaultCredentials:" + smtpClient.UseDefaultCredentials.ToString() + " " + " " + smtpClient.Port.ToString(), Environment.NewLine, ex.Message.ToString()); 
      logger.ErrorFormat("SendMail error sending mail,CertificateBypassed:" + CertificateByPassed.ToString() + " SSLEnabled: " + SSLEnabled.ToString() + " smtp User:" + ((NetworkCredential)smtpClient.Credentials).UserName + " pwd:" + ((NetworkCredential)smtpClient.Credentials).Password + " smtpClient.DeliveryMethod:" + smtpClient.DeliveryMethod.ToString() + " smtpClient.EnableSsl:" + smtpClient.EnableSsl.ToString() + " smtpClient.Host:" + smtpClient.Host.ToString() + " smtpClient.Port:" + smtpClient.Port.ToString() + " smtpClient.UseDefaultCredentials:" + smtpClient.UseDefaultCredentials.ToString() + " " + " " + smtpClient.Port.ToString(), Environment.NewLine, ex.InnerException != null ? ex.InnerException.Message.ToString() : string.Empty); 

      if (!allPortsFailed) 
      { 
       goto again; 
      } 
      else if (!SSLEnabled) 
      { 
       SSLEnabled = true; 
       IsSSLfailed = false; 
       allPortsFailed = false; 
       goto again; 
      } 
      else if (!CertificateByPassed) 
      { 
       CertificateByPassed = true; 
       SSLEnabled = false; 
       IsSSLfailed = false; 
       allPortsFailed = false; 
       goto again; 

      } 
      this.upForm.Update(); 
      throw ex; 
     } 

     return abc; 

    } 
    public static void BypassCertificateError() 
    { 
     try 
     { 
      ServicePointManager.ServerCertificateValidationCallback += 

        delegate(
         Object sender1, 
         X509Certificate certificate, 
         X509Chain chain, 
         SslPolicyErrors sslPolicyErrors) 
        { 
         return true; 
        }; 
     } 
     catch (Exception ex) 
     { 

      throw ex; 
     } 
    } 

Как вы можете видеть из кода, я проверил все порты, которые используются для отправки почты. Этот же код работает с приложением, размещенным на окнах 7/8, но не работает в Windows 2008R2. Ниже приводится сообщение об ошибке я получаю

SendMail SmtpException, CertificateBypassed: Ложные SSLEnabled: Ложные smtpClient.DeliveryMethod: Сеть smtpClient.EnableSsl: Ложные smtpClient.Host:SMTP.GMAIL.COM smtpClient.Port: 587 smtpClient.UseDefaultCredentials: Ложные StatusCode: GeneralFailure

Ничто в innerexception.This же сообщение повторяется для всех ports.I посылаю это письмо через gmail.I've протестирована с MS Outlook на сервере с той же учетной записи GMAIL, и он работал правильно, поэтому я думаю, что ограничение брандмауэра - это n ot применимо в моем случае. Я также включил «Доступ для менее безопасного приложения» в настройках gmail.

ответ

0

McAfee блокировал почту attemps.Never сомневалась как я мог отправить почту от внешнего вида, но не смог этого сделать из моего code.Just включен w3wp.exe к исключению в массовых рассылках