Отправка почты из gmail SMTP С# Время ожидания подключения

Я пытаюсь отправить электронное письмо через С# из учетной записи gmail для регистрации учетной записи для моего сайта.

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

Это то, что я включил в свой файл 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);
}

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

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

Ответ 1

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

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

Ответ 2

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");

Ответ 3

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

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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);