ASP.NET Exchange Server Отправить электронную почту C # - PullRequest
0 голосов
/ 08 октября 2011

Хорошо, как только я набрал это, я заметил различные темы, которые могут охватывать один и тот же вопрос.Я посетил большинство из них и не нашел прямого отношения к тому, что я спрашиваю, поэтому прошу терпения.

В любом случае, я создаю веб-приложение ASP.NET с использованием VS2010.Я пытаюсь отправить электронное письмо через SMTP, используя код:

        MailMessage mailMsg = new MailMessage();

        mailMsg.From = new MailAddress(fromEmail);
        mailMsg.To.Add(toEmail);
        mailMsg.Subject = emailSubj.ToString().Trim();
        mailMsg.Body = msgBody.ToString().Trim();
        SmtpClient smtpClient = new SmtpClient();
        smtpClient.Send(mailMsg);

, но каждый раз, когда я получаю следующее исключение (SMTPException и innerException говорит {"Unable to connect to the remote server"}

Я также определил следующее вweb.config:

<system.net>
  <mailSettings>
    <smtp>
      <network host="company.com"/>
    </smtp>
  </mailSettings>
</system.net>

Я пытаюсь отправить электронное письмо после отправки формы с идентификатором запроса, чтобы к нему можно было получить доступ через другие страницы (все работы, кромеmail). В компании мы используем сервер Exchange, и когда я захожу в свойства своего контакта, я получаю smtp:emailaddress@company.com

Так что же здесь делать? Я проверил Web Services ExchangeServiceBinding, но не смог найтинепосредственно что-то, чтобы помочь мне (поэтому любые ссылки приветствуются)

Большое спасибо, и с нетерпением ждем ваших ответов:)

Ответы [ 4 ]

2 голосов
/ 08 октября 2011

Попробуйте это автономное приложение на C # и посмотрите, работает ли имя хоста.В противном случае вам нужно связаться с администратором для правильного адреса.

      /// <summary>
      ///Method to Send an Email informing interested parties about the status of data extraction. 
      /// INPUTS : int iProcessIsSuccess : int informing about the success of the process. -1 means failure, 0 means partial success, 1 means success. 
      ///          string szLogDataToBeSent :  Log data to be sent incase process not successful.
      /// OUTPUTS : bool. True if success, else false.
      /// </summary>
      public bool SendEmailNotification(string szEmailAddressFileName, int iProcessIsSuccess, string szLogDataToBeSent)
      {
         bool bSuccess = false;

         //the the SMTP host.
         SmtpClient client = new SmtpClient();

         //SMTP Server
         client.Host = CommonVariables.EMAIL_SMTP_SERVER;

         //SMTP Credentials
         client.Credentials = new NetworkCredential(CommonVariables.EMAIL_USERNAME, CommonVariables.EMAIL_PASSWORD);

         //Creating a new mail.
         MailMessage mail = new MailMessage();

         //Filling 'From' Tab.
         mail.From = new MailAddress(CommonVariables.EMAIL_SENDERS_ADDRESS, CommonVariables.EMAIL_SENDERS_NAME);

         //Filling 'To' tab.
         List<EmailAddress> EmailAddressList = new List<EmailAddress>();
         try
         {
            using (System.IO.FileStream fs = new FileStream(szEmailAddressFileName, FileMode.Open))
            {
               XmlSerializer xs = new XmlSerializer(typeof(List<EmailAddress>));
                EmailAddressList = xs.Deserialize(fs) as List<EmailAddress>;
            }

            foreach (EmailAddress addr in EmailAddressList)
            {
               mail.To.Add(addr.RecepientEmailAddress);
            }
         }
         catch(Exception Ex)
         {
            mail.To.Add("DefautEmailId@company.com");
         }

         //Filling mail body.
         string szMailBody = "";
         string szMailSubject = "";

         if (1 == iProcessIsSuccess) //Success
         {
            szMailSubject = String.Format(CommonVariables.EMAIL_SUBJECT_BOILER_PLATE, "a SUCCESS");
            szMailBody = String.Format(CommonVariables.EMAIL_BODY_BOILER_PLATE, DateTime.UtcNow.ToString(), Environment.MachineName);
            szMailBody += "\r\n" + szMailSubject + "\r\n";

         }
         else if (0 == iProcessIsSuccess) //Partially Success
         {
            szMailSubject = String.Format(CommonVariables.EMAIL_SUBJECT_BOILER_PLATE, "a PARTIAL SUCCESS"); ;
            szMailBody = String.Format(CommonVariables.EMAIL_BODY_BOILER_PLATE, DateTime.UtcNow.ToString(), Environment.MachineName);
            szMailBody += "\r\n"+ szMailSubject + "\r\n";
            szMailBody += "\r\n" + "The Log data is as follows:\r\n";
            szMailBody += szLogDataToBeSent;
            mail.Priority = MailPriority.High;
         }
         else //Failed
         {
            szMailSubject = String.Format(CommonVariables.EMAIL_SUBJECT_BOILER_PLATE, "a FAILURE"); ;
            szMailBody = String.Format(CommonVariables.EMAIL_BODY_BOILER_PLATE, DateTime.UtcNow.ToString(), Environment.MachineName);
            szMailBody += "\r\n" + szMailSubject + "\r\n";
            szMailBody += "\r\n" + "The Log data is as follows:\r\n";
            szMailBody += szLogDataToBeSent;
            mail.Priority = MailPriority.High;
         }

         mail.Body = szMailBody;

         mail.Subject = szMailSubject;

         //Send Email.
         try
         {
            client.Send(mail);
            bSuccess = true;
         }
         catch (Exception Ex)
         {
            bSuccess = false;
         }

         // Clean up.
         mail.Dispose();


         return bSuccess;

      }

   }
1 голос
/ 08 октября 2011

Иногда SMTP-серверы отличаются от того, на что вы смотрите.например: моя электронная почта myemployee@mycompany.com, мой фактический SMTP-сервер - server1.mail.mycompany.com, server2.mail.mycompany.com. Это имя сервера, которое вы должны задать своему администратору

После этогоспросите вашего пользователя, если он определен в AD, или нет, и требуется ли аутентификация для каждой отправки SMTP?

Использует ли ваш хост обмена SMTP через TLS?AFAIK некоторые администраторы Exchange заявляют об использовании SMTP через SSL или TLS.Вы можете просмотреть документацию MSDN об отправке с использованием SMTP через SSL или TLS, получив текущий сертификат exchange / windows для своей электронной почты.

1 голос
/ 08 октября 2011

Поговорите со своим системным администратором и получите имя сервера Exchange, который необходимо настроить.

0 голосов
/ 03 мая 2015
      string _SMTP = WebConfigurationManager.AppSettings["SMTP"];
      Int32 _Port = Convert.ToInt16(WebConfigurationManager.AppSettings["Port"]);
      string _SMTPCredentialName = WebConfigurationManager.AppSettings["SMTPCredentialName"];
      string _SMTPCredentialPassword = WebConfigurationManager.AppSettings["SMTPCredentialPassword"];
      string _Body = null;

        System.Net.Mail.MailMessage _MailMessage = new System.Net.Mail.MailMessage();
        try
        {
            _MailMessage.To.Add(_RegUserEmail);
            _MailMessage.From = new System.Net.Mail.MailAddress(_FromEmail, _FromName);
            _MailMessage.Subject = _Subject;
            _Body = ReadTemplateRegistration(_RegisterName, _RegUserName, _RegUserEmail, _Pass, _Path);
            _MailMessage.BodyEncoding = System.Text.Encoding.GetEncoding("utf-8");

            AlternateView plainView = AlternateView.CreateAlternateViewFromString(System.Text.RegularExpressions.Regex.Replace(_Body, "<(.|\\n)*?>", string.Empty), null, "text/plain");
            AlternateView htmlView = AlternateView.CreateAlternateViewFromString(_Body, null, "text/html");

            _MailMessage.AlternateViews.Add(plainView);
            _MailMessage.AlternateViews.Add(htmlView);

            System.Net.Mail.SmtpClient mailClient = new System.Net.Mail.SmtpClient(_SMTP, _Port);

            System.Net.NetworkCredential basicAuthenticationInfo = new System.Net.NetworkCredential(_SMTPCredentialName, _SMTPCredentialPassword);

            mailClient.UseDefaultCredentials = false;

            mailClient.Credentials = basicAuthenticationInfo;

            _MailMessage.IsBodyHtml = true;

            mailClient.Send(_MailMessage);
        }
        catch (Exception ex)
        {

            return "ERROR" + ex.ToString();
        }

Это лучший способ отправки электронной почты с использованием C #, вы можете использовать этот метод для всей действующей почтовой системы, включая сервер обмена, pop3, smtp, Gmail, Hotmail Yahoo и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...