2016-05-18 8 views
1

Как я могу отправить адрес активации при регистрации новых пользователей на моем сайте с помощью asp.net C#? Я попытался шаги, описанные this link, но я столкнулся с этой ошибки:Asp.net отправка электронной почты

System.IO.IOException: Unable to read data from the transport connection: net_io_connectionclosed.

Есть ли решение этой проблемы или любым другим способом, чтобы отправить по электронной почте?

это мой код

using (MailMessage mm = new MailMessage("[email protected]", txtEmail.Text)) 
{ 
    mm.Subject = "Account Activation"; 
    string body = "Hello " + txtUsername.Text.Trim() + ","; 
    body += "<br /><br />Please click the following link to activate your account"; 
    body += "<br /><a href = '" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "'>Click here to activate your account.</a>"; 
    body += "<br /><br />Thanks"; 
    mm.Body = body; 
    mm.IsBodyHtml = true; 
    SmtpClient smtp = new SmtpClient(); 
    smtp.Host = "smtp.gmail.com"; 
    smtp.EnableSsl = true; 
    NetworkCredential NetworkCred = new NetworkCredential("[email protected]", "<password>"); 
    smtp.UseDefaultCredentials = true; 
    smtp.Credentials = NetworkCred; 
    smtp.Port = 587; 
    smtp.Send(mm); 
} 

Предлагаемый дубликат не решить эту проблему. Я уже использую порт 587.

+2

1) Вам нужно показать код. 2) Вам нужно поговорить с * ACTUAL EMAIL SERVER *, и сервер должен иметь возможность принимать от вас соединения. Основываясь на этой ошибке 'net_io_connectionclosed', это звучит так, как будто это * НЕ * происходит. – paulsm4

+4

Посмотрите на эту ссылку для комментариев в вашей ошибке «net_io_connectionclosed»: [SmtpException: не удалось прочитать данные из транспортного соединения: net \ _io \ _connectionclosed] (http://stackoverflow.com/questions/20228644/smtpexception-unable-to -read-data-from-the-transport-connection-net-io-connect) – paulsm4

+0

Я отредактировал сообщение, пожалуйста, посмотрите, было ли неправильно? @ paulsm4 – Bayan

ответ

1

Смотрите ниже код:

public static class email_utility 
{ 
    public static async Task<bool> send_email(this string body, string subject, string email, int try_count) 
    { 
     return await Task.Run(() => 
     { 
      var cli = new SmtpClient(); 
      using (var message = new MailMessage(config.sender_email, email)) 
      { 
       message.Subject = subject; 
       message.SubjectEncoding = UTF8Encoding.UTF8; 
       message.Body = body; 
       message.BodyEncoding = UTF8Encoding.UTF8; 
       message.DeliveryNotificationOptions = DeliveryNotificationOptions.Never; 
       for (var count = 0; count < try_count; ++count) 
       { 
        try 
        { 
         lock (config.sender_email) 
         { 
          cli.Send(message); 
          return true; 
         } 
        } 
        catch (SmtpFailedRecipientsException) 
        { 
         return false; 
        } 
        catch (SmtpException) 
        { 
         Thread.Sleep(config.send_timeout); 
        } 
       } 
       return false; 
      } 
     }); 
    } 
} 
1

Попробуйте, это работает отлично, и вы должны изменить только те поля, которые находятся перед варом = newSMTPCient SMTP.

using System.Net; 
using System.Net.Mail; 

var fromAddress = new MailAddress("[email protected]", "From Name"); 
var toAddress = new MailAddress("[email protected]", "To Name"); 
const string fromPassword = "fromPassword"; 
const string subject = "Subject"; 
const string body = "Body"; 

var smtp = new SmtpClient 
      { 
       Host = "smtp.gmail.com", 
       Port = 587, 
       EnableSsl = true, 
       DeliveryMethod = SmtpDeliveryMethod.Network, 
       UseDefaultCredentials = false, 
       Credentials = new NetworkCredential(fromAddress.Address, fromPassword) 
      }; 
using (var message = new MailMessage(fromAddress, toAddress) 
        { 
         Subject = subject, 
         Body = body 
        }) 
{ 
    smtp.Send(message); 
} 
+0

FYI, причина, по которой он отлично работает для вас (кроме того, что ваш код верен!): 1) вы используете GMail как ретранслятор электронной почты, 2) вы действительная учетная запись gmail, указанная вами в адресе «От», 3) Используется порт 587 и TLS зашифрованный SMTP. Первое, что нужно сделать OP, - это работать со своим сетевым администратором и просматривать возможные проблемы с конфигурацией/разрешениями с их «предпочтительным» почтовым сервером. – paulsm4

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