2014-02-19 4 views
0

У меня есть метод для отправки почты из C#:Отправить по электронной почте от WebService

public static void SendEmailWebService(string asunto, string body, string to) 
{ 
    try 
    { // takes config from web.config 
     MailMessage mm = new MailMessage 
     { 
      From = new MailAddress(@"[email protected]", @"Notificacion"), 
      To = { new MailAddress(to) }, 
      Subject = asunto, 
      IsBodyHtml = true, 
      Body = body, 
      HeadersEncoding = System.Text.Encoding.UTF8, 
      SubjectEncoding = System.Text.Encoding.UTF8, 
      BodyEncoding = System.Text.Encoding.UTF8 
     }; 
     Smtp.Send(mm); 
    } 
    catch (Exception ex) 
    { 
     // Error 
    } 
} 

Если я называю этот метод нормально, это работает, но если я называю это от веб-сервиса, то он терпит неудачу.

В cathc, исключение составляет:

Этот почтовый сервер требует аутентификации при попытке отправить не локальный адрес электронной почты. Проверьте настройки вашего почтового клиента или , свяжитесь с вашим администратором, чтобы убедиться, что для этого сервера указан домен или адрес .

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

+0

См ссылке: http://stackoverflow.com/questions/4142654/send-email-by-webservice –

ответ

3

В сообщении об ошибке говорится, что ваш почтовый сервер требует аутентификации. Хотя Есть много способов для достижения этой цели, вы можете создать новый объект NetworkCredential и питания, который своим MailMessage назвал параметры:

public static void SendEmailWebService(string asunto, string body, string to) 
{ 
    try 
    { // takes config from web.config 
     MailMessage mm = new MailMessage 
     { 
      From = new MailAddress(@"[email protected]", @"Notificacion"), 
      To = { new MailAddress(to) }, 
      Subject = asunto, 
      IsBodyHtml = true, 
      Body = body, 
      HeadersEncoding = System.Text.Encoding.UTF8, 
      SubjectEncoding = System.Text.Encoding.UTF8, 
      BodyEncoding = System.Text.Encoding.UTF8, 
      UseDefaultCredentials = false, 
      Credentials = new NetworkCredential("username", "password") 
     }; 
     Smtp.Send(mm); 
    } 
    catch (Exception ex) 
    { 
     // Error 
    } 
} 

Если вы не хотите, чтобы добавить NetworkCredential в исходный код, который вы можете также настроить он из файла web.config

<system.net> 
    <mailSettings> 
    <smtp> 
     <network host="" port="" userName="" password=""/> 
    </smtp> 
    </mailSettings> 
</system.net> 
+1

Correct. Не имеет значения, используете ли вы веб-сервис или приложение winforms - это все о том, как размещается служба электронной почты и что требуется для аутентификации. –

+0

Вы, где правильно, у меня были настройки в webconfig, но по какой-то причине он остановился, и я думал, что это не работает для веб-службы, спасибо. –

Смежные вопросы