Я использую SmtpClient
библиотеку для отправки электронных писем, используя следующее:
SmtpClient client = new SmtpClient();
client.Host = "hostname";
client.Port = 465;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Credentials = new NetworkCredential("User", "Pass);
client.Send("from@hostname", "to@hostname", "Subject", "Body");
Код отлично работает в моей тестовой среде, но когда я использую производственные SMTP-серверы, код не работает с сообщением SmtpException
«Ошибка отправки почты». с внутренним IOException
«Невозможно прочитать данные из транспортного соединения: net_io_connectionclosed».
Я подтвердил, что брандмауэры не проблема. Порт между клиентом и сервером открывается нормально. Я не уверен, что еще может вызвать эту ошибку.
Для всех, кто наткнется на этот пост и ищет решение, и вы настроили SMTP sendgrid через Azure.
Имя пользователя - это не имя пользователя, которое вы указали при создании объекта sendgrid в лазурном. Чтобы найти свое имя пользователя;
Надеюсь это поможет!
источник
Измените порт с 465 на 587, и он будет работать.
источник
Возможно, вам также придется изменить настройку «менее безопасные приложения» в вашей учетной записи Gmail. EnableSsl, используйте порт 587 и включите «менее безопасные приложения». Если вы используете Google для менее безопасных приложений, есть справочные страницы Google, которые свяжут вас прямо со страницей вашей учетной записи. Это была моя проблема, но теперь все работает благодаря всем приведенным выше ответам.
источник
Я пробовал все ответы выше, но все еще получаю эту ошибку с учетной записью Office 365. Код, похоже, отлично работает с учетной записью Google и smtp.gmail.com при разрешении менее безопасных приложений.
Есть ли другие предложения, которые я мог бы попробовать?
Вот код, который я использую
ОБНОВЛЕНИЕ И КАК Я ЭТО РЕШИЛ:
Решил проблему, изменив Smtp Client на Mailkit. Клиент Smtp System.Net.Mail теперь не рекомендуется для использования Microsoft из-за проблем с безопасностью, и вместо этого вы должны использовать MailKit. Использование Mailkit давало мне более четкие сообщения об ошибках, которые я мог понять, обнаружив основную причину проблемы (проблема с лицензией). Вы можете получить Mailkit, загрузив его как пакет Nuget .
Для получения дополнительной информации прочтите документацию о Smtp Client: https://docs.microsoft.com/es-es/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2
Вот как я реализовал SmtpClient с MailKit
источник
Поддерживает ли ваша библиотека SMTP зашифрованное соединение? Почтовый сервер может ожидать безопасное соединение TLS и, следовательно, закрывать соединение при отсутствии подтверждения TLS.
источник
SmtpClient
библиотека .NET по умолчанию , она поддерживает encrytpion, сервер требует шифрования, и я установилclient.EnableSssl = true;
. Хотя я думаю, что собираюсь продолжить это с Wireshark.Если вы используете SMTP-сервер в том же самом поле, и ваш SMTP привязан к IP-адресу вместо «Any Assigned», это может привести к сбою, потому что он пытается использовать IP-адрес (например, 127.0.0.1), который в настоящее время не работает. на.
источник
Чтобы улучшить то, что jocull упомянул в комментарии, я делал все, что упоминалось в этой ветке, и вычеркивал ... потому что мой был в цикле, который нужно запускать снова и снова; после первого прохождения цикла иногда происходил сбой. Всегда работал с первого раза через петлю.
Для ясности: цикл включает создание SmtpClient, а затем выполнение .Send с правильными данными. SmtpClient был создан внутри блока try / catch, чтобы перехватывать ошибки и быть уверенным, что объект был уничтожен до конца цикла.
В моем случае решение заключалось в том, чтобы убедиться, что SmtpClient удаляется после каждого раза в цикле (либо с помощью оператора using (), либо путем удаления вручную). Даже если объект SmtpClient неявно уничтожается в цикле, .NET, похоже, оставляет вещи, лежащие без дела, чтобы вступить в конфликт со следующей попыткой.
источник
Измените номер порта на 587 с 465
источник
удаление
казалось, решил это для меня.
источник
В моем случае клиент забыл добавить новый IP-адрес в свои настройки SMTP. Откройте IIS 6.0 на сервере, который настраивает smtp, щелкните правой кнопкой мыши виртуальный сервер Smtp, выберите «Свойства», вкладку «Доступ», щелкните «Подключения», добавьте IP-адрес нового сервера. Затем нажмите Relay, также добавьте IP-адрес нового сервера. Это решило мою проблему.
источник
Попробуйте это: вот код, который я использую для отправки писем нескольким пользователям.
источник
SmtpClient
также одноразовый, поэтому его нужно завернуть вusing
блокВ случае, если все вышеперечисленные решения не работают для вас, попробуйте обновить следующий файл на своем сервере (я имею в виду публикацию, и сборка до этого была бы полезна).
После обновления вы увидите эту ошибку. как я решил с этим решением.
источник
Для Outlook используйте следующую настройку, которая не дает мне ошибки
Имя SMTP-сервера smtp-mail.outlook.com
SMTP-порт 587
источник
Эта ошибка является очень общей. Она может быть вызвана многими причинами, например, неправильным почтовым сервером. Некоторые хостинговые компании используют формат mail.domainname. Если вы просто используете доменное имя, это не сработает. проверьте учетные данные имя хоста имя пользователя пароль, если необходимо. Свяжитесь с хостинговой компанией.
источник
В моем случае IP-адрес веб-сервера был заблокирован на почтовом сервере, он должен быть разблокирован вашей хостинговой компанией и внесен в белый список. Также используйте порт 587.
источник
Если ваш почтовый сервер - Gmail (smtp.google.com), вы получите эту ошибку, когда достигнете лимита сообщений. Gmail позволяет отправлять по SMTP до 2000 сообщений в сутки.
источник
Я столкнулся с этим при использовании smtp.office365.com, используя порт 587 с SSL. Мне удалось войти в учетную запись с помощью portal.office.com и подтвердить, что у учетной записи есть лицензия. Но когда я запускал код для отправки электронных писем, я продолжал получать ошибку net_io_connectionclosed.
Мне потребовалось некоторое время, чтобы понять это, но администратор Exchange нашел виновника. Мы используем O365, но сервер Exchange был в гибридной среде. Хотя учетная запись, которую мы пытались использовать, была синхронизирована с Azure AD и имела действующую лицензию O365, по какой-то причине почтовый ящик все еще находился на гибридном сервере Exchange, а не на Exchange Online. После того, как администратор обмена использовал команду «Move-Mailbox» для перемещения почтового ящика с гибридного сервера обмена в O365, мы могли использовать код для отправки электронной почты с помощью o365.
источник
Подготовьтесь: 1. HostA - это виртуальный SMTP-сервер с портом по умолчанию 25 2. HostB - это рабочая станция, на которой я отправляю почту с помощью SmtpClient и имитирую нестабильную сеть. Я использую неуклюже
Случай 1 Учитывая, что HostB - 2008R2 Когда я отправляю электронное письмо. Затем возникает эта проблема.
Случай 2 Учитывая, что HostB - это версия 2012 года или выше. Затем письмо было разослано.
Заключение: эта основная причина связана с Windows Server 2008R2.
источник