Будучи менеджером коммерческого отдела небольшой торговой компании, я выполнял задачу по отправке нескольких сотен писем постоянным и потенциальным клиентам. Базу формировали из открытых источников мы сами, предложение было реально интересным целевой аудитории. Возникла «неожиданная» проблема – часть писем стала возвращаться. Кроме того, начали приходить сообщения с указаниями кодов ошибки SMTP. Своего IT-специалиста в штате у нас не было, потому разобраться с проблемой я решил самостоятельно. О результатах этой работы, причинах возникновения таких ошибок и методах их решения расскажу в этой статье.
Как избежать ошибок при составлении и отправке писем
Причинами возникновения ошибок и, как следствие, неполучения сообщений могут служить разные факторы. Одни из них связаны с неправильным составлением исходящих писем самим пользователем, другие относятся к более глобальным программным настройкам со стороны получателя.
Самый простой способ это понять – отправить тестовое сообщение на свой ящик. Затем следует протестировать его отправку и получение, используя разные внешние почтовые сервисы: gmail, yandex, mail, rambler и другие. Если сообщение получено, следует ответить на него, проверив корректность исполнения команды «RE» вашим почтовым сервером и принятие ответа условным отправителем.
Довольно часто проблемы с попаданием писем в папку «Спам» или программной блокировкой на стороне получателя лежат в неверном оформлении ключевых полей. Особенно это касается массовых рассылок коммерческого характера. Для отправки большого количества однотипных сообщений как минимум потребуется выполнение следующих параметров настройки:
- выделенный IP-адрес с целью исключить блокировку на стороне сервера-ретранслятора или почтовой программы конечного получателя;
- криптографические подписи DKIM и SPF, помогающие подтвердить подлинность домена и минимизировать количество писем, воспринимаемых как спам.
Важно! В случае несоблюдения этих элементарных правил вы рискуете не только тем, что конкретное письмо не будет доставлено адресату. При многократных попытках отправки письма в большинстве почтовых программ в блок-лист попадет вся корреспонденция, отправляемая с вашего email, и даже корпоративный домен (@domain.***).
Некорректное использование бота для отправки писем может привести к блокировке отправителя и другим нежелательным последствиям. Даже если информация, которую вы отправляете потенциальным клиентам, реально интересна им, система спам-фильтрации может воспринять данную рассылку как вредоносную. Чтобы избежать этого, лучше всего воспользоваться услугами специализированных компаний.
В моей практике был случай, когда никак не удавалось добиться получения моей электронной корреспонденции одним из сотрудников компании «Лукойл». Письма я отправлял самые простые, используя корпоративный ящик. Только после того, как мой респондент обратился в IT-службу своего предприятия, выяснилось, что данный адрес находится в блэк-листе. Попал он туда из-за каких-то ошибок, допущенных моим предшественником. Понадобилось больше недели, чтобы адрес включили в «белый список». Все это время письма, высылаемые с личного mail@yandex.ru, доходили без проблем.
Полезно: Почему не приходят письма с сайта. Пример частного случая.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Положительные и отрицательные сообщения SMTP-сервера
SMTP (Simple Mail Transfer Protocol) — это протокол, используемый большинством почтовых программ для отправки электронных сообщений в сети интернет. Некорректное взаимодействие между серверами, индивидуальные настройки на уровне программного обеспечения и многие другие причины приводят к появлению ошибок. В этом случае письма не доходят до получателей, возвращаются обратно или просто «пропадают». При возникновении таких ситуаций отправитель получает сообщение о наличии конкретной ошибки, отражающей SMTP-код последнего отклика сервера.
Данные коды являются трехзначными, каждая его часть несет в себе определенную информацию, расшифровывающую причину сбоя.
Первая цифра комбинации содержит информацию о качестве доставки:
- сообщение доставлено («SMTP OK»);
- возникла неизвестная или временная проблема («SMTP unknown»);
- критическая ошибка («SMTP error»).
Существует четыре варианта значений для первой цифры кода:
- 2xx – положительный результат, есть возможность передачи следующей команды;
- 3xx – отложенный результат, необходимо осуществление дополнительных действий;
- 4xx – сообщение не принято, но проблема носит временный характер, и запрос может быть повторен через какое-то время;
- 5xx – категорический отказ выполнения команды, отправка запроса со стороны передающего сервера в том же виде невозможна.
Вторая цифра в коде сообщает о категории ответа:
- 0 – синтаксические ошибки;
- 1 – ответы на запросы информации;
- 2 – ошибки канала передачи;
- 3 и 4 – неизвестный тип ошибки;
- 5 – статус почтовой системы.
Третья цифра дает более расширенную информацию о значении, указанном во второй цифре SMTP-ответа.
Помимо цифровой комбинации, SMTP-сообщение может содержать дополнительную текстовую информацию.
Полную информацию о кодах, их компоновке и значениях можно найти в спецификациях RFC 5321 и RFC 1893.
Следует учитывать, что SMTP-message говорит об успешном или неудачном варианте доставки именно на уровне взаимодействия почтовых серверов. Положительный ответ вовсе не означает, что ваше письмо не попало в папку «Спам».
Читайте также
Виды почтовых сервисов
На программном уровне существует несколько видов обработки электронной почтовой корреспонденции. К первой группе относятся виртуальные сервисы, доступные чаще всего в бесплатном исполнении через интернет-соединение на сайте почтового сервера. Это всем известные ресурсы:
- Gmail/Google Suite (почта от Google.com);
- Yandex.ru;
- Mail.ru;
- Rambler.ru и другие.
Более подробную информацию о значениях ответов SMTP можно получить на сайтах популярных почтовых сервисов:
- Коды ошибок SMTP почтового сервиса Gmail (Google Suite) (support.google.com)
- Создание и отправка писем на сервисе Яндекс
- Ошибки отправки писем при использовании сервера и сервиса Mail.ru
Ко второй группе относятся почтовые клиенты – программы, обладающие более расширенным функционалом, чем виртуальные сервисы. Наиболее популярными и универсальными почтовыми клиентами для Windows являются:
- Opera Mail;
- Mozilla Thunderbird;
- Koma-Mail;
- SeaMonkey;
- The Bat!;
- Microsoft Outlook.
Принципы работы почтовых клиентов несколько отличаются от процесса обработки корреспонденции виртуальными серверами. При отправке сообщения программа отсылает его не напрямую конечному получателю, а ретранслирует через сервер-релей. Этот процесс осуществляется чаще всего с использованием протокола SMTP, а получение корреспонденции обычно происходит с помощью IMAP или POP.
Коды SMTP-ответов определяются стандартом. Администратор почтового сервера может создать собственные настройки, в том числе и в части кодировки ответов сервера. Особенно это касается локальных почтовых программ, установленных непосредственно на сервере какой-нибудь компании.
О вариантах выбора и способах создания корпоративных почтовых сервисов более подробно можно прочитать здесь: Что такое почтовый сервер и зачем он нужен.
Классификация отрицательных SMTP-сообщений. Способы решения проблем
Я настроил свою почтовую программу – локальный клиент (MS Outlook и т.п.) или бесплатную почту на gmail или yandex. Начинаю отправлять письма, но сталкиваюсь с различными проблемами, связанными с тем, что мои респонденты не получают направленную им корреспонденцию. Соответственно, на мой ящик приходят сообщения об ошибках в виде кодировок SMTP.
Сразу опускаю тот пакет сообщений, которые начинаются с 2хх и 3хх, так как они содержат информацию о том, что задача получения письма уже решена положительно либо получит такой статус в ближайшее время. Более подробно рассмотрим некоторые виды кодированных сообщений, начинающихся с 4хх и 5хх, т.е. отклики SMTP-сервера, которые сообщают о наличии проблем.
Почтовый сервер сообщил об ошибке 421
Значение: Service Not Available. Сервер недоступен: канал связи будет закрыт.
Возможные причины |
Варианты решения |
Неправильно заданы параметры SMTP-соединения |
Необходимо перепроверить настройки |
Брандмауэр блокирует IP-адрес сервера электронной почты |
Необходимо создать новое правило в брандмауэре |
Блокируется трафик через порт 25 |
Попробуйте в настройках учетной записи электронной почты сменить номер порта SMTP на 465 |
Проблема использования VPN |
Необходимо, чтобы провайдер услуги занес ваш почтовый сервер в белый список адресов VPN |
Данная ошибка возникает наряду с грейлистингом (Greylisting – «Серый список») при интенсивном использовании бесплатного SMTP-сервера, который лимитирует количество отправляемых сообщений в единицу времени. Для решения этой проблемы можно воспользоваться высоконагруженным SMTP-сервером. Чаще всего эта услуга является платной.
Получено сообщение с кодом 451
Значение: Requested action aborted: local error in processing. Требуемое действие прерывалось: ошибка в обработке.
Возможные причины |
Варианты решения |
Превышено количество допустимых подключений или лимит обмена сообщениями за отрезок времени, письма ждут отправки в очереди |
В настройках сервера увеличить лимит или задать ограничение не на количество подключений, а на количество писем на одного пользователя. Накопившуюся очередь писем можно отправить повторно командой «force send» |
Неправильно настроены MX-записи домена, из-за чего происходит неправильная маршрутизация писем |
Проверьте логи, конфигурационные файлы, МХ-записи и разрешения, внесите корректировки |
Устранение проблем с доставкой электронной почты для кода ошибок 451 4.7.500–699 (ASxxx) в Exchange Online. Электронная почта из доменов onmicrosoft.com ограничена и фильтруется для предотвращения спама.
Необходимо добавить настраиваемый домен.
Ошибка почтового сервера 452
Значение: Insufficient system resources. Запрашиваемое действие не выполнено: недостаточно места в системе.
Возможные причины |
Варианты решения |
На сервере получателя закончилось место, поэтому письмо не доставляется |
Чтобы в этом убедиться, достаточно попробовать осуществить отправку письма с другого сервера |
В сообщении присутствует текст «Out of memory». Это значит, что недостаточно места на вашем сервере |
Необходимо проверить количество отправляемых писем в очереди, наличие свободного места на диске и объем доступной памяти |
В Microsoft Exchange Server есть специальный компонент мониторинга доступных ресурсов Back Pressure, который отслеживает свободное место на диске, на котором хранятся очереди транспортной службы Exchange. При возникновении такой ошибки можно сделать следующее:
- очистить диск от ненужных файлов;
- отключить мониторинг Back Pressure (не рекомендуется);
- перенести транспортную очередь на другой диск достаточного объема.
Сервер сообщил об ошибке SMTP 550
Значение: Mailbox unavailable. Требуемые действия не предприняты: электронный ящик недоступен
Возможные причины |
Варианты решения |
Неверно указан email-адрес получателя |
Необходимо связаться с адресатом альтернативным способом и уточнить правильность написания адреса, а также убедиться, что он является действующим |
Система заражена вирусом, осуществляющим массовую рассылку писем с вашего адреса |
Провести полную проверку специализированной антивирусной программой |
На стороне вашего интернет-провайдера установлены ограничения на отправку исходящих сообщений |
Необходимо связаться с поставщиком интернет-услуг и получить консультацию по устранению данной проблемы |
Сервер получателя не работает |
Отправьте тестовое письмо на другой почтовый сервер. Свяжитесь с получателем и сообщите о проблеме |
Данная ошибка может возникнуть из-за настроек программы Антиспам на стороне получателя. Проверьте корректность оформления вашего письма и другие параметры, по которым ваше сообщение может быть отнесено к нежелательным.
Почтовый сервер ответил ошибкой 571
Значение: SMTP Protocol Returned a Permanent Error 571 xxx@mail.ru prohibited. We do not relay/Spam message rejected. Ошибка на стороне получателя почты.
Возможные причины |
Варианты решения |
Ваш IP-адрес заблокирован на стороне конечного получателя спам-фильтром, антивирусом или файрволом |
Данную проблему может решить только администратор сети получателя, исключив ваши идентификационный данные из списка блокировки или добавив их в «белый список» |
Неверные учетные данные ретранслятора. У вас нет разрешения на отправку электронной почты через сервер, который находится между вами и получателем |
Обратитесь к администратору данного ресурса для изменения настроек |
У IP отправителя нет RDNS |
Проверьте настройки получения писем и разрешения для доменов-отправителей |
Как я уже писал выше, разные почтовые серверы накладывают свои ограничения на прием и отправку сообщений. Код 571 в Google Suite расшифровывается следующим образом: «Действующая политика запрещает отправку этого сообщения». Письмо может содержать защищенные или конфиденциальные данные – номера кредитных карт и т.п. Или политика администрирования запрещает отправку определенными пользователями сообщений адресатам вне установленной группы.
Сертификат почтового сервера недействителен
Обычно с таким сообщением приходится сталкиваться пользователям, у которых настроен Microsoft Exchange Server/MS Outlook. В данной ситуации самое простое решение – обновить сертификат.
Проверка доступности почтового сервера программным методом
В данной статье описаны лишь некоторые варианты ошибок, которые могут возникнуть при отправке электронных сообщений. Полный перечень достаточно объемен и во многом зависит от настроек конкретного сервера как на стороне отправителя, так и получателя. Некоторые из ошибок могут быть легко устранены обычным пользователем, другие под силу лишь опытным администраторам.
Одним из способов предупреждения появления ошибок является онлайн-проверка доступности почтового сервера с помощью бесплатных инструментов:
- https://mxtoolbox.com
- https://www.ultratools.com
- http://mail2web.com
Эти сервисы пробуют подключиться к почтовому серверу по SMTP, подтверждают, что у него есть запись обратной зоны DNS, и замеряют время отклика. С их помощью можно диагностировать некоторые ошибки службы почтовых серверов или проверить, не занесен ли данный ресурс в черные списки из-за спама.
Прочитав эту статью, обратите внимание на то, как настроен ваш почтовый сервер на получение сторонних писем по SMTP-протоколу. Быть может, в данный момент ваш антиспам или локальная политика фильтрации входящих сообщений блокирует получение очень важного и нужного для вас месседжа? Проверьте сами или обратитесь к системному администратору. Если ошибку с SMTP никак не удается решить, то попробуйте обратиться в службу поддержки почтового сервера.
I am trying to send email using the following code and get the error above.
There is two emails being sent the first one seems to get delivered fine, the code below doesn’t seem to work.
Can anyone help please?
using (var mail = new MailMessage(fromEmail.Trim(), ToEmail.Trim()))
{
mail.IsBodyHtml = true;
bodyText = bodyText.Replace("**Message**", Message);
// populate the message
mail.Subject = subject;
mail.Body = bodyText;
// send it
var smtpClient = new SmtpClient();
smtpClient.Send(mail);
}
The config:
<system.net>
<mailSettings>
<smtp from="test@foo.com">
<network defaultCredentials="true" port="25" host="127.0.0.1" password="" userName=""/>
</smtp>
</mailSettings>
</system.net>
asked Jul 12, 2012 at 18:34
2
instead of placing the MailMessage
as the subject of the using
block, try making the SmtpClient
the subject.
EDIT:
If your version of .net is < 4.0, you will need to do some finagling to ensure that the smtp client is disposed before attempting to send another message.
Assuming that the using
block also represents the body of an instance method, a naive test could be:
-
Create an instance of the containing class
-
Send the first message via a call to the above-referenced class method
-
Set the reference = null (in other words, ensure that the SmtpClient has actually been marked/disposed. You may want/need to manually dispose of the instance as a further check)
Jeff Tucker made the suggestion that you set the
SmtpClient.Timeout
value to2
— see his comment for more on this. -
Create a new instance of that same class
-
Send the second message
Following that (assuming that works), you can iterate the steps to refine and narrow the logic until you’re satisfied with it.
answered Jul 12, 2012 at 18:36
Josh EJosh E
7,3802 gold badges31 silver badges44 bronze badges
3
Протокол SMTP используется для передачи электронной почты по интернету. Из сообщений об ошибках этого протокола можно узнать, почему не удалось доставить письма. Если входящие или исходящие письма возвращаются, в сообщениях о недоставке можно найти коды ошибок SMTP, которые помогут установить причину этого.
Сообщения об ошибках SMTP имеют указанный ниже формат. Каждая последующая цифра кода ошибки и кода статуса несет более подробную информацию.
Код ответа | Код статуса | Текст ответа |
---|---|---|
xyz | x.y.z | Текстовое описание |
Ниже показан пример сообщения об ошибке SMTP. В нем указана причина ошибки и рекомендуемые действия по ее устранению.
Коды ответа
Коды ответа SMTP связаны с определенными компонентами почтового сервиса и могут указывать на различные проблемы, например:
- получатель не зарегистрирован в сервисе;
- сообщение помечено как спам, или в нем был обнаружен вирус;
- домен отправителя идентифицирован как источник спама;
- сообщение нарушает правила компании, например содержит номера кредитных карт или обсценную лексику.
Коды ответа, начинающиеся с цифр 4 и 5, свидетельствуют об ошибке, а остальные цифры указывают не ее тип. Если в начале кода стоит 4, это временная ошибка, которая не требует действий. Отправителю придется повторить попытку. Если код начинается с цифры 5, это свидетельствует о постоянной ошибке, которую нужно устранить.
Коды распространенных ошибок SMTP 400
Коды ошибки, которые начинаются на 4, означают временный сбой в работе сервера. Действие будет завершено при следующей попытке. Такие ошибки обычно связаны с сервером, получающим почту.
Код ошибки | Описание |
---|---|
421 | Сервис недоступен. Повторите попытку позже. |
450 | Действие не выполнено, так как недоступен почтовый ящик пользователя. |
451 | Письмо не отправлено из-за ошибки сервера. |
452 | Выполнение команды остановлено из-за нехватки места на сервере. |
455 | Сервер сейчас не может выполнить команду. |
Коды распространенных ошибок SMTP 500
Код ошибки | Описание |
---|---|
500 | Сервер не распознал команду из-за неправильного синтаксиса. |
501 | Неправильный синтаксис параметров или аргументов команды. |
502 | Команда не выполнена. |
503 | Неправильная последовательность команд на сервере. |
541 | Письмо отклонено по адресу получателя. |
550 | Команда не выполнена, так как недоступен почтовый ящик пользователя, или письмо отклонено сервером из-за подозрения на спам. |
551 | Почтовый ящик получателя недоступен на его сервере. |
552 | Письмо не отправлено из-за нехватки места в почтовом ящике получателя. |
553 | Выполнение команды остановлено, так как не найден почтовый ящик с указанным названием. |
554 | Действие не выполнено по неизвестной причине. |
После кода ошибки SMTP обычно указываются ещё три цифры. Это расширенный код статуса SMTP, который дает больше информации о причине сбоя. Вторая цифра в коде обозначает категорию ответа, а третья дает дополнительные сведения.
Код ответа 421 означает, что возникла временная ошибка в канале передачи, содержащем информационный запрос.
Код ответа | Описание |
---|---|
x0z | Синтаксические ошибки |
x1z | Ответы на запросы информации |
x2z | Ошибки канала передачи |
x3z | Неизвестная ошибка |
x4z | Неизвестная ошибка |
x5z | Статус почтовой системы |
Коды статуса
Первая цифра в коде статуса указывает на его класс, вторая – на предмет, а третья сообщает более подробные данные.
Код статуса 4.4.5 означает временную проблему с сетью или маршрутизацией, влияющую на статус протокола доставки почты.
Код статуса | Описание |
---|---|
x.0.z | Неизвестно |
x.1.z | Статус адресования |
x.2.z | Статус почтового ящика |
x.3.z | Статус почтовой системы |
x.5.z | Статус протокола доставки почты |
x.6.z | Статус содержимого сообщения или медиа |
x.7.z | Статус безопасности или соответствия правилам |
Текст ответа
Последний раздел в сообщении об ошибке SMTP, содержащий ее описание.
Статьи по теме
- Информация об ошибках протокола SMTP
- Стандарт RFC 5321 – протокол SMTP
- Стандарт RFC 1893 – расширенные коды статуса почтовой системы
Эта информация оказалась полезной?
Как можно улучшить эту статью?
На чтение 5 мин. Просмотров 2.3k. Опубликовано 31.07.2019
Слишком часто сообщения об ошибках непонятны. Эта страница будет вашим руководством по кодовым почтовым серверам, если ваша электронная почта не отправляется. Если вы получили сообщение об ошибке типа «Не удалось отправить ваше сообщение. Ошибка 421», каков ваш следующий шаг? Пусть эта страница будет вашим руководством к тому, что делать дальше.
Содержание
- Коды ошибок SMTP: значение за цифрами
- Получил SMTP 550: постоянный сбой одного или нескольких получателей?
- Список кодов ошибок SMTP (с пояснениями)
Коды ошибок SMTP: значение за цифрами
Почтовый сервер ответит на каждый запрос клиента (например, вашей почтовой программы) кодом возврата. Этот код состоит из трех чисел.
Первый обычно указывает, принял ли сервер команду и может ли она ее обработать. Пять возможных значений:
- 1 . Сервер принял команду, но пока не предпринимает никаких действий. Требуется подтверждающее сообщение. В настоящее время это не используется.
- 2 . Сервер успешно выполнил задание.
- 3 . Сервер понял запрос, но для его завершения требуется дополнительная информация.
- 4 . На сервере произошла временная ошибка. Если команда повторяется без каких-либо изменений, она может быть выполнена. Почтовые серверы могут использовать такие временные сбои, чтобы держать ненадежных отправителей в страхе.
- 5 . На сервере обнаружена ошибка.
Второй номер дает больше информации. Это шесть возможных значений:
- 0 : произошла синтаксическая ошибка.
- 1 . Обозначает информационный ответ, например, на запрос HELP.
- 2 . Относится к статусу подключения.
- 3 и 4 не указаны.
- 5 . Относится к состоянию почтовой системы в целом и почтового сервера в частности.
Последний номер является еще более конкретным и показывает больше градаций статуса пересылки почты.
Получил SMTP 550: постоянный сбой одного или нескольких получателей?
Наиболее распространенный код ошибки SMTP при отправке электронной почты – 550.
Ошибка SMTP 550 – это общее сообщение об ошибке. Это означает, что письмо не может быть доставлено.
Ошибка доставки SMTP 550 происходит по разным причинам; хотя сам код ошибки 550 ничего не говорит о причине сбоя, многие SMTP-сервер содержат пояснительное сообщение с кодом ошибки.
Зачастую электронное письмо не может быть доставлено, поскольку оно было заблокировано как спам, либо путем анализа его содержимого, либо потому, что отправитель – или сеть отправителя – указан в качестве вероятного источника спама в черном списке DNS. Некоторые почтовые серверы также проверяют ссылки на вредоносные программы и возвращают ошибку 550. К SMTP-ошибкам 550 относятся следующие коды:
- 550 5.7.1 . Служба недоступна: клиент [###] заблокирован с помощью ### (Exchange Server)
- 550 5.7.1: сообщение отклонено как спам с помощью фильтрации содержимого (Exchange Server)
- 550 Это сообщение было классифицировано как СПАМ и может быть не доставлено
- 550 Высокая вероятность спама (Gmail)
- 550 5.2.1 почта от отказавшегося спам-сайта
- 550 Ваше сообщение было отклонено, так как было обнаружено, что вы отправляете спам (Отправка из Rackspace)
- 550 Сообщение содержало небезопасный контент
Что ты можешь сделать? Если возможно, попробуйте связаться с получателем другими способами . Если сообщение об ошибке указывает на определенный черный список или фильтр спама, попробуйте связаться с администратором списка или фильтра . В противном случае вы всегда можете объяснить неудачную ситуацию своему провайдеру электронной почты . Они могут связаться со своим коллегой на приемной стороне и разобраться в ситуации.
Список кодов ошибок SMTP (с пояснениями)
Три числа ошибки SMTP дают нам подробный список кодов ответов сервера ESMTP/SMTP, как указано в RFC 821 и последующих расширениях:
- 211 – сообщение о состоянии системы.
- 214 . Далее следует справочное сообщение для читателя.
- 220 – служба SMTP готова.
- 221 . Служба закрывается.
- 250 . Запрошенное действие выполнено и выполнено. Лучшее сообщение из всех них.
- 251 . Получатель не является локальным для сервера, но сервер примет и перенаправит сообщение.
- 252 . Получатель не может быть VRFYed, но сервер принимает сообщение и пытается доставить.
- 354 – начинайте ввод сообщения и заканчивайте на. Это означает, что сервер готов принять само сообщение (после того, как вы сообщили ему, откуда оно и куда вы хотите отправиться).
- 421 . Служба недоступна, и соединение будет закрыто.
- 450 . Запрошенная команда не выполнена, поскольку почтовый ящик пользователя был недоступен (например, потому что он был заблокирован). Попробуйте позже.
- 451 . Команда была прервана из-за ошибки сервера. Не твоя вина. Возможно, дайте знать администратору.
- 452 . Команда была прервана, поскольку на сервере недостаточно системного хранилища.
- 455 . Сервер не может обработать команду в данный момент.
Следующие сообщения об ошибках (500-504) обычно говорят вам, что ваш почтовый клиент неисправен или, чаще всего, что ваша электронная почта не может быть доставлена по той или иной причине.
- 500 . Сервер не смог распознать команду из-за синтаксической ошибки.
- 501 . В аргументах команды обнаружена синтаксическая ошибка.
- 502 . Эта команда не реализована.
- 503 . Сервер обнаружил неверную последовательность команд.
- 504 . Параметр команды не реализован.
- 521 . Этот хост никогда не принимает почту; ответ фиктивного сервера.
- 541 . Сообщение не может быть доставлено по политическим причинам – обычно это спам-фильтр. (Только некоторые SMTP-серверы возвращают этот код ошибки.)
- 550 . Запрошенная команда не выполнена, поскольку почтовый ящик пользователя был недоступен (например, потому что он не был найден или команда была отклонена по соображениям политики).
- 551 . Получатель не является локальным для сервера. Затем сервер выдает пробный адрес для переадресации.
- 552 . Действие было прервано из-за превышения объема памяти.
- 553 . Команда была прервана, поскольку имя почтового ящика неверно.
- 554 . Транзакция не удалась. Во всем виновата погода.
- 555 . Сервер не распознает формат адреса электронной почты, поэтому доставка невозможна.
- 556 . Сообщение необходимо переслать, но принимающий сервер отклонит его.
296 Upvotes | 34 comments
The author voluntarily contributed this tutorial as a part of Pepipost Write to Contribute program.
Introduction
Facing an error which says «PHPMailer SMTP Error: Could not connect to SMTP host»?
Let’s solve it together.
PHPMailer is one of the most popular open-source written in PHP for sending emails. While it’s easy to deploy and start sending emails, but there is a common error which most of us might be facing.
In this document, I have tried sharing the answer for some of the most occurring errors with the PHPMailer:
#Error: PHPMailer: SMTP Error: Could Not Connect To SMTP Host
Depending on your situation, there can be multiple reasons for the occurrence of this error. So, please try to go through the different scenarios below and pick the one which is closest to your use case.
Possible Problem 1: Problem With The Latest Version Of PHP
I tried using PHPMailer in many projects in the past and it worked buttery smooth. But, when I updated the PHP version to 5.6, I started getting an SMTP connection error. Later, I observed that this problem is there with the latest version of the PHP.
I noticed that in the newer version, PHP has implemented stricter SSL behaviour which has caused this problem.
Here is a help doc on PHPMailer wiki which has a section around this.
And, here is the quick workaround mentioned in the above wiki, which will help you fix this problem:
$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) );
You can also change these settings globally, in the php.ini file but that’s a really bad idea because PHP has done these SSL level strictness for very good reasons only.
This solution should work fine with PHPMailer v5.2.10 and higher.
Possible Problem 2: Using Godaddy As The Hosting Provider
If you are running your code on Godaddy and trying to connect to some third-party SMTP provider like smtp.pepipost.com or smtp.sendgrid.com and getting some errors like this;
Mailer Error: SMTP connect() failed.
then nothing to really debug further, because it is because of a wried rule imposed by Godaddy on its user, where Godaddy has explicitly blocked the outgoing SMTP connection to ports 25, 587 and 465 to all external servers except for their own. Godaddy primarily wants their users to use their own SMTP instead of any third party SMTP, which is not at all an acceptable move for the developer community and many have has expressed their frustration in form of issues on StackOverflow too.
Your PHPmailer code might work perfectly fine on a local machine but the same code, when deployed on Godaddy server might not work and that’s all because of this silly rule implemented by Godaddy.
Here are few workarounds to avoid SMTP connection issues in Godaddy:
#1- Use Godaddy SMTP Instead Of Any Third Party:
In case you are sending 1-1 personalized emails, then using Godaddy SMTP makes sense. For that, just make the following changes in your PHPMailer code and you will be done;
$mail->isSMTP(); $mail->Host = 'localhost'; $mail->SMTPAuth = false; $mail->SMTPAutoTLS = false; $mail->Port = 25;
Note: Godaddy also restricts using any free domains like gmail, yahoo, hotmail, outlook, live, aim or msn as sender domain/From address. This is mostly because these domains have their own SPF and DKIM policies and some one can really forg the from address if allowed without having custom SPF and DKIM.
But, in case you want to send bulk/emails at scale then it becomes a bottleneck with high chances of your emails been landed in spam and your domain/IP address getting blacklisted. In such a case, I would suggest checking your email blacklist status and going with an option no #2.
#2- Use Email APIs Instead Of Any SMTP:
Godaddy can block the outgoing SMTP ports but can’t really block the outgoing HTTP ports (80, 8080) 😀 So, I would recommend using some good third party email service provider who provides email APIs to send emails. Most of these providers have code libraries/SDKs like PHPMailer which you can install and include in your code to start sending emails. Unlike using Godaddy’s local SMTP, using email APIs will give you a better control on your email deliverability.
Possible Problem 3: Getting SMTP Connection Failure On A Shared Hosting Provider
If you are running your code on a shared hosting provider and trying to connect to some third-party SMTP provider like smtp.pepipost.com or smtp.sendgrid.com and getting some errors like this;
SMTP connect() failed.
then, this is mostly because of the firewall rules on their infrastructure which explicitly blocks the outgoing SMTP connection to ports 25, 587 and 465 to all external servers. This rule is primarily to protect the infrastructure from sending spam, but also a really frustrating situation for developers like us.
The only solution to this is, same as I suggested above in the Godaddy section (Use Email APIs instead of any SMTP) or contact the hosting provider to allow connection to SMTP ports.
How to check whether your outgoing port (25, 587 or 465) is really blocked or not?
1. Trying doing telnet
Using telnet command you can actually test whether the port is opened or not.
//Type the following command to see if Port 25 is blocked on your network. telnet pepipost.com 25
If Port 25 is not blocked, you will get a successful 220 response (text may vary).
Trying 202.162.247.93... Connected to pepipost.com. Escape character is '^]'. 220 pepipost.com ESMTP Postfix
If Port 25 is blocked, you will get a connection error or no response at all.
Trying 202.162.247.93... telnet: connect to address 202.162.247.93: Connection refused telnet: Unable to connect to remote host
2. Use outPorts
outPorts is a very good open-source on GitHub to which scans all your ports and gives the result.
Once outPorts is installed, you can type the following command in the terminal to check port 25 connectivity:
outPorts 25
Possible Problem 4: SELinux Blocking Issue
In case you are some error like the following:
SMTP -> ERROR: Failed to connect to server: Permission denied (13)
then, the most probably your SELinux is preventing PHP or the webserver from sending emails.
This problem is mostly with Linux based machines like RedHat, Fedora, Centos, etc.
How to debug whether it’s really the SELinux issue which is blocking these SMTP connections?
You can use the getsebool command to check whether the httpd daemon is allowed to make an SMTP connection over the network to send an email.
getsebool httpd_can_sendmail getsebool httpd_can_network_connect
This command will return a boolean on or off. If it’s disabled, then you will see an output like this;
getsebool: SELinux is disabled
We can turn it on using the following command:
sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1
If you are running your code on a shared hosting provider and trying to connect to some third-party SMTP provider like smtp.pepipost.com or smtp.sendgrid.com and getting some errors like this.
Possible Problem 5: PHPMailer SMTP Connection Failed Because Of SSL Support Issue With PHP
There are many popular cases for the failure of SMTP connection in PHPMailer and lack of SSL is one of that too.
There might be a case, that the Open SSL extension is not enabled in your php.ini which is creating the connection problem.
So, once you enable the extension=php_openssl.dll in the ini file.
Enable debug output, so that you can really see that SSL is the actual problem or not. PHPMailer gives a functionality by which you can get detailed logs of the SMTP connection.
You can enable this functionality by including the following code in your script;
$mail->SMTPDebug = 2;
By setting the value of SMTPDebug property to 2, you will be actually getting both server and client level transcripts.
For more details on the other parameter values, please refer the official PHPMailer Wiki.
In case you are using Godaddy hosting, then just enabling SSL might not fix your problem. Because there are other serious challenges with Godaddy which you can refer in the above godaddy section.
Possible Problem 6: PHPMailer Unable To Connect To SMTP Because Of The IPv6 Blocking Issue
There are some set of newer hosting companies which includes DigitalOcean provides IPv6 connectivity but explicitly blocks outgoing SMTP connections over IPv6 but allow the same over IPv4.
While this is not a major issue, because this can be workaround by setting the host property to an IPv4 address using the gethostbyname function.
$mail->Host = gethostbyname('smtp.pepipost.com');
Note: In this approach, you might face a certificate name check issue but that can be workaround by disabling the check, in SMTPOptions.
But, this is mostly an extreme case, most of the times it’s the port block issue by the provider, like DigitalOcean in this case.
So, it is important to first get confirmed whether the port is really unlocked or not, before digging further into the solution.
Possible Problem 7: Getting The Error «Could Not Instantiate Mail Function»
This issue happens primarily when your PHP installation is not configured correctly to call the mail() function. In this case, it is important to check the sendmail_path in your php.ini file. Ideally, your sendmail_path should point to the sendmail binary (usually the default path is /usr/sbin/sendmail).
Note: In case of Ubuntu/Debian OS, you might be having multiple .ini files (under the path /etc/php5/mods-available), so please ensure that you are making the changes at all the appropriate places.
If this configuration problem is not the case, then try further debugging and check whether you have a local mail server installed and configured properly or not. You can install any good mail server like Postfix.
Note: In case all of the above things are properly in place and you’re still getting this error of «Could not instantiate mail function», then try to see if you are getting more details of the error. If you see some message like «More than one from person» in the error message then it means that in php.ini the sendmail_path property already contains a from -f parameter and your code is also trying to add a second envelope from, which is actually not allowed.
What Is The Use Of IsSMTP()?
isSMTP() is been used when you want to tell PHPMailer class to use the custom SMTP configuration defined instead of the local mail server.
Here is a code snippet of how it looks like;
require 'class.phpmailer.php'; // path to the PHPMailer class require 'class.smtp.php'; $mail = new PHPMailer(); $mail->IsSMTP(); // telling the class to use SMTP $mail->SMTPDebug = 2; $mail->Mailer = "smtp"; $mail->Host = "ssl://smtp.gmail.com"; $mail->Port = 587; $mail->SMTPAuth = true; // turn on SMTP authentication $mail->Username = "[email protected]"; // SMTP username $mail->Password = "mypasswword"; // SMTP password $Mail->Priority = 1; $mail->AddAddress("[email protected]","Name"); $mail->SetFrom($visitor_email, $name); $mail->AddReplyTo($visitor_email,$name); $mail->Subject = "This is a Test Message"; $mail->Body = $user_message; $mail->WordWrap = 50; if(!$mail->Send()) { echo 'Message was not sent.'; echo 'Mailer error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent.'; }
Many times developers get the below error:
"SMTP -> ERROR: Failed to connect to server: Connection timed out (110). SMTP Connect() failed. Message was not sent. Mailer error: SMTP Connect() failed."
If you’re constantly getting the above error message, then just try identifying the problem as stated in the above sections.
Если вы не используете сервис рассылки для отправки писем, они могут не попасть во «Входящие» получателей из-за SMTP ошибок. Отправляйте письма через SMTP сервис SendPulse. Мы предлагаем чистые IP адреса, надежные серверы, SPF и DKIM записи, чтобы повысить доставляемость ваших рассылок. А узнать о значениях и причинах SMTP ошибок вы можете в этой статье.
Код ошибки — это зашифрованная комбинация чисел, которая требует объяснения. Чтобы понять, почему ваше письмо не может быть отправлено, обязательно нужно знать значение кода ошибки.
Код SMTP ошибок состоит из 3 цифр, каждая из которых имеет свое значение.
Первая цифра указывает на то, был ли принят и обработан ваш запрос.
Существует 5 значений для первой цифры кода SMTP ошибки
- Сервер принял команду, но не предпринял никаких действий, так как ожидает подтверждения на выполнение запрашиваемых действий.
- Действие было успешно выполнено и сервер готов принимать новую команду.
- Сервер принял команду, но для её завершения требуется дополнительная информация.
- Возник временный сбой. Если не последует изменений при повторении команды, попробуйте ещё раз.
- Сервер столкнулся с неустранимой ошибкой, ваша команда не будет обработана.
Если код начинается с цифры 2 — ваша команда успешно обработана, если с 4 — есть временный сбой, с 5 — постоянный сбой. В последнем случае ваши письма не будут отправлены, пока вы не устраните ошибку.
Существует 4 значения для второй цифры кода SMTP ошибки
- Синтаксическая ошибка.
- Информационный ответ (запрос информации, например, помощь).
- Обозначает состояние подключения.
- Обозначает состояние почтового сервера или почтовой системы.
Последняя цифра в коде несет более подробную информацию о статусе доставки.
Самые важные коды SMTP ошибок
214 — Ответ на запрос информации о том, как работать с сервером, описание нестандартных команд, полезное только для человека.
220 — Готов к работе.
221 — Служба обслуживает заключительный канал передачи данных.
250 — Запрашиваемое почтовое действие успешно завершено.
251 — Получатель не местный, но сервер переотправит письмо.
252 — Почтовый ящик не может быть верифицирован сервером, но он будет осуществлять попытки доставить письмо.
354 — Начинайте ввод сообщения. Оно должно заканчиваться точкой на новой строке.
421 — Сервер недоступен, канал связи будет закрыт.
422 — Размер письма превышает лимит входящих сообщений получателя.
442 — Почтовый сервер начал доставлять письмо, но подключение было прервано во время передачи.
450 — Запрашиваемое действие не было выполнено, почтовый ящик был недоступен. Он может быть временно занят.
451 — Запрашиваемое действие было прервано, локальная ошибка во время обработки.
452 — Запрашиваемое действие не выполнено: недостаточно места в системе.
500 — Синтаксическая ошибка, потому что серверу не удалось распознать команду. Это может быть слишком длинная командная строка.
501 — Синтаксическая ошибка в параметрах или аргументах. Это может быть неправильный адрес электронной почты.
502 — Команда нереализована. Она валидна, но не активирована вашим провайдером.
503 — Неверная последовательность команд, почтовый сервер требует аутентификацию.
504 — Параметр команды не реализован.
510 — Неверный адрес электронной почты. Адреса ваших получателей могут содержать ошибки.
512 — Домен получателя не найден или не существует.
513 — Неверный адрес электронной почты. Может содержать ошибки, или сервер требует аутентификацию.
515 — Неверный адрес электронной почты.
521 — Почтовый ящик не принимает письма.
523 — Размер письма превышает лимит почтового ящика получателя.
530 — Требуется аутентификация, или сервер получателя добавил вас в черный список. Это может быть и неверный адрес электронной почты.
531 — Почтовая система заполнена.
534 — Недостаточно надежный механизм аутентификации.
535 — Ошибки аутентификации.
541 — Почтовый ящик получателя отметил ваше письмо как спам.
550 — Запрашиваемые действия не выполнены, потому что почтовый ящик недоступен. Команда могла быть отклонена политикой безопасности, или почтовый ящик не был найден.
551 — Нелокальный пользователь или неверный адрес электронной почты.
552 — Запрашиваемое действие прервано из-за превышения дискового пространства.
553 — Запрашиваемое действие не выполнено, возможна синтаксическая ошибка в имени почтового ящика.
554 — Передача данных не удалась. Так случается, если сервер получателя считает ваше письмо спамом, находит ваш IP адрес в черном списке, или сам добавляет его в свой черный список.
555 — Адрес электронной почты не был опознан сервером.
SMTP для email рассылок
Забудьте об SMTP ошибках! Мы позаботимся о технической стороне рассылок, чтобы вы могли сконцентрироваться на маркетинговой стратегии.
- Выделенный IP адрес не позволит попадать в черные списки, ведь репутация отправителя будет зависеть только от вас.
- Криптографические подписи DKIM и SPF помогут подтвердить подлинность вашего домена и минимизируют количество писем, попадающих в спам.
Мы оставляем свои подписи на всех исходящих сообщениях по умолчанию, что улучшает доставляемость писем.
Отправить рассылку
Обновлено: 02.12.2020
На большинстве сайтов email-сообщения используются для отправки пользователям различных уведомлений, иногда с их отправкой возникают проблемы. Если вы не собираетесь рассылать откровенный СПАМ, то в этой статье разберем некоторые проблемы, возникающие при отправке почты с сайта и их решения.
1) Для начала необходимо убедиться, что отправка почты вообще работает, для этого создайте на сервере файл testmail.php со следующим содержимым:
<? $mailto = "your-email@mail.ru"; //ваша эл. почта mail($mailto, "Тестовое письмо", "Sendmail работает!") or die("Ошибка"); echo "Проверь почту"; ?>
Проверьте пришло ли письмо, не забудьте заглянуть в папку Спам.
Если при отправке выдало сообщение «Ошибка», то есть две основные причины:
-
на сервере заблокирована/отключена функция mail (для устранения обратитесь в поддержку хостинг-провайдера). Чаще всего на shared-хостинге хостинг-провайдер ограничивает отправку почты в случае обнаружения вредоносного ПО.
-
почтовый сервер отсутствует или не настроен. Например, на VPS сервере почтовый сервер может быть не установлен.
2) Сообщения отправляются, но попадают в Спам.
Для решения этой проблемы необходимо настроить подпись DKIM, добавить SPF и PTR записи. Для проверки корректности настройки воспользуйтесь сервисом Mailtester. Ваша цель — получить оценку от сервиса 10/10, но даже это не гарантирует 100% доставки писем.
3) Проверьте очередь отправки сообщений и логи почтового сервера, возможно там вы найдете для себя некоторые подсказки относительно проблем с доставкой ваших сообщений адресатам. Вот некоторые из них:
Ошибка | Возможные причины |
---|---|
Unrouteable address | Попытка отправить сообщение на несуществующий адрес. Часто наблюдается при неверном конфигурировании почтового сервера, например при отправке писем на локальный адрес и использовании внешних сервисов почты для домена, т.к. локальный адрес не существует на почтовом сервере, а заведен на внешнем сервисе |
554 Client host blocked retry timeout exceeded |
— Порт SMTP для отправки сообщений заблокирован — Проблемы со спам-фильтром — Почтовый ящик заполнен |
550 No such user! 550 Message was not accepted — invalid mailbox. Local mailbox email@example.ru is unavailable: user not found 550 The email account that you tried to reach does not exist. 550 … User unknown 550 Recipient unknown 501 Bad recipient address syntax |
Письмо отправлено на несуществующий адрес. Проверьте корректность указанного адреса, уточните адрес у получателя. 501 Bad recipient address syntax |
552 Mailbox size exceeded 552 Mailbox size limit exceeded |
Почтовый ящик получателя переполнен. Скорее всего получатель редко открывает почту и ящик забился рассылками |
550 Message was not accepted — invalid mailbox. Local mailbox email@example.ru is unavailable: account is disabled 550 Message was not accepted — invalid mailbox. Local mailbox email@example.ru is unavailable: user is terminated Policy rejection on the target address |
Возможная причина — блокировка учетной записи получателя за нарушение правил почтового сервиса |
550 relay not permitted | Не корректно настроены MX-записи для домена |
550 Host in a black list SMTP error from remote mail server after pipelined sending data block: 550 5.7.0 Blocked |
Ваш IP попал в черный список, для устранения необходимо связаться с поддержкой почтового сервиса, с которого приходит данный отбойник, с просьбой убрать адрес из черного списка. |
550 Requested action not taken: mailbox unavailable | Общий отбойник, который может говорить как о том, что письмо отправляется на не корректный адрес, так и о ошибке во время отправки из-за разрыва соединения, или о том, что принимающий сервер отказывается принимать сообщения с вашего ящика. Повторная попытка отправки письма может быть удачной. |
hi, i’m new to php and i have been trying to send e-mail through php, phpmailer is the only class i find most recommended by most of the developers. i tried almost all solutions for my error. i cant find the fix. I have tried the link below, but didn’t get what to do, and googled for the solution, couldn’t find any, which works for me. tried almost all solutions, but it keeps showing me the same error.
Message could not be sent.Mailer Error:SMTP connect() failed.https://github.com/PHPMailer/PHPMailer/wiki/TroubleshootingAvailable
tried the above link, as im new to php, im stuck.
fr all smtpdebug: 1,2,3,4, its giving same error… but php mail() function is working fine.
and our hosting provider says this…
We have the following list of ports open on our shared hosting plans:
HTTP/HTTPS — 80/443
GMail — 465/587/995/993
TOMCAT — 8080
SMTP/IMAP/POP — 25/143/110
here is the code im using. please help me to resolve the error. thanx in advance.
<?php require 'phpmailer/PHPMailerAutoload.php'; $mail = new PHPMailer; //$mail->SMTPDebug = 3; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'userid@gmail.com'; // SMTP username $mail->Password = 'secret'; // SMTP password $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted $mail->Port = 587; // TCP port to connect to $mail->From = userid@gmail.com'; $mail->FromName = 'Mailer'; //$mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient $mail->addAddress('name@mysite.com'); // Name is optional //$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments //$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Here is the subject'; $mail->Body = 'This is the HTML message body <b>in bold!</b>'; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; } ?>