it-swarm.com.ru

Отправка почты из gmail SMTP C # Тайм-аут соединения

Я пытался отправить электронное письмо через C # из учетной записи Gmail для регистрации учетной записи на моем веб-сайте. 

Я пробовал несколько способов, но продолжает появляться одно и то же исключение: Исключение System.Net.Mail.Smtp - истекло время ожидания соединения.

Вот что я включил в мой файл Web.config:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="Network" 
              from="Writely &lt;[email protected]&gt;">
            <network Host="smtp.gmail.com" 
                     port="465" 
                     enableSsl="true" 
                     defaultCredentials="false" 
                     userName="[email protected]" 
                     password="******" />
        </smtp>
    </mailSettings>
</system.net>

где writely - это имя моего веб-сайта, а [email protected] - учетная запись, с которой я хочу отправить электронное письмо. 

Затем в моем контроллере учетных записей, когда я соединяюсь со своей базой данных и сохраняю пользователя в своей таблице, я создаю свой объект MailMessage и пытаюсь создать такую ​​же почту:

using (DBConnection conn = new DBConnection())
{
       conn.UserInfoes.Add(userInfo);
       conn.SaveChanges();

       MailMessage mail = new MailMessage();
       mail.From = new MailAddress("[email protected]");
       mail.To.Add("[email protected]");
       mail.Subject = "Welcome to Writely";
       mail.Body = "Test content";

       SmtpClient smtp = new SmtpClient();
       smtp.Send(mail);
}

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

Спасибо за вашу помощь :)

10
Bernice

Вы должны сообщить SmtpClient, какие настройки использовать. Он автоматически не считывает эту информацию из файла Web.Config.

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 465);
smtp.Credentials = new NetworkCredential("[email protected]", "***");
smtp.EnableSsl = true;
smtp.Send(mail);
7
Jason Watkins

gmail требует аутентификации:

Outgoing Mail (SMTP) Server
requires TLS or SSL: smtp.gmail.com (use authentication)
Use Authentication: Yes
Port for TLS/STARTTLS: 587
Port for SSL: 465

так что я сделал, это

var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("[email protected]", "mypwd"),
            EnableSsl = true
        };
        client.Send("[email protected]", "[email protected]", "Welcome to Writely", "Test content");
4
Crudler

У меня была точно такая же проблема, и она решена после переключения номера порта с 465 на 587. 

У меня была проблема с «подтверждением по электронной почте», «восстановлением пароля» и «отправкой электронной почты», и теперь все 3 проблемы решены :). 

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

Спасибо всем за вашу помощь.

3
Auguste

Как я уже ответил здесь .

Эта проблема также может быть вызвана настройкой безопасности в вашей учетной записи Gmail.

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

Это сработало для меня, надеюсь, это поможет ..

1
dinhokz

Пример в веб-формах asp.net/sharepoint

StringBuilder Body = new StringBuilder();
Body.Append("Your text");

String FromEmail = "you email";
String DisplayNameFromEmailMedico = "display when you receive email";
MailMessage message = new MailMessage();
message.From = new MailAddress(FromEmail, DisplayNameFromEmailMedico);
message.To.Add(new MailAddress("[email protected]"));
message.Subject = "subject that print in email";
message.IsBodyHtml = true;
message.Body = Body.ToString();
SmtpClient client = new SmtpClient();

NetworkCredential myCreds = new NetworkCredential("[email protected]", "key from email smtp", "");
client.EnableSsl = true;
client.Credentials = myCreds;
client.Send(message);
0
Rafael Estevão