Будучи менеджером коммерческого отдела небольшой торговой компании, я выполнял задачу по отправке нескольких сотен писем постоянным и потенциальным клиентам. Базу формировали из открытых источников мы сами, предложение было реально интересным целевой аудитории. Возникла «неожиданная» проблема – часть писем стала возвращаться. Кроме того, начали приходить сообщения с указаниями кодов ошибки 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 никак не удается решить, то попробуйте обратиться в службу поддержки почтового сервера.
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From: $namen E-Mail: $emailn Message:n $message";
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $from)) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
Я пытался создать простую почтовую форму. Сама форма находится на моей странице index.html
, но она отправляется на отдельную страницу «Спасибо за вашу публикацию», thankyou.php
, куда встроен указанный выше код PHP. Код отправляет отлично, но никогда не отправляет электронное письмо. пожалуйста помоги.
Ответ 1
Хотя есть части этого ответа, которые относятся только к использованию самой функции mail()
, многие из этих шагов по устранению неполадок могут быть применены к любой почтовой системе PHP.
Существует множество причин, по которым ваш скрипт не отправляет электронные письма. Это трудно диагностировать, если нет явной синтаксической ошибки. Без него вам нужно пройти через контрольный список ниже, чтобы найти возможные потенциальные подводные камни, с которыми вы можете столкнуться.
Убедитесь, что отчеты об ошибках включены и настроены для отчета обо всех ошибках
Отчеты об ошибках важны для устранения ошибок в вашем коде и общих ошибок, с которыми сталкивается PHP. Отчеты об ошибках должны быть включены для получения этих ошибок. Размещение следующего кода в верхней части ваших файлов PHP (или в главном файле конфигурации) включит создание отчетов об ошибках.
error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");
Смотрите этот ответ для более подробной информации об этом.
Убедитесь, что функция mail()
вызвана
Это может показаться глупым, но распространенная ошибка заключается в том, чтобы забыть фактически поместить функцию mail()
в ваш код. Убедитесь, что он там и не закомментирован.
Убедитесь, что функция mail()
вызывается правильно
bool mail (строка $ to, строка $ subject, строка $ message [, строка $ extra_headers [, строка $ extra_parameters]])
Функция mail принимает три обязательных параметра и, необязательно, четвертый и пятый. Если ваш вызов mail()
не имеет хотя бы трех параметров, он потерпит неудачу.
Если ваш вызов mail()
не имеет правильных параметров в правильном порядке, он также не будет выполнен.
Проверьте почтовые журналы сервера
Ваш веб-сервер должен регистрировать все попытки отправить электронную почту через него. Расположение этих журналов может отличаться (вам может потребоваться узнать у администратора сервера, где они находятся), но их обычно можно найти в корневом каталоге пользователя в разделе logs
. Внутри будут сообщения об ошибках, о которых сообщал сервер, если таковые имеются, связанные с вашими попытками отправить электронную почту.
Проверьте, нет ли соединения с портом
Блокировка порта является очень распространенной проблемой, с которой сталкивается большинство разработчиков при интеграции своего кода для доставки электронной почты с использованием SMTP. И это можно легко отследить в почтовых журналах сервера (местоположение сервера почтового журнала может варьироваться от сервера к серверу, как объяснено выше). Если вы находитесь на сервере общего хостинга, порты 25 и 587 остаются заблокированными по умолчанию. Этот блок специально сделан вашим хостинг-провайдером. Это верно даже для некоторых выделенных серверов. Когда эти порты заблокированы, попробуйте подключиться через порт 2525. Если вы обнаружите, что этот порт также заблокирован, то единственное решение — связаться с вашим хостинг-провайдером, чтобы разблокировать эти порты.
Большинство провайдеров хостинга блокируют эти порты электронной почты, чтобы защитить свою сеть от отправки спам-писем.
Используйте порты 25 или 587 для простых соединений /TLS и порт 465 для соединений SSL. Для большинства пользователей предлагается использовать порт 587, чтобы избежать ограничений скорости, установленных некоторыми хостинг-провайдерами.
Не используйте оператор подавления ошибок
Когда перед оператором подавления ошибок @
добавляется выражение в PHP, любые сообщения об ошибках, которые могут быть сгенерированы этим выражением, будут игнорироваться. Существуют обстоятельства, когда использование этого оператора необходимо, но отправка почты не входит в их число.
Если ваш код содержит @mail(...)
то вы можете скрывать важные сообщения об ошибках, которые помогут вам отладить это. Удалите @
и посмотрите, нет ли ошибок.
Рекомендуется только тогда, когда вы проверяете с помощью error_get_last()
сразу после конкретных сбоев.
Проверьте mail()
возвращаемое значение
Функция mail()
:
Возвращает
TRUE
если почта была успешно принята для доставки,FALSE
противном случае. Важно отметить, что только то, что почта была принята для доставки, НЕ означает, что почта действительно достигнет назначенного пункта назначения.
Это важно отметить, потому что:
- Если вы получаете
FALSE
возвращаемое значение, вы знаете, что ошибка заключается в том, что ваш сервер принимает вашу почту. Вероятно, это не проблема кодирования, а проблема конфигурации сервера. Вам нужно поговорить с системным администратором, чтобы узнать, почему это происходит. - Если вы получаете
TRUE
возвращаемое значение, это не значит, что ваше электронное письмо обязательно будет отправлено. Это просто означает, что письмо было успешно отправлено соответствующему обработчику на сервере PHP. Еще больше точек сбоя вне контроля PHP, которые могут привести к тому, что письмо не будет отправлено.
Таким образом, FALSE
поможет направить вас в правильном направлении, тогда как TRUE
не обязательно означает, что ваше письмо было успешно отправлено. Это важно отметить!
Убедитесь, что ваш хостинг-провайдер позволяет отправлять электронную почту и не ограничивает отправку почты
Многие совместно используемые веб-хостинги, особенно поставщики бесплатных веб-хостингов, либо не разрешают отправлять электронные письма со своих серверов, либо ограничивают объем, который можно отправлять в течение любого заданного периода времени. Это связано с их усилиями по ограничению использования спамерами своих более дешевых услуг.
Если вы считаете, что ваш хост имеет ограничения по электронной почте или блокирует отправку электронной почты, проверьте их часто задаваемые вопросы, чтобы увидеть, если они перечисляют какие-либо такие ограничения. В противном случае вам может потребоваться обратиться в службу поддержки, чтобы проверить, существуют ли какие-либо ограничения в отношении отправки электронных писем.
Проверять папки со спамом; запретить помечать письма как спам
Часто по разным причинам электронные письма, отправляемые через PHP (и другие серверные языки программирования), попадают в папку спама получателя. Всегда проверяйте это перед устранением неисправностей вашего кода.
Чтобы не отправлять почту, отправляемую через PHP, в папку со спамом получателей, вы можете делать разные вещи, как в своем коде PHP, так и в других случаях, чтобы свести к минимуму вероятность того, что ваши письма будут помечены как спам. Хорошие советы от Michiel de Mare включают в себя:
- Используйте методы аутентификации электронной почты, такие как SPF и DKIM, чтобы доказать, что ваши электронные письма и ваше доменное имя принадлежат друг другу, и предотвратить подделку вашего доменного имени. На веб-сайте SPF есть мастер для создания информации DNS для вашего сайта.
- Проверьте обратный DNS, чтобы убедиться, что IP-адрес вашего почтового сервера указывает на доменное имя, которое вы используете для отправки почты.
- Убедитесь, что используемый вами IP-адрес отсутствует в черном списке
- Убедитесь, что адрес для ответа является действительным, существующим адресом.
- Используйте полное, настоящее имя адресата в поле «Кому», а не только адрес электронной почты (например,
"John Smith" <[email protected]>
).- Следите за своими учетными записями о злоупотреблениях, такими как [email protected] и [email protected] Это означает — убедитесь, что эти учетные записи существуют, прочитайте то, что им отправлено, и действуйте по жалобам.
- Наконец, сделайте так, чтобы отписаться действительно было легко. В противном случае ваши пользователи откажутся от подписки, нажав кнопку спама, и это повлияет на вашу репутацию.
См. Как убедиться, что электронная почта, которую вы отправляете программно, не помечается как спам? больше на эту тему.
Убедитесь, что все заголовки почты поставлены
Некоторые спам-программы отклоняют почту, если в ней отсутствуют общие заголовки, такие как «От» и «Ответить»:
$headers = array("From: [email protected]",
"Reply-To: [email protected]",
"X-Mailer: PHP/" . PHP_VERSION
);
$headers = implode("rn", $headers);
mail($to, $subject, $message, $headers);
Убедитесь, что заголовки почты не имеют синтаксических ошибок
Недопустимые заголовки так же плохи, как и отсутствие заголовков. Один неверный символ может быть все, что нужно, чтобы сорвать вашу электронную почту. Перепроверьте, чтобы убедиться, что ваш синтаксис правильный, так как PHP не поймает эти ошибки за вас.
$headers = array("From [email protected]", // missing colon
"Reply To: [email protected]", // missing hyphen
"X-Mailer: "PHP"/" . PHP_VERSION // bad quotes
);
Не используйте подделку From:
отправитель
Хотя в письме должен быть отправитель From :, вы не можете просто использовать какое-либо значение. В частности, адреса отправителей, отправленных пользователями, являются надежным способом заблокировать почту:
$headers = array("From: $_POST[contactform_sender_email]"); // No!
Причина: ваш веб-сервер или почтовый сервер не занесен в белый список SPF/DKIM, чтобы притворяться ответственным за адреса @hotmail или @gmail. Он может даже молча уронить письма с From:
отправитель доменами не настроены на.
Убедитесь в правильности значения получателя
Иногда проблема так же проста, как неправильное значение для получателя письма. Это может быть связано с использованием неверной переменной.
$to = '[email protected]';
// other variables ....
mail($recipient, $subject, $message, $headers); // $recipient should be $to
Еще один способ проверить это — жестко закодировать значение получателя в вызов функции mail()
:
mail('[email protected]', $subject, $message, $headers);
Это может применяться ко всем параметрам mail()
.
Отправить на несколько аккаунтов
Чтобы исключить проблемы с учетной записью электронной почты, отправьте свою электронную почту на несколько учетных записей электронной почты у разных поставщиков электронной почты. Если ваши электронные письма не поступают на учетную запись Gmail пользователя, отправьте те же электронные письма на учетную запись Yahoo, Hotmail и обычную учетную запись POP3 (например, на учетную запись электронной почты, предоставленную интернет-провайдером).
Если электронные письма поступают на все или на некоторые другие учетные записи электронной почты, вы знаете, что ваш код отправляет электронные письма, но вполне вероятно, что поставщик учетной записи электронной почты по какой-то причине блокирует их. Если электронная почта не поступает ни в одну учетную запись электронной почты, проблема, скорее всего, связана с вашим кодом.
Убедитесь, что код соответствует методу формы
Если вы установили метод формы на POST
, убедитесь, что вы используете $_POST
для поиска значений формы. Если вы установили GET
или не установили его вообще, убедитесь, что вы используете $_GET
для поиска значений формы.
Убедитесь, что значение action
формы указывает на правильное местоположение
Убедитесь, что ваш атрибут action
формы содержит значение, которое указывает на ваш почтовый код PHP.
<form action="send_email.php" method="POST">
Убедитесь, что веб-хостинг поддерживает отправку электронной почты
Некоторые провайдеры веб-хостинга не разрешают или не разрешают отправку электронной почты через свои серверы. Причины этого могут быть разными, но если они отключили отправку почты, вам нужно будет использовать альтернативный метод, который использует третье лицо для отправки этих писем за вас.
В электронном письме к их технической поддержке (после посещения их онлайн-поддержки или FAQ) следует уточнить, доступны ли возможности электронной почты на вашем сервере.
Убедитесь, что localhost
почтовый сервер настроен
Если вы разрабатываете на своей локальной рабочей станции с использованием WAMP, MAMP или XAMPP, сервер электронной почты, вероятно, не установлен на вашей рабочей станции. Без такового PHP не может отправлять почту по умолчанию.
Вы можете преодолеть это, установив базовый почтовый сервер. Для Windows вы можете использовать бесплатную Mercury Mail.
Вы также можете использовать SMTP для отправки ваших писем. Посмотрите этот замечательный ответ от Викаса Двиведи, чтобы узнать, как это сделать.
Включить PHP custom mail.log
В дополнение к вашему журналу MTA и PHP вы можете включить регистрацию для функции mail()
. Он не записывает полное взаимодействие SMTP, но, по крайней мере, параметры вызова функции и сценарий вызова.
ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);
См. Http://php.net/manual/en/mail.configuration.php для деталей. (Лучше всего включить эти опции в php.ini
или .user.ini
или .htaccess
возможно.)
Проверьте с почтовой службой тестирования
Существуют различные службы доставки и проверки на спам, которые вы можете использовать для проверки настроек MTA/веб-сервера. Как правило, вы отправляете почтовое исследование по адресу: их адрес, затем получаете отчет о доставке и более конкретные сбои или анализ позже:
- mail-tester.com (бесплатно/просто)
- glockapps.com (бесплатно/$$$)
- senforensics.com (регистрация/$$$)
- mailtrap.io (pro/$$$)
- ultratools/… /emailTest (бесплатно/только проверки MX)
- Разное: http://www.verticalresponse.com/blog/7-email-testing-delivery-tools/
Используйте другой почтовик
Встроенная в PHP функция mail()
удобна и часто выполняет свою работу, но имеет свои недостатки. К счастью, есть альтернативы, которые предлагают больше мощности и гибкости, включая решение многих проблем, описанных выше:
- Самое популярное существо: PHPMailer
- Аналогичным образом можно отметить SwiftMailer
- Или даже более старая PEAR :: Mail.
Все это можно сочетать с профессиональным SMTP-сервером/поставщиком услуг. (Поскольку типичные планы общего веб-хостинга 08/15 ударились или пропали, когда дело доходит до настройки/конфигурирования электронной почты.)
Ответ 2
Добавить почтовый заголовок в функции почты
$header = "From: [email protected]rn";
$header.= "MIME-Version: 1.0rn";
$header.= "Content-Type: text/html; charset=ISO-8859-1rn";
$header.= "X-Priority: 1rn";
$status = mail($to, $subject, $message, $header);
if($status)
{
echo '<p>Your mail has been sent!</p>';
} else {
echo '<p>Something went wrong, Please try again!</p>';
}
Ответ 3
- Всегда старайтесь отправлять заголовки в почтовую функцию.
- Если вы отправляете почту через localhost, выполните настройки smtp для отправки почты.
- Если вы отправляете почту через сервер, проверьте, включена ли функция отправки электронной почты на вашем сервере.
Ответ 4
Вы используете SMTP-конфигурацию для отправки своей электронной почты?
попробуйте вместо этого использовать phpmailer. вы можете загрузить библиотеку из https://github.com/PHPMailer/PHPMailer. Я создал электронную почту, отправив этот путь:
function send_mail($email, $recipient_name, $message='')
{
require("phpmailer/class.phpmailer.php");
$mail = new PHPMailer();
$mail->CharSet="utf-8";
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "mail.example.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "myusername"; // SMTP username
$mail->Password = "[email protected]"; // SMTP password
$mail->From = "[email protected]";
$mail->FromName = "System-Ad";
$mail->AddAddress($email, $recipient_name);
$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->IsHTML(true); // set email format to HTML (true) or plain text (false)
$mail->Subject = "This is a Sampleenter code here Email";
$mail->Body = $message;
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
$mail->AddEmbeddedImage('images/logo.png', 'logo', 'logo.png');
$mail->addAttachment('files/file.xlsx');
if(!$mail->Send())
{
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "Message has been sent";
}
Ответ 5
Просто добавьте некоторые заголовки перед отправкой почты:
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From: $namen E-Mail: $emailn Message:n $message";
$headers .= "MIME-Version: 1.0rn";
$headers .= "Content-type: text/htmlrn";
$headers .= 'From: [email protected]' . "rn" .
'Reply-To: [email protected]' . "rn" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
И еще одно. Функция mail()
не работает в localhost. Загрузите свой код на сервер и попробуйте.
Ответ 6
он работал у меня на 000webhost, делая следующее:
$headers = "MIME-Version: 1.0" . "rn";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "rn";
$headers .= "From: ". $from. "rn";
$headers .= "Reply-To: ". $from. "rn";
$headers .= "X-Mailer: PHP/" . phpversion();
$headers .= "X-Priority: 1" . "rn";
Введите адрес электронной почты при отправке электронной почты
mail('[email protected]', $subject, $message, $headers)
Используйте ''
, а не ""
Этот код работает, но письмо было получено с задержкой в полчаса
Ответ 7
В основном функция mail()
отключена на общем хостинге.
Лучше использовать SMTP. Лучшим вариантом будет Gmail или SendGrid.
SMTPconfig.php
<?php
$SmtpServer="smtp.*.*";
$SmtpPort="2525"; //default
$SmtpUser="***";
$SmtpPass="***";
?>
SMTPmail.php
<?php
class SMTPClient
{
function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
{
$this->SmtpServer = $SmtpServer;
$this->SmtpUser = base64_encode ($SmtpUser);
$this->SmtpPass = base64_encode ($SmtpPass);
$this->from = $from;
$this->to = $to;
$this->subject = $subject;
$this->body = $body;
if ($SmtpPort == "")
{
$this->PortSMTP = 25;
}
else
{
$this->PortSMTP = $SmtpPort;
}
}
function SendMail ()
{
$newLine = "rn";
$headers = "MIME-Version: 1.0" . $newLine;
$headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;
if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP))
{
fputs ($SMTPIN, "EHLO ".$HTTP_HOST."rn");
$talk["hello"] = fgets ( $SMTPIN, 1024 );
fputs($SMTPIN, "auth loginrn");
$talk["res"]=fgets($SMTPIN,1024);
fputs($SMTPIN, $this->SmtpUser."rn");
$talk["user"]=fgets($SMTPIN,1024);
fputs($SMTPIN, $this->SmtpPass."rn");
$talk["pass"]=fgets($SMTPIN,256);
fputs ($SMTPIN, "MAIL FROM: <".$this->from.">rn");
$talk["From"] = fgets ( $SMTPIN, 1024 );
fputs ($SMTPIN, "RCPT TO: <".$this->to.">rn");
$talk["To"] = fgets ($SMTPIN, 1024);
fputs($SMTPIN, "DATArn");
$talk["data"]=fgets( $SMTPIN,1024 );
fputs($SMTPIN, "To: <".$this->to.">rnFrom: <".$this->from.">rn".$headers."nnSubject:".$this->subject."rnrnrn".$this->body."rn.rn");
$talk["send"]=fgets($SMTPIN,256);
//CLOSE CONNECTION AND EXIT ...
fputs ($SMTPIN, "QUITrn");
fclose($SMTPIN);
//
}
return $talk;
}
}
?>
contact_email.php
<?php
include('SMTPconfig.php');
include('SMTPmail.php');
if($_SERVER["REQUEST_METHOD"] == "POST")
{
$to = "";
$from = $_POST['email'];
$subject = "Enquiry";
$body = $_POST['name'].'</br>'.$_POST['companyName'].'</br>'.$_POST['tel'].'</br>'.'<hr />'.$_POST['message'];
$SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
$SMTPChat = $SMTPMail->SendMail();
}
?>
Ответ 8
Если вы используете только функцию mail()
, вам необходимо заполнить файл конфигурации.
Вам нужно открыть расширение почты и установить SMTP smtp_port
и т.д., и самое главное, ваше имя пользователя и пароль. Без этого почта не может быть отправлена. Кроме того, вы можете использовать класс PHPMail для отправки.
Ответ 9
Попробуйте выполнить эти два сеанса отдельно и вместе:
- удалите
if($_POST['submit']){}
- удалить
$from
(только моя кишка)
Ответ 10
Я думаю, что это должно сделать трюк. Я просто добавил if(isset
и добавил конкатенацию к переменным в теле, чтобы отделить PHP от HTML.
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From:" .$name."rn E-Mail:" .$email."rn Message:rn" .$message;
if (isset($_POST['submit']))
{
if (mail ($to, $subject, $body, $from))
{
echo '<p>Your message has been sent!</p>';
}
else
{
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
Ответ 11
Для тех, кто находит это в будущем, я бы не рекомендовал использовать mail
. Там есть некоторые ответы, которые касаются этого, но не почему.
Функция PHP mail
не только непрозрачна, но и полностью использует любую используемую вами MTA (т.е. Sendmail) для выполнения этой работы. mail
ТОЛЬКО скажет вам, не удалось ли MTA принять его (т.е. Sendmail не был отправлен при попытке отправки). Он не может сказать вам, была ли почта успешной, потому что она передала ее. Как таковой (как детали ответов Джона Конде), вы теперь можете возиться с журналами MTA и надеяться, что он расскажет вам достаточно о том, что не удалось его исправить. Если вы находитесь на общем хосте или не имеете доступа к журналам MTA, вам не повезло. К сожалению, по умолчанию для большинства ванильных инсталляций для Linux обрабатывается так.
Почтовая библиотека (PHPMailer, Zend Framework 2+ и т.д.) делает что-то очень отличное от mail
. То, что они делают, это открыть сокет непосредственно на принимающем почтовом сервере, а затем отправить SMTP-почтовые команды непосредственно через этот сокет. Другими словами, класс действует как собственный MTA (обратите внимание, что вы можете сказать библиотекам использовать mail
, чтобы в конечном итоге отправить почту, но я настоятельно рекомендую вам не делать этого).
Это означает, что вы можете непосредственно видеть ответы с принимающего сервера (например, в PHPMailer вы можете включить вывод отладки). Больше нечего угадывать, если почта не была отправлена или почему.
Если вы используете SMTP (т.е. вы вызываете
isSMTP()
), вы можете получить подробную расшифровку сеанса SMTP с помощью свойстваSMTPDebug
.Установите этот параметр, включив в свой script строку, такую как:
$mail->SMTPDebug = 2;
Вы также получаете преимущество лучшего интерфейса. С помощью mail
вам необходимо настроить все заголовки, вложения и т.д. С помощью библиотеки у вас есть специальная функция для этого. Это также означает, что функция выполняет все сложные элементы (например, заголовки).
Ответ 12
Вы можете использовать конфигурационную электронную почту с помощью codeigniter, например, используя smtp (простой способ):
$config = Array(
'protocol' => 'smtp',
'smtp_host' => 'mail.domain.com', //your smtp host
'smtp_port' => 26, //default port smtp
'smtp_user' => '[email protected]',
'smtp_pass' => 'password',
'mailtype' => 'html',
'charset' => 'iso-8859-1',
'wordwrap' => TRUE
);
$message = 'Your msg';
$this->load->library('email', $config);
$this->email->from('[email protected]', 'Title');
$this->email->to('[email protected]');
$this->email->subject('Header');
$this->email->message($message);
if($this->email->send())
{
//conditional true
}
Это работает для меня!
Ответ 13
$name = $_POST['name'];
$email = $_POST['email'];
$reciver = '/* Reciver Email address */';
if (filter_var($reciver, FILTER_VALIDATE_EMAIL)) {
$subject = $name;
// To send HTML mail, the Content-type header must be set.
$headers = 'MIME-Version: 1.0' . "rn";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "rn";
$headers .= 'From:' . $email. "rn"; // Sender Email
//$headers .= 'Cc:' . $email. "rn"; // Carbon copy to Sender
$template = '<div style="padding:50px; color:white;">Hello ,<br/>'
. '<br/><br/>'
. 'Name:' .$name.'<br/>'
. 'Email:' .$email.'<br/>'
. '<br/>'
. '</div>';
$sendmessage = "<div style="background-color:#7E7E7E; color:white;">" . $template . "</div>";
// Message lines should not exceed 70 characters (PHP rule), so wrap it.
$sendmessage = wordwrap($sendmessage, 70);
// Send mail by PHP Mail Function.
mail($reciver, $subject, $sendmessage, $headers);
echo "Your Query has been received, We will contact you soon.";
} else {
echo "<span>* invalid email *</span>";
}
Ответ 14
Попробуйте это
<?php
$to = "[email protected], [email protected]";
$subject = "HTML email";
$message = "
<html>
<head>
<title>HTML email</title>
</head>
<body>
<p>This email contains HTML Tags!</p>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
</tr>
</table>
</body>
</html>";
// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "rn";
$headers .= "Content-type:text/html;charset=UTF-8" . "rn";
// More headers
$headers .= 'From: <[email protected]>' . "rn";
$headers .= 'Cc: [email protected]' . "rn";
mail($to,$subject,$message,$headers);
?>
Ответ 15
Попробуйте это
if ($_POST['submit']) {
$success= mail($to, $subject, $body, $from);
if($success)
{
echo '
<p>Your message has been sent!</p>
';
} else {
echo '
<p>Something went wrong, go back and try again!</p>
';
}
}
Ответ 16
Прежде всего,
У вас может быть много параметров для функции mail()…
Вы можете иметь 5 макс. mail(to,subject,message,headers,parameters);
Что касается переменной $from
, которая должна автоматически поступать с вашего веб-хостинга, если вы используете linux cPanel. Он автоматически исходит из вашего имени пользователя cPanel и IP-адреса.
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From: $namen E-Mail: $emailn Message:n $message";
Также убедитесь, что у вас есть правильный порядок переменных в вашей функции mail().
mail($to,$subject,$message,etc.)
в этом порядке, иначе есть вероятность того, что он не будет работать.
Дайте мне знать, если это поможет…
Ответ 17
Если у вас возникли проблемы с отправкой писем с помощью PHP, рассмотрите альтернативу, например PHPMailer или SwiftMailer.
Я обычно использую SwiftMailer всякий раз, когда мне нужно отправлять письма с помощью PHP.
Основное использование:
require 'mail/swift_required.php';
$message = Swift_Message::newInstance()
// The subject of your email
->setSubject('Jane Doe sends you a message')
// The from address(es)
->setFrom(array('[email protected]' => 'Jane Doe'))
// The to address(es)
->setTo(array('[email protected]' => 'Frank Stevens'))
// Here, you put the content of your email
->setBody('<h3>New message</h3><p>Here goes the rest of my message</p>', 'text/html');
if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) {
echo json_encode([
"status" => "OK",
"message" => 'Your message has been sent!'
], JSON_PRETTY_PRINT);
} else {
echo json_encode([
"status" => "error",
"message" => 'Oops! Something went wrong!'
], JSON_PRETTY_PRINT);
}
Подробнее о том, как использовать SwiftMailer, см. официальную документацию.
Ответ 18
Для тех, кто не хочет использовать внешние почтовые программы и хочет отправлять почту() на выделенный Linux-сервер.
Способ, как php mails, описан в php.ini
в разделе [mail function]
. Параметр sendmail-path
описывает, как вызывается sendmail. Значение по умолчанию — sendmail -t -i
, поэтому, если вы будете работать с sendmail -t -i < message.txt
в консоли linux — вы будете sendmail -t -i < message.txt
. Вы также можете добавить mail.log
для отладки и убедиться, что mail() действительно вызван.
Различные MTA могут реализовать sendmail
, они просто делают символическую ссылку на свои двоичные файлы на это имя. Например, в debian default используется postfix. Настройте свой MTA для отправки почты и проверьте ее с консоли с помощью sendmail -v -t -i < message.txt
. Файл message.txt
должен содержать все заголовки сообщения и тело, адресаты назначения для конверта будут взяты из заголовка To:
Пример:
From: [email protected]
To: [email protected]
Subject: Test mail via sendmail.
Text body.
Я предпочитаю использовать ssmtp как MTA, потому что он прост и не требует запуска демона с открытыми портами. ssmtp подходит только для отправки почты с локального хоста, он также может отправлять аутентифицированную электронную почту через вашу учетную запись в общедоступной почтовой службе. Установите ssmtp и отредактируйте config /etc/ssmtp/ssmtp.conf
. Чтобы иметь возможность также получать локальную системную почту для учетных записей unix (например, оповещения для root из заданий cron), настройте файл /etc/ssmtp/revaliases
.
Вот моя конфигурация для моей учетной записи в почте Yandex:
[email protected]
mailhub=smtp.yandex.ru:465
FromLineOverride=YES
UseTLS=YES
[email protected]
AuthPass=password
Ответ 19
Убедитесь, что на вашем сервере установлен Sendmail.
Если вы проверили свой код и проверили, что там нет ничего плохого, перейдите в /var/mail и проверьте, нет ли этой папки.
Если он пуст, вам нужно будет сделать:
sudo apt-get install sendmail
если вы находитесь на сервере Ubuntu.
Ответ 20
Возможно, проблема в конфигурации почтового сервера, чтобы избежать подобных проблем или вам не нужно беспокоиться о проблеме с почтовым сервером, я рекомендую вам использовать PHPMailer, это плагин, в котором есть все необходимое для отправки почты, только вы должны учитывать, что SMTP-порт (порт: 25 и 465) включен
require_once 'PHPMailer/PHPMailer.php';
require_once '/servicios/PHPMailer/SMTP.php';
require_once '/servicios/PHPMailer/Exception.php';
$mail = new PHPMailerPHPMailerPHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'contrasenia';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
//Recipients
$mail->setFrom('[email protected]', 'my name');
$mail->addAddress('[email protected]');
//Attachments
$mail->addAttachment('optional file'); // Add files, is optional
//Content
$mail->isHTML(true);// Set email format to HTML
$mail->Subject = utf8_decode("subject");
$mail->Body = utf8_decode("mail content");
$mail->AltBody = '';
$mail->send();
}
catch (Exception $e){
$error = $mail->ErrorInfo;
}
Ответ 21
Это затронет только небольшую часть пользователей, но я бы хотел, чтобы это было документировано для этой небольшой части. Из-за этой проблемы этот член этой маленькой горстки потратил 6 часов на поиск рабочей почты PHP script.
Если вы собираетесь в университет, который запускает XAMPP с сайта www.AceITLab.com, вы должны знать, что наш профессор не сказал нам: брандмауэр AceITLab (а не брандмауэр Windows) блокирует MercuryMail в XAMPP. Вам придется использовать альтернативный почтовый клиент, груша работает на нас. Вам нужно будет отправить учетную запись Gmail с низкими настройками безопасности.
Да, я знаю, это абсолютно бесполезно для электронной почты реального мира. Однако, из того, что я видел, академические настройки и реальный мир часто имеют очень мало общего.
Ответ 22
Вы можете использовать функции empty() и isset(). Если вы хотите, чтобы он работал с разными файлами, просто измените action='yourphp.php'
на html, который я вам даю, и store the PHP скрипт
на этот yourphp.php
файл. Также вам нужно изменить index.html
на index.php
, чтобы активировать функции PHP.
PHP
<?php
error_reporting(0);
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From: $namen E-Mail: $emailn Message:n $message";
if ($_POST['submit']){
if (!(empty($_POST['name']))) {
if (!(empty($_POST['email']))){
if (!(empty($_POST['message']))){
mail ($to, $subject, $body, $from);
echo '<p>Your message has been sent!</p>';
}else{
echo '<p>Fill your message please.</p>';}
}else {
echo '<p>Fill your email please.</p>';}
}else{
echo '<p>Fill your name please.</p>';}
}else{
echo '<p>Fill the form.</p>';}
?>
HTML
<html>
<form method="post" action="?">
<table>
<tr><td>Name</td><td><input type='text' name='name' id='name'/></td></tr>
<tr><td>Email</td><td><input type='text' name='email' id='email'/></td></tr>
<tr><td>Message</td><td><input type='text' name='message' id='message'/></td></tr>
<tr><td></td><td><input type='submit' name='submit' id='submit'/></td></tr>
</table>
</form>
</html>
С наилучшими пожеланиями!
Ответ 23
Если вы используете этот код на локальном сервере (т.е. ваш компьютер для целей разработки), он не отправит электронное письмо получателю. Что произойдет, он создаст файл .txt
в папке с именем mailoutput
.
В случае, если вы используете бесплатный сервис-шлейф, например 000webhost
или hostinger
, эти поставщики услуг отключают функцию mail()
, чтобы предотвратить непреднамеренные использования подмены электронной почты, спам и т.д. Я предпочитаю, чтобы вы связались с ними посмотрите, поддерживают ли они эту функцию.
Если вы уверены, что поставщик услуг поддерживает функцию mail(), вы можете проверить это руководство по PHP для дальнейшей справки,
PHP mail()
Чтобы проверить, поддерживает ли ваша служба хостинга функцию mail(), попробуйте запустить этот код, (не забудьте изменить адрес электронной почты получателя)
<?php
$to = '[email protected]';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: [email protected]' . "rn" .
'Reply-To: [email protected]' . "rn" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
Надеюсь, что это помогло.
Ответ 24
Вы можете использовать libmail: http://lwest.free.fr/doc/php/lib/index.php3?page=mail&lang=en
include "libmail.php";
$m = new Mail(); // create the mail
$m->From( $_POST['form'] );
$m->To( $_POST['to'] );
$m->Subject( $_POST['subject'] );
$m->Body( $_POST['body'] );
$m->Cc( $_POST['cc']);
$m->Priority(4);
// attach a file of type image/gif to be displayed in the message if possible
$m->Attach( "/home/leo/toto.gif", "image/gif", "inline" );
$m->Send(); // send the mail
echo "Mail was sent:"
echo $m->Get(); // show the mail source
Ответ 25
Установка sendmail для Debian 10.0.0 (‘Buster’) на самом деле была тривиальной!
php.ini
[mail function]
sendmail_path=/usr/sbin/sendmail -t -i
; (Other directives are mostly windows)
Стандартная установка пакета sendmail (с разрешением «отправить»):
su - # Install as user 'root'
dpkg --list # Is install necessary?
apt-get install sendmail sendmail-cf m4 # Note multiple package selection
sendmailconfig # Respond all 'Y' for new install
Разные полезные команды:
which sendmail # /usr/sbin/sendmail
which sendmailconfig # /usr/sbin/sendmailconfig
man sendmail # Documentation
systemctl restart sendmail # As and when required
Проверка (возможности отправки)
echo "Subject: sendmail test" | sendmail -v <yourEmail>@gmail.com
Выше заняло около 5 минут.
Тогда я потратил впустую 5 часов…
НЕ ЗАБУДЬТЕ ПРОВЕРИТЬ СВОЮ ПАПКУ СПАМА !!!!
Ответ 26
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'Sender <yoursite.com>';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From: $namen E-Mail: $emailn Message:n $message";
$headers.='X-Mailer: PHP/' . phpversion().'rn';
$headers.= 'MIME-Version: 1.0' . "rn";
$headers.= 'Content-type: text/html; charset=iso-8859-1 rn';
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $headers,"-f$from")) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
Ответ 27
вы можете увидеть свои ошибки по
error_reporting(E_ALL);
и мой пример кода
<?php
use PHPMailerPHPMailerPHPMailer;
require 'PHPMailer.php';
require 'SMTP.php';
require 'Exception.php';
$name=$_POST['name'];
$mailid=$_POST['mail'];
$mail = new PHPMailer;
$mail->IsSMTP();
$mail->SMTPDebug = 0; // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // Specify main and backup server
$mail->Port = 587; // Set the SMTP port
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = '[email protected]'; // SMTP username
$mail->Password = 'password'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted
$mail->From = '[email protected]';
$mail->FromName = 'name';
$mail->AddAddress($mailid,$name); // Name is optional
$mail->IsHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'Here is your message' ;
$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;
exit;
}
echo 'Message has been sent';
?>
Ответ 28
Почему вы не используете Papercut, вы можете проверить отправку почты на своем ПК без Интернета
вы должны использовать Papercut это простое приложение для проверки отправки почты. и вам не нужно ничего настраивать.
Просто запустите его и попробуйте отправить пробную почту:
test_sendmail.php
<?php
$to = "[email protected]";
$subject = "My subject";
$txt = "Hello world!";
$headers = "From: [email protected]" . "rn" .
"CC: [email protected]";
mail($to,$subject,$txt,$headers);
?>
и вы увидите следующее:
Ответ 29
Если ваша система sendmail работает, ваш код должен быть изменен следующим образом:
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$header ="
Content-Type: text/html; charset=UTF-8rn
MIME-Version: 1.0rn
From: "$name" <$email>rn
Reply-To: [email protected]rn
X-Mailer: yoursite.com mailerrn
";
$to = '"Contact" <[email protected]>';
$subject = 'Customer Inquiry';
$body =<<<EOB
<!DOCTYPE html>
<html>
<body>
$message
</body>
</html>
EOB;
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $header) !== false) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
Это позволяет отправлять электронные письма в формате HTML.
Интересный интерес:
- мы создали многострочную строку заголовка (каждая строка разделена rn);
- мы добавили Content-type, чтобы выразить, что мы возвращаем HTML, чтобы вы могли создавать более качественные электронные письма (вы можете добавить любой HTML-код, который вы хотите, включая CSS, к вашему сообщению, как это было бы на HTML-странице).
Примечание: синтаксис <<<EOB
требует, чтобы последний маркер EOB начинался как начало строки и не имел пробела или другого символа после точки с запятой.
Ответ 30
Если вы используете php mailer, вы можете использовать этот код, просто скопируйте и вставьте его, замените ***
данными и учетными данными. А также изменить значение имени входных данных.
<?php
require_once ("PHPMailer/PHPMailerAutoload.php");
$error = array();
//var_dump($_POST);
$message = $_POST['a'] . '<br>';
$message.= $_POST['b'] . '<br>';
$message.= $_POST['c'] . '<br>';
$message.= $_POST['d'] . '<br>';
$message.= $_POST['e'] . '<br>';
$message.= $_POST['f'] . '<br>';
$message.= $_POST['g'] . '<br>';
$message.= $_POST['h'] . '<br>';
$message.= $_POST['i'] . '<br>';
$message.= $_POST['j'] . '<br>';
$message.= $_POST['k'] . '<br>';
$subject = "Visitor Query";
$from = "******@******.com"; // example [email protected]
$password = '******';
$mail = new PHPMailer();
$body = $message;
$mail->IsSMTP();
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead
$mail->SMTPDebug = 0;
//$mail->Host = 'mail.******.com'; // sets SMTP server
$mail->Host = 'mail.******.com'; // sets SMTP server
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
//$mail->Port = 25;
$mail->Username = $from; // SMTP username
$mail->Password = $password; // SMTP password
$mail->AddAddress ( "******@gmail.com" );
$mail->AddReplyTo ( "******@gmail.com", "Team");
$mail->Subject = $subject;
$mail->Body = $message;
$mail->From = $from;
$mail->FromName = "Visitor Query";
$mail->ContentType = "text/html";
if (count($error == 0)) {
$mail->Send();
// echo "_________________wait_______for_______ our _______ reply !";
} else {
echo $error; // show error messages
//echo $result;
}
//header("location: index.php");
?>
I know that this question was asked before.
When I call the PHP mail() function, it returns true.
I checked my php.ini (I’v running CentOS):
SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On
I read in a forum that I have to install sendmail. So I installed it. Now sites with a mail() function doesn’t load anymore. So I removed sendmail, and the mail() function returns true again, but doesn’t send the mail.
Any idea?
Ответ 1
Хотя есть части этого ответа, которые относятся только к использованию самой функции mail()
, многие из этих шагов по устранению неполадок могут быть применены к любой почтовой системе PHP.
Существует множество причин, по которым ваш скрипт не отправляет электронные письма. Это трудно диагностировать, если нет явной синтаксической ошибки. Без него вам нужно пройти через контрольный список ниже, чтобы найти возможные потенциальные подводные камни, с которыми вы можете столкнуться.
Убедитесь, что отчеты об ошибках включены и настроены для отчета обо всех ошибках
Отчеты об ошибках важны для устранения ошибок в вашем коде и общих ошибок, с которыми сталкивается PHP. Отчеты об ошибках должны быть включены для получения этих ошибок. Размещение следующего кода в верхней части ваших файлов PHP (или в главном файле конфигурации) включит создание отчетов об ошибках.
error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");
Смотрите этот ответ для более подробной информации об этом.
Убедитесь, что функция mail()
вызвана
Это может показаться глупым, но распространенная ошибка заключается в том, чтобы забыть фактически поместить функцию mail()
в ваш код. Убедитесь, что он там и не закомментирован.
Убедитесь, что функция mail()
вызывается правильно
bool mail (строка $ to, строка $ subject, строка $ message [, строка $ extra_headers [, строка $ extra_parameters]])
Функция mail принимает три обязательных параметра и, необязательно, четвертый и пятый. Если ваш вызов mail()
не имеет хотя бы трех параметров, он потерпит неудачу.
Если ваш вызов mail()
не имеет правильных параметров в правильном порядке, он также не будет выполнен.
Проверьте почтовые журналы сервера
Ваш веб-сервер должен регистрировать все попытки отправить электронную почту через него. Расположение этих журналов может отличаться (вам может потребоваться узнать у администратора сервера, где они находятся), но их обычно можно найти в корневом каталоге пользователя в разделе logs
. Внутри будут сообщения об ошибках, о которых сообщал сервер, если таковые имеются, связанные с вашими попытками отправить электронную почту.
Проверьте, нет ли соединения с портом
Блокировка порта является очень распространенной проблемой, с которой сталкивается большинство разработчиков при интеграции своего кода для доставки электронной почты с использованием SMTP. И это можно легко отследить в почтовых журналах сервера (местоположение сервера почтового журнала может варьироваться от сервера к серверу, как объяснено выше). Если вы находитесь на сервере общего хостинга, порты 25 и 587 остаются заблокированными по умолчанию. Этот блок специально сделан вашим хостинг-провайдером. Это верно даже для некоторых выделенных серверов. Когда эти порты заблокированы, попробуйте подключиться через порт 2525. Если вы обнаружите, что этот порт также заблокирован, то единственное решение — связаться с вашим хостинг-провайдером, чтобы разблокировать эти порты.
Большинство провайдеров хостинга блокируют эти порты электронной почты, чтобы защитить свою сеть от отправки спам-писем.
Используйте порты 25 или 587 для простых соединений /TLS и порт 465 для соединений SSL. Для большинства пользователей предлагается использовать порт 587, чтобы избежать ограничений скорости, установленных некоторыми хостинг-провайдерами.
Не используйте оператор подавления ошибок
Когда перед оператором подавления ошибок @
добавляется выражение в PHP, любые сообщения об ошибках, которые могут быть сгенерированы этим выражением, будут игнорироваться. Существуют обстоятельства, когда использование этого оператора необходимо, но отправка почты не входит в их число.
Если ваш код содержит @mail(...)
то вы можете скрывать важные сообщения об ошибках, которые помогут вам отладить это. Удалите @
и посмотрите, нет ли ошибок.
Рекомендуется только тогда, когда вы проверяете с помощью error_get_last()
сразу после конкретных сбоев.
Проверьте mail()
возвращаемое значение
Функция mail()
:
Возвращает
TRUE
если почта была успешно принята для доставки,FALSE
противном случае. Важно отметить, что только то, что почта была принята для доставки, НЕ означает, что почта действительно достигнет назначенного пункта назначения.
Это важно отметить, потому что:
- Если вы получаете
FALSE
возвращаемое значение, вы знаете, что ошибка заключается в том, что ваш сервер принимает вашу почту. Вероятно, это не проблема кодирования, а проблема конфигурации сервера. Вам нужно поговорить с системным администратором, чтобы узнать, почему это происходит. - Если вы получаете
TRUE
возвращаемое значение, это не значит, что ваше электронное письмо обязательно будет отправлено. Это просто означает, что письмо было успешно отправлено соответствующему обработчику на сервере PHP. Еще больше точек сбоя вне контроля PHP, которые могут привести к тому, что письмо не будет отправлено.
Таким образом, FALSE
поможет направить вас в правильном направлении, тогда как TRUE
не обязательно означает, что ваше письмо было успешно отправлено. Это важно отметить!
Убедитесь, что ваш хостинг-провайдер позволяет отправлять электронную почту и не ограничивает отправку почты
Многие совместно используемые веб-хостинги, особенно поставщики бесплатных веб-хостингов, либо не разрешают отправлять электронные письма со своих серверов, либо ограничивают объем, который можно отправлять в течение любого заданного периода времени. Это связано с их усилиями по ограничению использования спамерами своих более дешевых услуг.
Если вы считаете, что ваш хост имеет ограничения по электронной почте или блокирует отправку электронной почты, проверьте их часто задаваемые вопросы, чтобы увидеть, если они перечисляют какие-либо такие ограничения. В противном случае вам может потребоваться обратиться в службу поддержки, чтобы проверить, существуют ли какие-либо ограничения в отношении отправки электронных писем.
Проверять папки со спамом; запретить помечать письма как спам
Часто по разным причинам электронные письма, отправляемые через PHP (и другие серверные языки программирования), попадают в папку спама получателя. Всегда проверяйте это перед устранением неисправностей вашего кода.
Чтобы не отправлять почту, отправляемую через PHP, в папку со спамом получателей, вы можете делать разные вещи, как в своем коде PHP, так и в других случаях, чтобы свести к минимуму вероятность того, что ваши письма будут помечены как спам. Хорошие советы от Michiel de Mare включают в себя:
- Используйте методы аутентификации электронной почты, такие как SPF и DKIM, чтобы доказать, что ваши электронные письма и ваше доменное имя принадлежат друг другу, и предотвратить подделку вашего доменного имени. На веб-сайте SPF есть мастер для создания информации DNS для вашего сайта.
- Проверьте обратный DNS, чтобы убедиться, что IP-адрес вашего почтового сервера указывает на доменное имя, которое вы используете для отправки почты.
- Убедитесь, что используемый вами IP-адрес отсутствует в черном списке
- Убедитесь, что адрес для ответа является действительным, существующим адресом.
- Используйте полное, настоящее имя адресата в поле «Кому», а не только адрес электронной почты (например,
"John Smith" <[email protected]>
).- Следите за своими учетными записями о злоупотреблениях, такими как [email protected] и [email protected] Это означает — убедитесь, что эти учетные записи существуют, прочитайте то, что им отправлено, и действуйте по жалобам.
- Наконец, сделайте так, чтобы отписаться действительно было легко. В противном случае ваши пользователи откажутся от подписки, нажав кнопку спама, и это повлияет на вашу репутацию.
См. Как убедиться, что электронная почта, которую вы отправляете программно, не помечается как спам? больше на эту тему.
Убедитесь, что все заголовки почты поставлены
Некоторые спам-программы отклоняют почту, если в ней отсутствуют общие заголовки, такие как «От» и «Ответить»:
$headers = array("From: [email protected]",
"Reply-To: [email protected]",
"X-Mailer: PHP/" . PHP_VERSION
);
$headers = implode("rn", $headers);
mail($to, $subject, $message, $headers);
Убедитесь, что заголовки почты не имеют синтаксических ошибок
Недопустимые заголовки так же плохи, как и отсутствие заголовков. Один неверный символ может быть все, что нужно, чтобы сорвать вашу электронную почту. Перепроверьте, чтобы убедиться, что ваш синтаксис правильный, так как PHP не поймает эти ошибки за вас.
$headers = array("From [email protected]", // missing colon
"Reply To: [email protected]", // missing hyphen
"X-Mailer: "PHP"/" . PHP_VERSION // bad quotes
);
Не используйте подделку From:
отправитель
Хотя в письме должен быть отправитель From :, вы не можете просто использовать какое-либо значение. В частности, адреса отправителей, отправленных пользователями, являются надежным способом заблокировать почту:
$headers = array("From: $_POST[contactform_sender_email]"); // No!
Причина: ваш веб-сервер или почтовый сервер не занесен в белый список SPF/DKIM, чтобы притворяться ответственным за адреса @hotmail или @gmail. Он может даже молча уронить письма с From:
отправитель доменами не настроены на.
Убедитесь в правильности значения получателя
Иногда проблема так же проста, как неправильное значение для получателя письма. Это может быть связано с использованием неверной переменной.
$to = '[email protected]';
// other variables ....
mail($recipient, $subject, $message, $headers); // $recipient should be $to
Еще один способ проверить это — жестко закодировать значение получателя в вызов функции mail()
:
mail('[email protected]', $subject, $message, $headers);
Это может применяться ко всем параметрам mail()
.
Отправить на несколько аккаунтов
Чтобы исключить проблемы с учетной записью электронной почты, отправьте свою электронную почту на несколько учетных записей электронной почты у разных поставщиков электронной почты. Если ваши электронные письма не поступают на учетную запись Gmail пользователя, отправьте те же электронные письма на учетную запись Yahoo, Hotmail и обычную учетную запись POP3 (например, на учетную запись электронной почты, предоставленную интернет-провайдером).
Если электронные письма поступают на все или на некоторые другие учетные записи электронной почты, вы знаете, что ваш код отправляет электронные письма, но вполне вероятно, что поставщик учетной записи электронной почты по какой-то причине блокирует их. Если электронная почта не поступает ни в одну учетную запись электронной почты, проблема, скорее всего, связана с вашим кодом.
Убедитесь, что код соответствует методу формы
Если вы установили метод формы на POST
, убедитесь, что вы используете $_POST
для поиска значений формы. Если вы установили GET
или не установили его вообще, убедитесь, что вы используете $_GET
для поиска значений формы.
Убедитесь, что значение action
формы указывает на правильное местоположение
Убедитесь, что ваш атрибут action
формы содержит значение, которое указывает на ваш почтовый код PHP.
<form action="send_email.php" method="POST">
Убедитесь, что веб-хостинг поддерживает отправку электронной почты
Некоторые провайдеры веб-хостинга не разрешают или не разрешают отправку электронной почты через свои серверы. Причины этого могут быть разными, но если они отключили отправку почты, вам нужно будет использовать альтернативный метод, который использует третье лицо для отправки этих писем за вас.
В электронном письме к их технической поддержке (после посещения их онлайн-поддержки или FAQ) следует уточнить, доступны ли возможности электронной почты на вашем сервере.
Убедитесь, что localhost
почтовый сервер настроен
Если вы разрабатываете на своей локальной рабочей станции с использованием WAMP, MAMP или XAMPP, сервер электронной почты, вероятно, не установлен на вашей рабочей станции. Без такового PHP не может отправлять почту по умолчанию.
Вы можете преодолеть это, установив базовый почтовый сервер. Для Windows вы можете использовать бесплатную Mercury Mail.
Вы также можете использовать SMTP для отправки ваших писем. Посмотрите этот замечательный ответ от Викаса Двиведи, чтобы узнать, как это сделать.
Включить PHP custom mail.log
В дополнение к вашему журналу MTA и PHP вы можете включить регистрацию для функции mail()
. Он не записывает полное взаимодействие SMTP, но, по крайней мере, параметры вызова функции и сценарий вызова.
ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);
См. Http://php.net/manual/en/mail.configuration.php для деталей. (Лучше всего включить эти опции в php.ini
или .user.ini
или .htaccess
возможно.)
Проверьте с почтовой службой тестирования
Существуют различные службы доставки и проверки на спам, которые вы можете использовать для проверки настроек MTA/веб-сервера. Как правило, вы отправляете почтовое исследование по адресу: их адрес, затем получаете отчет о доставке и более конкретные сбои или анализ позже:
- mail-tester.com (бесплатно/просто)
- glockapps.com (бесплатно/$$$)
- senforensics.com (регистрация/$$$)
- mailtrap.io (pro/$$$)
- ultratools/… /emailTest (бесплатно/только проверки MX)
- Разное: http://www.verticalresponse.com/blog/7-email-testing-delivery-tools/
Используйте другой почтовик
Встроенная в PHP функция mail()
удобна и часто выполняет свою работу, но имеет свои недостатки. К счастью, есть альтернативы, которые предлагают больше мощности и гибкости, включая решение многих проблем, описанных выше:
- Самое популярное существо: PHPMailer
- Аналогичным образом можно отметить SwiftMailer
- Или даже более старая PEAR :: Mail.
Все это можно сочетать с профессиональным SMTP-сервером/поставщиком услуг. (Поскольку типичные планы общего веб-хостинга 08/15 ударились или пропали, когда дело доходит до настройки/конфигурирования электронной почты.)
Ответ 2
Добавить почтовый заголовок в функции почты
$header = "From: [email protected]rn";
$header.= "MIME-Version: 1.0rn";
$header.= "Content-Type: text/html; charset=ISO-8859-1rn";
$header.= "X-Priority: 1rn";
$status = mail($to, $subject, $message, $header);
if($status)
{
echo '<p>Your mail has been sent!</p>';
} else {
echo '<p>Something went wrong, Please try again!</p>';
}
Ответ 3
- Всегда старайтесь отправлять заголовки в почтовую функцию.
- Если вы отправляете почту через localhost, выполните настройки smtp для отправки почты.
- Если вы отправляете почту через сервер, проверьте, включена ли функция отправки электронной почты на вашем сервере.
Ответ 4
Вы используете SMTP-конфигурацию для отправки своей электронной почты?
попробуйте вместо этого использовать phpmailer. вы можете загрузить библиотеку из https://github.com/PHPMailer/PHPMailer. Я создал электронную почту, отправив этот путь:
function send_mail($email, $recipient_name, $message='')
{
require("phpmailer/class.phpmailer.php");
$mail = new PHPMailer();
$mail->CharSet="utf-8";
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "mail.example.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "myusername"; // SMTP username
$mail->Password = "[email protected]"; // SMTP password
$mail->From = "[email protected]";
$mail->FromName = "System-Ad";
$mail->AddAddress($email, $recipient_name);
$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->IsHTML(true); // set email format to HTML (true) or plain text (false)
$mail->Subject = "This is a Sampleenter code here Email";
$mail->Body = $message;
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";
$mail->AddEmbeddedImage('images/logo.png', 'logo', 'logo.png');
$mail->addAttachment('files/file.xlsx');
if(!$mail->Send())
{
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "Message has been sent";
}
Ответ 5
Просто добавьте некоторые заголовки перед отправкой почты:
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From: $namen E-Mail: $emailn Message:n $message";
$headers .= "MIME-Version: 1.0rn";
$headers .= "Content-type: text/htmlrn";
$headers .= 'From: [email protected]' . "rn" .
'Reply-To: [email protected]' . "rn" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
И еще одно. Функция mail()
не работает в localhost. Загрузите свой код на сервер и попробуйте.
Ответ 6
он работал у меня на 000webhost, делая следующее:
$headers = "MIME-Version: 1.0" . "rn";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "rn";
$headers .= "From: ". $from. "rn";
$headers .= "Reply-To: ". $from. "rn";
$headers .= "X-Mailer: PHP/" . phpversion();
$headers .= "X-Priority: 1" . "rn";
Введите адрес электронной почты при отправке электронной почты
mail('[email protected]', $subject, $message, $headers)
Используйте ''
, а не ""
Этот код работает, но письмо было получено с задержкой в полчаса
Ответ 7
В основном функция mail()
отключена на общем хостинге.
Лучше использовать SMTP. Лучшим вариантом будет Gmail или SendGrid.
SMTPconfig.php
<?php
$SmtpServer="smtp.*.*";
$SmtpPort="2525"; //default
$SmtpUser="***";
$SmtpPass="***";
?>
SMTPmail.php
<?php
class SMTPClient
{
function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
{
$this->SmtpServer = $SmtpServer;
$this->SmtpUser = base64_encode ($SmtpUser);
$this->SmtpPass = base64_encode ($SmtpPass);
$this->from = $from;
$this->to = $to;
$this->subject = $subject;
$this->body = $body;
if ($SmtpPort == "")
{
$this->PortSMTP = 25;
}
else
{
$this->PortSMTP = $SmtpPort;
}
}
function SendMail ()
{
$newLine = "rn";
$headers = "MIME-Version: 1.0" . $newLine;
$headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;
if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP))
{
fputs ($SMTPIN, "EHLO ".$HTTP_HOST."rn");
$talk["hello"] = fgets ( $SMTPIN, 1024 );
fputs($SMTPIN, "auth loginrn");
$talk["res"]=fgets($SMTPIN,1024);
fputs($SMTPIN, $this->SmtpUser."rn");
$talk["user"]=fgets($SMTPIN,1024);
fputs($SMTPIN, $this->SmtpPass."rn");
$talk["pass"]=fgets($SMTPIN,256);
fputs ($SMTPIN, "MAIL FROM: <".$this->from.">rn");
$talk["From"] = fgets ( $SMTPIN, 1024 );
fputs ($SMTPIN, "RCPT TO: <".$this->to.">rn");
$talk["To"] = fgets ($SMTPIN, 1024);
fputs($SMTPIN, "DATArn");
$talk["data"]=fgets( $SMTPIN,1024 );
fputs($SMTPIN, "To: <".$this->to.">rnFrom: <".$this->from.">rn".$headers."nnSubject:".$this->subject."rnrnrn".$this->body."rn.rn");
$talk["send"]=fgets($SMTPIN,256);
//CLOSE CONNECTION AND EXIT ...
fputs ($SMTPIN, "QUITrn");
fclose($SMTPIN);
//
}
return $talk;
}
}
?>
contact_email.php
<?php
include('SMTPconfig.php');
include('SMTPmail.php');
if($_SERVER["REQUEST_METHOD"] == "POST")
{
$to = "";
$from = $_POST['email'];
$subject = "Enquiry";
$body = $_POST['name'].'</br>'.$_POST['companyName'].'</br>'.$_POST['tel'].'</br>'.'<hr />'.$_POST['message'];
$SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
$SMTPChat = $SMTPMail->SendMail();
}
?>
Ответ 8
Если вы используете только функцию mail()
, вам необходимо заполнить файл конфигурации.
Вам нужно открыть расширение почты и установить SMTP smtp_port
и т.д., и самое главное, ваше имя пользователя и пароль. Без этого почта не может быть отправлена. Кроме того, вы можете использовать класс PHPMail для отправки.
Ответ 9
Попробуйте выполнить эти два сеанса отдельно и вместе:
- удалите
if($_POST['submit']){}
- удалить
$from
(только моя кишка)
Ответ 10
Я думаю, что это должно сделать трюк. Я просто добавил if(isset
и добавил конкатенацию к переменным в теле, чтобы отделить PHP от HTML.
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From:" .$name."rn E-Mail:" .$email."rn Message:rn" .$message;
if (isset($_POST['submit']))
{
if (mail ($to, $subject, $body, $from))
{
echo '<p>Your message has been sent!</p>';
}
else
{
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
Ответ 11
Для тех, кто находит это в будущем, я бы не рекомендовал использовать mail
. Там есть некоторые ответы, которые касаются этого, но не почему.
Функция PHP mail
не только непрозрачна, но и полностью использует любую используемую вами MTA (т.е. Sendmail) для выполнения этой работы. mail
ТОЛЬКО скажет вам, не удалось ли MTA принять его (т.е. Sendmail не был отправлен при попытке отправки). Он не может сказать вам, была ли почта успешной, потому что она передала ее. Как таковой (как детали ответов Джона Конде), вы теперь можете возиться с журналами MTA и надеяться, что он расскажет вам достаточно о том, что не удалось его исправить. Если вы находитесь на общем хосте или не имеете доступа к журналам MTA, вам не повезло. К сожалению, по умолчанию для большинства ванильных инсталляций для Linux обрабатывается так.
Почтовая библиотека (PHPMailer, Zend Framework 2+ и т.д.) делает что-то очень отличное от mail
. То, что они делают, это открыть сокет непосредственно на принимающем почтовом сервере, а затем отправить SMTP-почтовые команды непосредственно через этот сокет. Другими словами, класс действует как собственный MTA (обратите внимание, что вы можете сказать библиотекам использовать mail
, чтобы в конечном итоге отправить почту, но я настоятельно рекомендую вам не делать этого).
Это означает, что вы можете непосредственно видеть ответы с принимающего сервера (например, в PHPMailer вы можете включить вывод отладки). Больше нечего угадывать, если почта не была отправлена или почему.
Если вы используете SMTP (т.е. вы вызываете
isSMTP()
), вы можете получить подробную расшифровку сеанса SMTP с помощью свойстваSMTPDebug
.Установите этот параметр, включив в свой script строку, такую как:
$mail->SMTPDebug = 2;
Вы также получаете преимущество лучшего интерфейса. С помощью mail
вам необходимо настроить все заголовки, вложения и т.д. С помощью библиотеки у вас есть специальная функция для этого. Это также означает, что функция выполняет все сложные элементы (например, заголовки).
Ответ 12
Вы можете использовать конфигурационную электронную почту с помощью codeigniter, например, используя smtp (простой способ):
$config = Array(
'protocol' => 'smtp',
'smtp_host' => 'mail.domain.com', //your smtp host
'smtp_port' => 26, //default port smtp
'smtp_user' => '[email protected]',
'smtp_pass' => 'password',
'mailtype' => 'html',
'charset' => 'iso-8859-1',
'wordwrap' => TRUE
);
$message = 'Your msg';
$this->load->library('email', $config);
$this->email->from('[email protected]', 'Title');
$this->email->to('[email protected]');
$this->email->subject('Header');
$this->email->message($message);
if($this->email->send())
{
//conditional true
}
Это работает для меня!
Ответ 13
$name = $_POST['name'];
$email = $_POST['email'];
$reciver = '/* Reciver Email address */';
if (filter_var($reciver, FILTER_VALIDATE_EMAIL)) {
$subject = $name;
// To send HTML mail, the Content-type header must be set.
$headers = 'MIME-Version: 1.0' . "rn";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "rn";
$headers .= 'From:' . $email. "rn"; // Sender Email
//$headers .= 'Cc:' . $email. "rn"; // Carbon copy to Sender
$template = '<div style="padding:50px; color:white;">Hello ,<br/>'
. '<br/><br/>'
. 'Name:' .$name.'<br/>'
. 'Email:' .$email.'<br/>'
. '<br/>'
. '</div>';
$sendmessage = "<div style="background-color:#7E7E7E; color:white;">" . $template . "</div>";
// Message lines should not exceed 70 characters (PHP rule), so wrap it.
$sendmessage = wordwrap($sendmessage, 70);
// Send mail by PHP Mail Function.
mail($reciver, $subject, $sendmessage, $headers);
echo "Your Query has been received, We will contact you soon.";
} else {
echo "<span>* invalid email *</span>";
}
Ответ 14
Попробуйте это
<?php
$to = "[email protected], [email protected]";
$subject = "HTML email";
$message = "
<html>
<head>
<title>HTML email</title>
</head>
<body>
<p>This email contains HTML Tags!</p>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
</tr>
</table>
</body>
</html>";
// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "rn";
$headers .= "Content-type:text/html;charset=UTF-8" . "rn";
// More headers
$headers .= 'From: <[email protected]>' . "rn";
$headers .= 'Cc: [email protected]' . "rn";
mail($to,$subject,$message,$headers);
?>
Ответ 15
Попробуйте это
if ($_POST['submit']) {
$success= mail($to, $subject, $body, $from);
if($success)
{
echo '
<p>Your message has been sent!</p>
';
} else {
echo '
<p>Something went wrong, go back and try again!</p>
';
}
}
Ответ 16
Прежде всего,
У вас может быть много параметров для функции mail()…
Вы можете иметь 5 макс. mail(to,subject,message,headers,parameters);
Что касается переменной $from
, которая должна автоматически поступать с вашего веб-хостинга, если вы используете linux cPanel. Он автоматически исходит из вашего имени пользователя cPanel и IP-адреса.
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From: $namen E-Mail: $emailn Message:n $message";
Также убедитесь, что у вас есть правильный порядок переменных в вашей функции mail().
mail($to,$subject,$message,etc.)
в этом порядке, иначе есть вероятность того, что он не будет работать.
Дайте мне знать, если это поможет…
Ответ 17
Если у вас возникли проблемы с отправкой писем с помощью PHP, рассмотрите альтернативу, например PHPMailer или SwiftMailer.
Я обычно использую SwiftMailer всякий раз, когда мне нужно отправлять письма с помощью PHP.
Основное использование:
require 'mail/swift_required.php';
$message = Swift_Message::newInstance()
// The subject of your email
->setSubject('Jane Doe sends you a message')
// The from address(es)
->setFrom(array('[email protected]' => 'Jane Doe'))
// The to address(es)
->setTo(array('[email protected]' => 'Frank Stevens'))
// Here, you put the content of your email
->setBody('<h3>New message</h3><p>Here goes the rest of my message</p>', 'text/html');
if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) {
echo json_encode([
"status" => "OK",
"message" => 'Your message has been sent!'
], JSON_PRETTY_PRINT);
} else {
echo json_encode([
"status" => "error",
"message" => 'Oops! Something went wrong!'
], JSON_PRETTY_PRINT);
}
Подробнее о том, как использовать SwiftMailer, см. официальную документацию.
Ответ 18
Для тех, кто не хочет использовать внешние почтовые программы и хочет отправлять почту() на выделенный Linux-сервер.
Способ, как php mails, описан в php.ini
в разделе [mail function]
. Параметр sendmail-path
описывает, как вызывается sendmail. Значение по умолчанию — sendmail -t -i
, поэтому, если вы будете работать с sendmail -t -i < message.txt
в консоли linux — вы будете sendmail -t -i < message.txt
. Вы также можете добавить mail.log
для отладки и убедиться, что mail() действительно вызван.
Различные MTA могут реализовать sendmail
, они просто делают символическую ссылку на свои двоичные файлы на это имя. Например, в debian default используется postfix. Настройте свой MTA для отправки почты и проверьте ее с консоли с помощью sendmail -v -t -i < message.txt
. Файл message.txt
должен содержать все заголовки сообщения и тело, адресаты назначения для конверта будут взяты из заголовка To:
Пример:
From: [email protected]
To: [email protected]
Subject: Test mail via sendmail.
Text body.
Я предпочитаю использовать ssmtp как MTA, потому что он прост и не требует запуска демона с открытыми портами. ssmtp подходит только для отправки почты с локального хоста, он также может отправлять аутентифицированную электронную почту через вашу учетную запись в общедоступной почтовой службе. Установите ssmtp и отредактируйте config /etc/ssmtp/ssmtp.conf
. Чтобы иметь возможность также получать локальную системную почту для учетных записей unix (например, оповещения для root из заданий cron), настройте файл /etc/ssmtp/revaliases
.
Вот моя конфигурация для моей учетной записи в почте Yandex:
[email protected]
mailhub=smtp.yandex.ru:465
FromLineOverride=YES
UseTLS=YES
[email protected]
AuthPass=password
Ответ 19
Убедитесь, что на вашем сервере установлен Sendmail.
Если вы проверили свой код и проверили, что там нет ничего плохого, перейдите в /var/mail и проверьте, нет ли этой папки.
Если он пуст, вам нужно будет сделать:
sudo apt-get install sendmail
если вы находитесь на сервере Ubuntu.
Ответ 20
Возможно, проблема в конфигурации почтового сервера, чтобы избежать подобных проблем или вам не нужно беспокоиться о проблеме с почтовым сервером, я рекомендую вам использовать PHPMailer, это плагин, в котором есть все необходимое для отправки почты, только вы должны учитывать, что SMTP-порт (порт: 25 и 465) включен
require_once 'PHPMailer/PHPMailer.php';
require_once '/servicios/PHPMailer/SMTP.php';
require_once '/servicios/PHPMailer/Exception.php';
$mail = new PHPMailerPHPMailerPHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'contrasenia';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
//Recipients
$mail->setFrom('[email protected]', 'my name');
$mail->addAddress('[email protected]');
//Attachments
$mail->addAttachment('optional file'); // Add files, is optional
//Content
$mail->isHTML(true);// Set email format to HTML
$mail->Subject = utf8_decode("subject");
$mail->Body = utf8_decode("mail content");
$mail->AltBody = '';
$mail->send();
}
catch (Exception $e){
$error = $mail->ErrorInfo;
}
Ответ 21
Это затронет только небольшую часть пользователей, но я бы хотел, чтобы это было документировано для этой небольшой части. Из-за этой проблемы этот член этой маленькой горстки потратил 6 часов на поиск рабочей почты PHP script.
Если вы собираетесь в университет, который запускает XAMPP с сайта www.AceITLab.com, вы должны знать, что наш профессор не сказал нам: брандмауэр AceITLab (а не брандмауэр Windows) блокирует MercuryMail в XAMPP. Вам придется использовать альтернативный почтовый клиент, груша работает на нас. Вам нужно будет отправить учетную запись Gmail с низкими настройками безопасности.
Да, я знаю, это абсолютно бесполезно для электронной почты реального мира. Однако, из того, что я видел, академические настройки и реальный мир часто имеют очень мало общего.
Ответ 22
Вы можете использовать функции empty() и isset(). Если вы хотите, чтобы он работал с разными файлами, просто измените action='yourphp.php'
на html, который я вам даю, и store the PHP скрипт
на этот yourphp.php
файл. Также вам нужно изменить index.html
на index.php
, чтобы активировать функции PHP.
PHP
<?php
error_reporting(0);
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From: $namen E-Mail: $emailn Message:n $message";
if ($_POST['submit']){
if (!(empty($_POST['name']))) {
if (!(empty($_POST['email']))){
if (!(empty($_POST['message']))){
mail ($to, $subject, $body, $from);
echo '<p>Your message has been sent!</p>';
}else{
echo '<p>Fill your message please.</p>';}
}else {
echo '<p>Fill your email please.</p>';}
}else{
echo '<p>Fill your name please.</p>';}
}else{
echo '<p>Fill the form.</p>';}
?>
HTML
<html>
<form method="post" action="?">
<table>
<tr><td>Name</td><td><input type='text' name='name' id='name'/></td></tr>
<tr><td>Email</td><td><input type='text' name='email' id='email'/></td></tr>
<tr><td>Message</td><td><input type='text' name='message' id='message'/></td></tr>
<tr><td></td><td><input type='submit' name='submit' id='submit'/></td></tr>
</table>
</form>
</html>
С наилучшими пожеланиями!
Ответ 23
Если вы используете этот код на локальном сервере (т.е. ваш компьютер для целей разработки), он не отправит электронное письмо получателю. Что произойдет, он создаст файл .txt
в папке с именем mailoutput
.
В случае, если вы используете бесплатный сервис-шлейф, например 000webhost
или hostinger
, эти поставщики услуг отключают функцию mail()
, чтобы предотвратить непреднамеренные использования подмены электронной почты, спам и т.д. Я предпочитаю, чтобы вы связались с ними посмотрите, поддерживают ли они эту функцию.
Если вы уверены, что поставщик услуг поддерживает функцию mail(), вы можете проверить это руководство по PHP для дальнейшей справки,
PHP mail()
Чтобы проверить, поддерживает ли ваша служба хостинга функцию mail(), попробуйте запустить этот код, (не забудьте изменить адрес электронной почты получателя)
<?php
$to = '[email protected]';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: [email protected]' . "rn" .
'Reply-To: [email protected]' . "rn" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
Надеюсь, что это помогло.
Ответ 24
Вы можете использовать libmail: http://lwest.free.fr/doc/php/lib/index.php3?page=mail&lang=en
include "libmail.php";
$m = new Mail(); // create the mail
$m->From( $_POST['form'] );
$m->To( $_POST['to'] );
$m->Subject( $_POST['subject'] );
$m->Body( $_POST['body'] );
$m->Cc( $_POST['cc']);
$m->Priority(4);
// attach a file of type image/gif to be displayed in the message if possible
$m->Attach( "/home/leo/toto.gif", "image/gif", "inline" );
$m->Send(); // send the mail
echo "Mail was sent:"
echo $m->Get(); // show the mail source
Ответ 25
Установка sendmail для Debian 10.0.0 (‘Buster’) на самом деле была тривиальной!
php.ini
[mail function]
sendmail_path=/usr/sbin/sendmail -t -i
; (Other directives are mostly windows)
Стандартная установка пакета sendmail (с разрешением «отправить»):
su - # Install as user 'root'
dpkg --list # Is install necessary?
apt-get install sendmail sendmail-cf m4 # Note multiple package selection
sendmailconfig # Respond all 'Y' for new install
Разные полезные команды:
which sendmail # /usr/sbin/sendmail
which sendmailconfig # /usr/sbin/sendmailconfig
man sendmail # Documentation
systemctl restart sendmail # As and when required
Проверка (возможности отправки)
echo "Subject: sendmail test" | sendmail -v <yourEmail>@gmail.com
Выше заняло около 5 минут.
Тогда я потратил впустую 5 часов…
НЕ ЗАБУДЬТЕ ПРОВЕРИТЬ СВОЮ ПАПКУ СПАМА !!!!
Ответ 26
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'Sender <yoursite.com>';
$to = '[email protected]';
$subject = 'Customer Inquiry';
$body = "From: $namen E-Mail: $emailn Message:n $message";
$headers.='X-Mailer: PHP/' . phpversion().'rn';
$headers.= 'MIME-Version: 1.0' . "rn";
$headers.= 'Content-type: text/html; charset=iso-8859-1 rn';
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $headers,"-f$from")) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
Ответ 27
вы можете увидеть свои ошибки по
error_reporting(E_ALL);
и мой пример кода
<?php
use PHPMailerPHPMailerPHPMailer;
require 'PHPMailer.php';
require 'SMTP.php';
require 'Exception.php';
$name=$_POST['name'];
$mailid=$_POST['mail'];
$mail = new PHPMailer;
$mail->IsSMTP();
$mail->SMTPDebug = 0; // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // Specify main and backup server
$mail->Port = 587; // Set the SMTP port
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = '[email protected]'; // SMTP username
$mail->Password = 'password'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted
$mail->From = '[email protected]';
$mail->FromName = 'name';
$mail->AddAddress($mailid,$name); // Name is optional
$mail->IsHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'Here is your message' ;
$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;
exit;
}
echo 'Message has been sent';
?>
Ответ 28
Почему вы не используете Papercut, вы можете проверить отправку почты на своем ПК без Интернета
вы должны использовать Papercut это простое приложение для проверки отправки почты. и вам не нужно ничего настраивать.
Просто запустите его и попробуйте отправить пробную почту:
test_sendmail.php
<?php
$to = "[email protected]";
$subject = "My subject";
$txt = "Hello world!";
$headers = "From: [email protected]" . "rn" .
"CC: [email protected]";
mail($to,$subject,$txt,$headers);
?>
и вы увидите следующее:
Ответ 29
Если ваша система sendmail работает, ваш код должен быть изменен следующим образом:
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$header ="
Content-Type: text/html; charset=UTF-8rn
MIME-Version: 1.0rn
From: "$name" <$email>rn
Reply-To: [email protected]rn
X-Mailer: yoursite.com mailerrn
";
$to = '"Contact" <[email protected]>';
$subject = 'Customer Inquiry';
$body =<<<EOB
<!DOCTYPE html>
<html>
<body>
$message
</body>
</html>
EOB;
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $header) !== false) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
Это позволяет отправлять электронные письма в формате HTML.
Интересный интерес:
- мы создали многострочную строку заголовка (каждая строка разделена rn);
- мы добавили Content-type, чтобы выразить, что мы возвращаем HTML, чтобы вы могли создавать более качественные электронные письма (вы можете добавить любой HTML-код, который вы хотите, включая CSS, к вашему сообщению, как это было бы на HTML-странице).
Примечание: синтаксис <<<EOB
требует, чтобы последний маркер EOB начинался как начало строки и не имел пробела или другого символа после точки с запятой.
Ответ 30
Если вы используете php mailer, вы можете использовать этот код, просто скопируйте и вставьте его, замените ***
данными и учетными данными. А также изменить значение имени входных данных.
<?php
require_once ("PHPMailer/PHPMailerAutoload.php");
$error = array();
//var_dump($_POST);
$message = $_POST['a'] . '<br>';
$message.= $_POST['b'] . '<br>';
$message.= $_POST['c'] . '<br>';
$message.= $_POST['d'] . '<br>';
$message.= $_POST['e'] . '<br>';
$message.= $_POST['f'] . '<br>';
$message.= $_POST['g'] . '<br>';
$message.= $_POST['h'] . '<br>';
$message.= $_POST['i'] . '<br>';
$message.= $_POST['j'] . '<br>';
$message.= $_POST['k'] . '<br>';
$subject = "Visitor Query";
$from = "******@******.com"; // example [email protected]
$password = '******';
$mail = new PHPMailer();
$body = $message;
$mail->IsSMTP();
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead
$mail->SMTPDebug = 0;
//$mail->Host = 'mail.******.com'; // sets SMTP server
$mail->Host = 'mail.******.com'; // sets SMTP server
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
//$mail->Port = 25;
$mail->Username = $from; // SMTP username
$mail->Password = $password; // SMTP password
$mail->AddAddress ( "******@gmail.com" );
$mail->AddReplyTo ( "******@gmail.com", "Team");
$mail->Subject = $subject;
$mail->Body = $message;
$mail->From = $from;
$mail->FromName = "Visitor Query";
$mail->ContentType = "text/html";
if (count($error == 0)) {
$mail->Send();
// echo "_________________wait_______for_______ our _______ reply !";
} else {
echo $error; // show error messages
//echo $result;
}
//header("location: index.php");
?>
I know that this question was asked before.
When I call the PHP mail() function, it returns true.
I checked my php.ini (I’v running CentOS):
SMTP = localhost
smtp_port = 25
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On
I read in a forum that I have to install sendmail. So I installed it. Now sites with a mail() function doesn’t load anymore. So I removed sendmail, and the mail() function returns true again, but doesn’t send the mail.
Any idea?
asked May 25, 2014 at 16:32
3
To send an email you need a SMTP server (local or remote). Actually your mail function just passes the mail to your SMTP server and is this one which really send your email.
In your php.ini appears this line
sendmail_path = /usr/sbin/sendmail -t -i
You should be aware if you use that configuration parameter (from manual):
If set, smtp, smtp_port and sendmail_from are ignored and the
specified command is executed.
But the most important thing here is you just uninstall sendmail so you can expect your mail goes nowhere. I know sendmail was giving you some problems, possibly configuration problems, but now your php.ini configuration is wrong.
How to solve it?
-
Start removing the sendmail_path parameter from the php.ini.
-
Install a simple to configure SMTP server like postfix.
-
Verify postfix is listening at port 22:
netstat -lnt
-
Try to send a mail from your php mail() function
-
Verify your mail has been sent correctly (check your /var/log/mail.log or /var/log/mail/mail.log files)
-
You also can verify the mail is not in the postfix queue:
postqueue -f
answered May 25, 2014 at 17:11
i had a similar problem to this; both mail()
and wp_mail()
functions were returning TRUE
, but no email was being sent to my xyz@yahoo.com Email account.
It turns out that Yahoo was blocking these emails as spam. I did not have captcha implemented on my form, and therefore many spam emails were being sent to yahoo which is why they blocked the emails. Emails were sent successfully, but Yahoo was marking them as spam.
make sure this is not the problem in your case.
OnlyMAJ
8198 silver badges21 bronze badges
answered May 15, 2015 at 21:15
3
Please check your DNS,
I get the same problem when test on localhost, but working on real host.
The problem is fake DNS, your email was blocked by google.
If you test with other email service (example: yahoo mail), you will receive as a spam mail.
I found it after check mail log
answered Aug 11, 2015 at 3:24
PythonPython
6595 silver badges5 bronze badges
2
I had a similar issue. Sendmail was in use. Note these things:
- Real sender is where sendmail installed (VPS often).
- From field in php mail script (supposed to match sender)
- MX records for the domain name (tells what sender to trust)
- Sendmail logs could tell a lot (
/var/mail
in my case). They indeed explain why true is returned despite message is not delivered.
In my case from
value in php script was incorrect as well as MX records that didn’t trust sender.
I want to mention another possible error is hostname from this guide that could be changed like
hostnamectl set-hostname domain.name
answered Nov 10, 2022 at 21:46
HebeHebe
6211 gold badge7 silver badges12 bronze badges
I had issues setting smtp, so i ended up using gmail. You can send mail with PEAR MAIL as instructed here:
$from = "NoReply <noreply@random.com>";
$to = "someone <someone@somemail.com>";
$subject = "my subject";
$body = "my body";
$host = "ssl://smtp.gmail.com";
$port = "465";
$username = "gmailaccount@gmail.com";
$password = "gmailpass";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);
If you use gmail, your $from will be replaced by the email address used to send it.
answered May 25, 2014 at 16:42
cdvv7788cdvv7788
2,0111 gold badge18 silver badges26 bronze badges
Не бывает такого, чтобы какое-то приложение или сервис в интернете работали идеально всегда – электронной почты это тоже касается, порой и в ней возникают какие-либо неполадки. Например, письма перестают отправляться. Сегодня я разберу основные причины появления данной проблемы на разных почтовых сервисах и опишу способы устранения.
Проверка настроек компьютера и браузера
В большинстве случаев проблема с отправкой возникает не на стороне сервера. Может, причина кроется в действиях пользователя: упущении каких-то элементарных шагов или их неправильном выполнении. Еще допустимо появление неполадок в настройках компьютера.
Чтобы узнать, почему не отправляется письмо, я рекомендую провести сначала вот такие действия на исключение типичных проблем:
- Очистка истории, кэша и cookies в браузере. В большинстве интернет-обозревателей все указанные действия можно провести с помощью одного инструмента, просто отметив галочки напротив нужных пунктов.
- Проверка правильности набранного адреса. Возможно, при наборе электронного адреса получателя была допущена ошибка. Если хотя бы один символ будет введен неправильно, ничего отправить не получится. Помните, что адрес почтового ящика может содержать только английский буквы, цифры и некоторые знаки. Точки в конце и пробелов в адресе быть не должно.
- Проверка интернет-соединения. Можно просто попробовать загрузить другой сайт. Если проблемы с сетью действительно имеются, рекомендую сначала перезагрузить модем/Wi-Fi роутер. Не помогло? Звоните провайдеру!
- Проверка работы браузера. Может, нужный вам почтовый сервис плохо работает именно в том интернет-обозревателе, которым вы на данный момент пользуетесь. Попробуйте войти в почту с другого браузера и снова отправить письмо.
А что делать, если после отправки приходит отчет о недоставленном сообщении? Возможно, что указанный вами электронный адрес на данный момент не существует.
Вот еще почему не отправляется электронное письмо – почтовый ящик недоступен по каким-либо причинам. Например, из-за переполненности (следует удалить старые письма) или появления проблем с почтовым сервером (лучше подождать некоторое время, как минимум полчаса, и повторить отправку письма).
Если ни одно вышеуказанное действие не помогло, значит, пора разбираться с вашим почтовым сервисом.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Письма не отправляются с ящика Gmail
Данный почтовый сервис используется чаще всего для распространения рассылок или в рабочих целях. Поэтому в нем очень редко возникают проблемы в плане отправки писем. И то в таких ситуациях присылается сначала сообщение об ошибке. Если со стороны сервиса и возникают неполадки, сотрудники в кратчайшие сроки устранят проблемы.
Когда вы грузите какой-то файл в качестве вложения к письму, сервис может заблокировать его в целях безопасности.
А вот почему не отправляются письма с телефона? В таких ситуациях проблемы возникают тогда, когда на используемом клиентом устройстве недостаточно памяти.
Если вам не удалось выяснить, почему с почты не отправляются письма, лучше повторно очистите данные браузера, проверьте корректность введенных данных и соединение с сетью.
Когда ничего не помогает, рекомендую обратиться в службу технической поддержки почтового сервиса Gmail. При этом следует подробно описать суть проблемы, желательно приложив скриншоты.
Проблема с Mail.Ru
В Mail.Ru тоже проблемы с доставкой сообщений встречаются очень редко. При неудачной отправке письма можно попробовать повторно провести операцию, обычно это помогает.
Еще один вариант – к письму был приложен файл большого объема. Он либо превышает установленные ограничения сервиса Мэйл.Ру, либо из-за низкой скорости интернета не загружается.
Если вы слишком часто посылаете со своего почтового ящика письма одинакового содержания, сервис может заподозрить вас в распространении спама. Такое бывает, когда ящик взламывают. Решить подобное можно прямо на сайте сервиса (обычно предлагается сменить пароль). Еще следует проверить папку «Исходящие» и узнать, какие именно письма отправлялись с вашего ящика.
Не помогло – обращайтесь в Помощь Mail.Ru. Переходите в раздел «Письма» и ищите соответствующий пункт. Потом отметьте тип проблемы и отправьте запрос. Сотрудники решат проблему.
Письма не уходят с Яндекс.Почты
Выяснить, почему не отправляется письма с почты Яндекса, очень просто. На этот сервис еще могут влиять дополнения или расширения, установленные в браузере. Для проверки нужно просто поочередно отключать их и проверять работу почты.
Если письмо попало в «Черновики», попробуйте отправить его повторно. Когда в письме есть вложения, отправка может занять просто немного больше времени.
Яндекс тоже допускает возможность некорректного отображения страницы и рекомендует в таком случае очищать кэш или удалять cookies. Бывают и задержки на серверах как получателя, так и пользователя. В таких ситуациях помогает только обращение в службу технической поддержки.
Проблемы с электронной почтой Rambler
Нетипичные проблемы в работе данного почтового сервиса практически не встречаются. Обычно все можно решить настройкой браузера или очисткой кэша. Еще это один из тех сервисов, в котором при отправке письма важны правильно выставленные дата и время.
Если ваш аккаунт был заблокирован, можно снять блокировку с помощью специального веб-сервиса. Выполнять это действие обязательно нужно через компьютер.
Любые другие неполадки можно легко решить обращением в службу технической поддержки. Желательно как можно более подробно описать ее характер и приложить скриншоты.
Проблемы с почтовыми клиентами
Множество людей пользуются специальными почтовыми клиентами. В таких приложениях можно принимать и отправлять сообщения с разных аккаунтов и от нескольких пользователей. Но даже тут не исключены проблемы в работе.
Microsoft Outlook
Если письмо в Microsoft Outlook не отправляется, сначала надо проверить нижнюю часть окна программы. Если в ней указано «Автономная работа», «Попытка подключения…» или «Отключено», значит, связь с сервером электронной почты не была установлена. Тут поможет повторная отправка письма.
Далее следует стандартная диагностика подключения к интернету и проверка наличия больших вложений в письме. Как уже известно, некоторые почтовые клиенты не поддерживают отправку файлов слишком больших размеров. Лучше грузить подобные файлы в облако и прикреплять в письме ссылку к нему.
Проблема с отправкой может настичь пользователя при недавней смене пароля. В Microsoft Outlook все меняется в «Настройках учетных записей». Влияние антивируса тоже не исключается.
Когда ничего из вышеперечисленного не помогает, следует восстановить программу Microsoft Outlook. Когда и восстановление не помогает, проверять следует уже профиль, с которого вы пытаетесь отправить сообщение.
eM Client
Решать проблемы с отправкой в клиенте eM стоит исходя из сообщения об ошибке. Для данной программы очень важна правильная конфигурация электронной почты. Решить подобную проблему можно изменением порта для SMTP-сервера на 465 с помощью SSL. Если это не сработает, стоит использовать порт 587 с TLS или порт 25 с SSL.
Еще eM Client может блокироваться популярными антивирусными программами. Ранее такое происходило, но производители защитного ПО исправили проблему с выходом обновления. Должно помочь временное отключение антивируса или даже удаление.
В крайнем случае следует переустановить eM Client. Может быть, в момент установки возникли какие-то повреждения.
Заключение
При отправке письма тщательно проверяйте все данные и не отправляйте большие вложения. Проблемы с отправкой писем решаются также стандартной очисткой данных браузера или же перепроверкой введенных данных. Если в почтовом сервисе возникнут серьезные проблемы, вы не сможете как отправлять, так и получать письма, и затронет это не только вас.
Такие ошибки называются ошибками доставки, но чаще говорят просто – ошибки отправки. Поэтому для удобства в статье будем писать «ошибки отправки».
Если неправильно настроить сервер, параметры рассылки или использовать неактуализированную базу контактов, то могут возникать ошибки при отправке электронной почты. В статье собрали самые распространенные ошибки и описали возможные причины их возникновения.
Ошибка 500 – команда не распознана из-за синтаксической ошибки
- Антивирус или брандмауэр блокирует соединение сервера SMTP и возникает ошибка отправки email.
Ошибка 503 – неправильная последовательность команд
- Отсутствует аутентификация – проверьте настройки SMTP-сервера. Скорее всего, нужно пройти аутентификацию и заново ввести логин и пароль.
Ошибка 512 – неверный адрес получателя или ошибка DNS
- У какого-то из серверов проблема с DNS – свяжитесь с администратором сервера.
- Ошибка в доменном имени получателя – проверьте правильность написания домена в почте и исправьте ошибки. Это могут быть синтаксические ошибки типа yanded.ru или gmai.com.
Ошибка 513 – неверный адрес получателя или ошибка аутентификации
- Неправильный адрес получателя – проверьте ошибки в email-адресе и почту на существование. Скорее всего, нужно пройти аутентификацию и заново ввести логин и пароль.
Ошибка 523 – письмо слишком большое
- Получатель не может получить письмо, потому что оно очень большое – проверьте вес письма, в том числе и вложения, и оптимизируйте до стандартных размеров.
Ошибка 530 – нет доступа
- Отсутствует аутентификация – проверьте настройки SMTP-сервера, скорее всего нужно пройти аутентификацию и заново ввести логин и пароль.
- Получатель блокирует ваш IP-адрес – антивирус, файрвол или фильтр спама не пропускает сообщения от вас. Свяжитесь с получателем другим способом и попросите исключить вас из списка блокировки, чтобы устранить ошибку рассылки.
- Адрес не существует – проверьте почту на существование.
Ошибка 541 – сообщение распознано как спам
- Антиспам фильтр получателя распознал ваше письмо, как нежелательное – проверьте письмо на наличие контента, похожего на спам, попросите получателя добавить вас в «белый лист».
Ошибка 550 – почтовый ящик недоступен
- Неправильный адрес получателя – проверьте правильность написания адреса и почту на существование.
- Ошибка в настройке SMTP-сервера получателя – отправьте письмо на другой почтовый сервер. Если письмо доставлено без ошибки, свяжитесь с получателем другим способом и сообщите о проблеме с его сервером.
- Антиспам фильтр получателя распознал ваше письмо, как нежелательное – проверьте письмо на наличие контента, похожего на спам.
- В вашей системе вирус, который отправляет массовые рассылки – сделайте сканирование антивирусом.
- Ваш провайдер ограничивает рассылку исходящих сообщений – свяжитесь с провайдером и уточните, есть ли такие ограничения.
Ошибка 552 – превышено распределение памяти
- У получателя заполнен ящик, новые сообщения не поступают – свяжитесь с получателем другим способом и сообщите о проблеме.
- Письмо слишком много весит, превышает лимиты администратора сети – проверьте вес письма и оптимизируйте его до стандартных размеров.
Ошибка 553 – ошибка в адресе почты
- Неправильный адрес получателя – проверьте ошибки в email-адресе и почту на существование.
- Нет подключения к интернету – иногда ошибка указывает на отсутствие стабильного подключения к провайдеру.
Ошибка 571 – ошибка на стороне получателя
- Получатель блокирует ваш IP-адрес – антивирус, файрвол или фильтр спама не пропускает сообщения от вас. Свяжитесь с получателем другим способом и попросите исключить вас из списка блокировки.
- Нет разрешения отправлять почту через промежуточный сервер, который связывает вас с получателем – свяжитесь с администратором сервера, чтобы изменить настройки.
- Не настроен DNS у IP отправителя – проверьте настройки получения писем и разрешения для доменов-отправителей.
В редких случаях ошибка может означать, что:
- Система распознала в письме запрещенные данные. Например, конфиденциальную или защищенную информацию: номера карт, личные данные и прочее. В этом случае для устранения ошибки отправки электронной почты надо пересмотреть контент письма.
- Этому адресату нельзя отправить письмо. Некоторым получателям можно отправлять письма только в составе установленной группы.
Почти все перечисленные ошибки связаны с неправильным адресом почты и ошибками в настройке сервера. Всего этого можно избежать при работе с сервисами рассылки.
Если у вас постоянно возникают такие ошибки — воспользуйтесь Sendsay. В сервисе есть база знаний с инструкциями по настройке всех ключевых параметров для рассылки, платные услуги настройки сервисов и доменов, а также служба поддержки, которая всегда готова помочь.
Подпишитесь
на новости блога
Статьи, кейсы и чек-листы по digital-маркетингу от ведущих экспертов рынка
Присоединяйтесь к нам в соцсетях
Содержание
- Не отправляются письма по электронной почте
- Яндекс Почта
- Mail.ru
- Gmail
- Rambler
- Вопросы и ответы
Ни один проект в сети интернет, как известно, не способен стабильно работать у всех пользователей без исключений в течение нескончаемого периода времени. Из-за возникающих у людей ошибок в процессе отправки писем через почтовые сервисы становится актуальной тема разрешения такого рода трудностей.
Не отправляются письма по электронной почте
Первым делом необходимо обратить ваше внимание на то, что почтовые сервисы в подавляющем большинстве не имеют проблем на серверной стороне. То есть, если вы не можете отправить какое-либо письмо по имейл, причина наверняка кроется в ваших действиях и оборудовании, и никак не связана с действиями технических специалистов ресурса.
Прежде чем перейти к детальному разбору проблем каждого наиболее популярного сервиса, вам следует предварительно выполнить несколько действий.
- Произведите очистку истории и файлов кэша в используемом интернет-обозревателе.
- Выполните несколько тестов скорости интернет-соединения, исключив проблемы с сетью.
- При необходимости выполните оптимизацию подключения к сети, не забывая про перезагрузку интернета.
- Можно попробовать временно заменить предпочтительный браузер на какую-либо другую аналогичную программу.
Подробнее:
Как очистить историю в Яндекс.Браузере, Google Chrome, Opera, Mozilla Firefox
Как удалить кэш в Яндекс.Браузере, Гугл Хроме, Опере, Мазиле Фаерфокс
Подробнее:
Программы для проверки скорости интернета
Онлайн-проверка скорости интернет-соединения
Подробнее: Как увеличить скорость интернета в Windows 7 и Windows 10
Читайте также: Google Chrome, Opera, Mozilla Firefox, Яндекс.Браузер
Если вследствие выполнения всех вышеперечисленных рекомендаций у вас не получилось разрешить проблемы с отправкой писем, можете переходить к разбору ошибок в каждом отдельно взятом почтовом сервисе.
Яндекс Почта
Затрагивая почтовый сервис Яндекс важно заметить, что данный ресурс позволяет пользоваться системой подключения собственного доменного имени и отправлять любые сообщения от лица нужного имейла. Вследствие указанной особенности любые проблемы с отправкой почты со сторонним доменном могут исходить от недействительности зарегистрированного адреса.
Подробнее: Почему не отправляются письма на Яндекс.Почте
Кроме сказанного, ошибка при пересылке почты вполне может быть связана с прекращением работы домена, его блокировкой или неправильными настройками. Таким образом, если вы столкнулись с трудностями такого рода во время использования собственного домена, проверьте его на предмет работоспособности.
Проблемы с недействительным доменным именем также распространяются на владельцев обычных почтовых ящиков. Однако шанс возникновения ситуации с блокировкой пользователя в системе Яндекс крайне низок.
Что же касается общих проблем, ошибки с отправкой, скорее всего, происходят от браузера или блокировки со стороны получателя. Решить их можно путем чистки обозревателя и при ликвидации факта блока на стороне адресата.
Вы всегда можете обратиться за помощью по проблемам подобного рода к техническими специалистам Яндекс.Почты.
Подробнее: Как написать в техподдержку Яндекс.Почты
Mail.ru
Сервис по обмену электронными письмами Мэил.ру имеет проблемы с доставкой сообщений адресату в редком числе случаев. При этом разрешить практически любые проблемные ситуации можно одним наиболее верным методом – использованием специальных почтовых программ.
Обращаем ваше внимание на то, что при неуспешной отправке почты другому пользователю может потребоваться повторная пересылка.
Зачастую такие сервисы как Gmail в автоматическом режиме из-за сильных отличий в работе заносят письма с доменных имен площадки Mail.ru в папку «Спам» у получателя.
Многие пользователи также сталкиваются с трудностями на почве некорректной работы используемого интернет-обозревателя. Как от этого избавиться, мы рассказали в начале данной статьи.
Если у вас не получается решить возникающие трудности, создайте обращение в техническую поддержку почтового сервиса Mail.ru.
Читайте также: Что делать, если почта Мэил.ру не открывается
Gmail
Почтовый сервис от компании Google, как известно, больше нацелен на людей, использующих почту для организации рассылки или работы. Ввиду этого Gmail гарантирует практически полное отсутствие проблем с отправкой писем, о возникновении которых вы сможете узнать в кратчайшие сроки.
Если вы оказались в числе тех пользователей сервиса Gmail, сообщения которых перестали достигать адресата или вовсе отправляться, следует выполнить рекомендации по очистке браузера.
Вам также следует полностью исключить возможность общих проблем, состоящих, например, в использовании несуществующих данных.
У пользователей, которым не доходят ваши письма, могут быть некоторого рода ограничения на электронном ящике. Зачастую сводится это к автоматической фильтрации писем или из-за достижения максимального количества хранимой на аккаунте почты.
При неудачных попытках избежать ошибок, следует поступить наиболее разумным способом – обратиться к техническим специалистам почтового сервиса Gmail, предоставив соответствующие скриншоты.
Rambler
Сервис пересылки писем Рамблер по части возникающих у пользователей проблем не сильно отличается от ранее названых ресурсов. В частности это касается необходимости предварительной проверки браузера на стабильность в работе.
Отличительной чертой системы Rambler является наличие настроек ящика в специальном разделе. Только при выставлении настроек должным образом можно избежать большинства проблем с данным сервисом.
Если у вас, несмотря на манипуляции над ящиком, все равно возникают ошибки, рекомендуется составить обращение в техподдержку системы Rambler.
Читайте также: Почему не работает Рамблер почта
В завершение данной статьи можно лишь сказать, что по большей части проблемы с отправкой почты из различных сервисов имеют схожий характер. Более того, методы разрешения ошибок в одной из систем вполне могут подойти некоторым другим сайтам.
/public/img/default_profile_50.png
Статья была полезной?
Если сообщение не было доставлено получателю, то ему будет присвоен один из следующих статусов:
- Отменено/Запрещено — если отправка сообщения ограничена со стороны внутреннего функционала GetCourse. Например, пользователь забанен, отписался от категории или перестал удовлетворять условию рассылки.
- Ошибка — если сообщение было отклонено почтовым сервером. В таком случае в аккаунт поступит отчет с текстовым описанием ошибки. Проанализировав ошибку, можно понять причину, по которой сообщение не было доставлено.
В статье разберем основные виды ошибок при отправке email-рассылок и рекомендации по работе с ними.
Пример возвращенной ошибки. В деталях ошибки видим, что почтовый ящик пользователя был переполнен.
Ссылка на это место страницы:
#main
Текстовое описание одной и той же ошибки может отличаться в зависимости от почтового сервиса, который ее возвращает. Например ошибки:
- Mailbox does not exist. We do not relay
- No such user!
Означают, что эл. адрес пользователя не существует.
В статье мы перечислили известные описания ошибок и условно поделили их на несколько категорий:
- Ошибки в названии электронных ящиков
- Ошибки в названии домена или его настройках
- Почтовый ящик пользователя переполнен или заблокирован
- Попадание в спам на почтовом сервисе
- Грейлистинг (серый список)
- Ошибки, связанные с неправильной настройкой доменной почты
- Попадание IP-адреса в черный список
Чтобы быстро найти значение вашей ошибки в статье, воспользуйтесь поиском по странице (ctrl+F). Для этого введите значение ошибки, как показано в слайдере ниже:
Ссылка на это место страницы:
#incorrect_address
Примеры ошибок:
- Mailbox does not exist. We do not relay
- No such user!
- Unknown user
- Recipient address rejected: User unknown in local recipient table
- The email account that you tried to reach does not exist
- sorry, no mailbox here by that name
- no mailbox by that name is currently available
- Requested action not taken: mailbox unavailable
- Message was not accepted — invalid mailbox
- Bad recipient address syntax
- Bad address mailbox syntax
- No correct recipients
- We do not relay without RFC2554 authentication
Рекомендации:
Попробуйте связаться с получателем альтернативным способом связи, чтобы уточнить корректный электронный адрес. Затем поменяйте email в карточке. Как это сделать, смотрите в слайдере:
Ссылка на это место страницы:
#receive
Ссылка на это место страницы:
#specific
Ссылка на это место страницы:
#no_connection
- MX lookup failed for […]
Данная ошибка указывает на проблемы с MX-записью домена, на который отправлялось письмо, либо по каким-то причинам не удалось проверить его MX-запись. Возможно, при регистрации пользователь указал некорректный адрес почты. Повторные попытки отправки сообщений при получении данной ошибки не производятся.
Если не удалось связаться с почтовым сервером, то вернутся следующие ошибки:
- Called MAIL FROM without being connected
- SMTP connect() failed
- RCPT TO command failed
Причины и рекомендации:
- Опечатки в электронных адресах
- Ограничения со стороны корпоративных доменов
- Общие рекомендации по базе электронных адресов
Ссылка на это место страницы:
#errors
При регистрации пользователь может указать электронный адрес с опечаткой. Сообщение на такой адрес доставить не получиться. Наиболее часто встречающимися опечатками являются:
- mail.ri — вместо mail.ru
- gmail.ru — вместо gmail.com
- yndex.ru — вместо yandex.ru
Рекомендации:
Периодически проверять базу пользователей на опечатки в электронных адресах и менять им почту.
Обратите внимание: электронная почта пользователя указана корректно, если она подтверждена. То есть чем больше % пользователей в вашей клиентской базе, которые подтвердили свою почту, тем меньше будет ошибок в адресах при отправке рассылок «по адресам, где дано разрешение на рассылки». И соответственно, выше доставляемость сообщений.
Ссылка на это место страницы:
#corp
Корпоративные ящики — это почтовые ящики с доменами, принадлежащими университетам, магазинам, государственным предприятиям и предназначенные только для их сотрудников. Например, @hh.ru.
Корпоративные ящики чаще всего имеют свои почтовые сервера, индивидуальные спам-фильтры или другие настройки, которые могут влиять на доставляемость сообщений.
Рекомендации:
- Самостоятельно связаться с владельцами корпоративного домена, привести пример ошибки и уточнить, почему ваши сообщения не принимаются.
- Если пользователей с таким доменом в аккаунте немного, то наиболее оптимальным решением будет узнать у пользователя альтернативную почту на более популярном сервисе (gmail.com, yandex.ru, mail.ru) и сменить ее в карточке пользователя.
Ссылка на это место страницы:
#popular
В качестве электронных почт пользователей рекомендуем использовать наиболее популярные почтовые сервисы, такие как mail.ru, gmail.com или yandex.ru. Это очень распространённые и надёжные почтовые сервисы с высокой доставляемостью сообщений.
Важно: Для снижения рисков попадания рассылок в спам отправляйте рассылки «по адресам, где дано разрешение на рассылки». Такие пользователи предоставили прямое согласие на получение рассылок, а их адреса точно не содержат ошибок. Поэтому важно не только собирать базу качественных электронных адресов, но и подтверждать их с помощью письма DOI.
Ссылка на это место страницы:
#temp
Также не рекомендуем использовать в качестве электронных адресов временные почтовые ящики. Временный ящик — ящик, который не требует регистрации и позволяет принимать электронные письма, которые будут удалены через определенный срок. Например, @yopmail.com или @maildrop.cc.
Как правило, такие ящики обладают рядом ограничений. Например, могут не поддерживать html-версию письма или не восприниматься почтовыми службами как надежные получатели, так как не принадлежат реальным пользователям. Поэтому отправка на них рассылок может привести к снижению репутации отправителя, а, следовательно, снизить доставляемость ваших сообщений.
Важно: вход во временные ящики осуществляется без пароля, поэтому их содержимое может просмотреть любой пользователь. Подобные электронные почты не рекомендуется использовать в качестве почт пользователей и сотрудникам (например, для тестирования).
Рекомендации:
Отписывать от рассылок или удалять из базы пользователей с временными почтами.
Ссылка на это место страницы:
#overflowing_box
Примеры ошибок, возвращающихся при отправке на переполненные ящики:
- Mailbox size limit exceeded.
- Mailbox size exceeded
- User is overquota
- The email account that you tried to reach is over quota
Примеры ошибок, возвращающихся при отправке на заблокированные ящики:
- Mailbox […] is locked due to inactivity for more than […] months
- Аccess to this account (user) […] is disabled
- Mailbox is disabled
Причины:
Подобные ошибки означают, что в почтовом ящике получателя нет места, чтобы принять ваше сообщение. Чаще всего это происходит потому, что получатель редко пользуется ящиком и ящик переполняется рассылками. Подобные адреса также могут быть преобразованы в спам-ловушки, отправка на которые приводит к значительному ухудшению репутации отправителя.
Ссылка на это место страницы:
#disabled
Рекомендации:
Попробуйте связаться с получателем альтернативным способом связи и сообщить о проблеме. Если связаться не удается, вы можете отписать пользователя от получения рассылок. Рекомендуется периодически отписывать от рассылок пользователей, которые не читают ваших сообщений.
Ссылка на это место страницы:
#spam
Примеры попадания в спам:
- IP […] Our system has detected an unusual rate of unsolicited mail originating from your IP address. To protect our users from spam, mail sent from your IP address has been temporarily rate limited — такая ошибка возвращается почтовым сервисом Gmail в случае если Google заподозрил отправку слишком большого числа подозрительных писем (спама) с IP адреса отправителя. В этом случае Google включает временное ограничение на количество принимаемых писем.
- Message rejected under suspicion of SPAM
- Client host […] blocked using spamsource.mail.yandex.net
- Blocked by spam statistics
- 550 spam message discarded/rejected
Причины:
При отправке сообщений из аккаунта вероятнее всего не были соблюдены рекомендации для высокой доставляемости. Например, не производился прогрев отправляющего домена или велись рассылки по базе пользователей, которые не давали своего согласия на их получения.
Ссылка на это место страницы:
#graylisting
Примеры ошибок:
- Greylisting in action, please come back later
- Greylisted, try again after some time
- Greylisted, try again in 180 seconds
- Sorry, the service is currently unavailable. Please come back later
- Temporary local problem — please try later
- Try again later
Грейслистинг (серые списки) — это способ автоматической блокировки спама. Принцип работы данного способа заключается в следующем: если почтовому сервису кажется подозрительным принимаемое им письмо, то он может не принять его и попросить переотправить сообщение позже.
Рекомендации:
На платформе GetCourse подобные запроса распознаются и письмо переотправляется автоматически позже. Спамерское программное обеспечение в таких случаях, обычно, не пытается переотправить письмо, и их сообщения не доходят.
Однако если письмо после 5 попыток переотправки снова вернулось с ошибкой, система фиксирует текст ошибки и больше не делает попыток переотправки. В этом случае письмо можно переотправить через некоторое время вручную.
Ссылка на это место страницы:
#mail_settings
- non-local sender verification failed — обычно такая ошибка возвращается почтовым сервисом Gmail или Mail.ru. При появлении данной ошибки необходимо проверить корректность SPF, DKIM и MX в DNS-зоне домена, с которого осуществляется отправка рассылок.
- Can’t verify […] sender. Check your DNS configuration — при появлении данной ошибки необходимо проверить корректность SPF и DKIM в DNS-зоне домена, с которого происходит отправка почты.
- sender domain SPF exact match mandatory for IP […]— ошибка в SPF-записи домена, с которого происходит отправка письма. Необходимо проверить корректность SPF-записи, или что присутствует только одна SPF-запись.
- This message was not accepted due to domain […] owner DMARC policy (RFC 7489) — сообщение было заблокировано из-за строгой политики DMARC почтового сервиса. Подробнее о настройке DMARC на GetCourse, читайте в отдельной статье.
Ссылка на это место страницы:
#IP_block
- rejected because IP[…] is in a blacklist-dns at […]
- Access denied, banned sending IP […]
- Connection closed. IP […] is listed in Blacklist
- [E-mail] blacklisted by […]
При получении подобных ошибок обратитесь к нам в техническую поддержку для дополнительной консультации.
Мы разобрали типичные ошибки при отправке email рассылок. Если ошибки возникают при отправке другими транспортами, рекомендации по их решению вы найдете в следующих статьях:
- Telegram
- SMS
- WhatsApp Business
- ВКонтакте
- Viber
- Facebook*
*принадлежит компании Meta, признанной экстремистской организацией и запрещенной в Российской Федерации.
68
68 people found this article helpful
Updated on August 21, 2021
Way too often, error messages are incomprehensible. This page will be your guide to the code mail servers produce when your email fails to send. If you receive an error message like, «Could not send your message. Error 421,» what’s your next step? Let this page be your guide to what to do next.
SMTP Error Codes: the Meaning Behind the Numbers
A mail server will reply to every request a client (such as your email program) makes with a return code. This code consists of three numbers.
The first generally indicates whether the server accepted the command and if it could handle it. The five possible values are:
- 1: The server has accepted the command, but does not yet take action. A confirmation message is required. Currently, this is not used.
- 2: The server has completed the task successfully.
- 3: The server has understood the request, but requires further information to complete it.
- 4: The server has encountered a temporary failure. If the command is repeated without any change, it might be completed. Mail servers can use such temporary failures to keep untrusted senders at bay.
- 5: The server has encountered an error.
The second number gives more information. It’s six possible values are:
- 0: A syntax error has occurred.
- 1: Indicates an informational reply, for example to a HELP request.
- 2: Refers to the connection status.
- 3 and 4 are unspecified.
- 5: Refers to the status of the mail system as a whole and the mail server in particular.
The last number is even more specific and shows more graduations of the mail transfer status.
The most common SMTP error code when sending email is 550.
SMTP error 550 is a generic error message. It means the email could not be delivered.
An SMTP error 550 delivery failure happen for a variety of reasons; while the error code 550 itself tells you nothing about the cause of failure, many an SMTP server includes an explanatory message with the error code.
Variations of SMTP 550
Often, an email could not be delivered because it has been blocked as spam, either through an analysis of its contents or because the sender—or sender’s network—is listed as a probable source of spam in a DNS blocklist. Some mail servers check for links to malware as well and return an error 550. SMTP error 550 codes for these cases include:
- 550 5.7.1: Service unavailable: client [###] blocked using ### (Exchange Server)
- 550 5.7.1: Message rejected as spam by Content Filtering (Exchange Server)
- 550 This message was classified as SPAM and may not be delivered
- 550 High probability of spam (Gmail)
- 550 5.2.1 mail from refused spam site
- 550 Your message has been rejected because you have been detected sending spam (Sending from Rackspace)
- 550 Message contained unsafe content
What can you do? If possible, try to contact the recipient by other means. If the error message points to a specific blocklist or spam filter, do try to contact the list or filter administrator. Failing all this, you can always explain the unfortunate situation to your email provider. They may be able to contact their colleague at the receiving end and get the situation sorted.
List of SMTP Error Codes (With Explanations)
An SMTP error’s three numbers get us a detailed list of ESMTP/SMTP server response codes, as laid down in RFC 821 and later extensions:
- 211 — A system status message.
- 214 — A help message for a human reader follows.
- 220 — SMTP Service ready.
- 221 — Service closing.
- 250 — Requested action taken and completed. The best message of them all.
- 251 — The recipient is not local to the server, but the server will accept and forward the message.
- 252 — The recipient cannot be VRFYed, but the server accepts the message and attempts delivery.
- 354 — Start message input and end with .. This indicates that the server is ready to accept the message itself (after you have told it who it is from and where you want to to go).
- 421 — The service is not available and the connection will be closed.
- 450 — The requested command failed because the user’s mailbox was unavailable (for example because it was locked). Try again later.
- 451 — The command has been aborted due to a server error. Not your fault. Maybe let the admin know.
- 452 — The command has been aborted because the server has insufficient system storage.
- 455 — The server cannot deal with the command at this time.
Got SMTP 550: Permanent Failure for One or More Recipients?
The following error messages (500-504) usually tell you that your email client is broken or, most commonly, that your email could not be delivered for one reason or another.
- 500 — The server could not recognize the command due to a syntax error.
- 501 — A syntax error was encountered in command arguments.
- 502 — This command is not implemented.
- 503 — The server has encountered a bad sequence of commands.
- 504 — A command parameter is not implemented.
- 521 — This host never accepts mail; a response by a dummy server.
- 541 — The message could not be delivered for policy reasons—typically a spam filter. (Only some SMTP servers return this error code.)
- 550 — The requested command failed because the user’s mailbox was unavailable (for example because it was not found, or because the command was rejected for policy reasons).
- 551 — The recipient is not local to the server. The server then gives a forward address to try.
- 552 — The action was aborted due to exceeded storage allocation.
- 553 — The command was aborted because the mailbox name is invalid.
- 554 — The transaction failed. Blame it on the weather.
- 555 — The server does not recognize the email address format, and delivery is not possible.
- 556 — The message would have to be forwarded, but the receiving server will reject it.
Thanks for letting us know!
Get the Latest Tech News Delivered Every Day
Subscribe
68
68 people found this article helpful
Updated on August 21, 2021
Way too often, error messages are incomprehensible. This page will be your guide to the code mail servers produce when your email fails to send. If you receive an error message like, «Could not send your message. Error 421,» what’s your next step? Let this page be your guide to what to do next.
SMTP Error Codes: the Meaning Behind the Numbers
A mail server will reply to every request a client (such as your email program) makes with a return code. This code consists of three numbers.
The first generally indicates whether the server accepted the command and if it could handle it. The five possible values are:
- 1: The server has accepted the command, but does not yet take action. A confirmation message is required. Currently, this is not used.
- 2: The server has completed the task successfully.
- 3: The server has understood the request, but requires further information to complete it.
- 4: The server has encountered a temporary failure. If the command is repeated without any change, it might be completed. Mail servers can use such temporary failures to keep untrusted senders at bay.
- 5: The server has encountered an error.
The second number gives more information. It’s six possible values are:
- 0: A syntax error has occurred.
- 1: Indicates an informational reply, for example to a HELP request.
- 2: Refers to the connection status.
- 3 and 4 are unspecified.
- 5: Refers to the status of the mail system as a whole and the mail server in particular.
The last number is even more specific and shows more graduations of the mail transfer status.
The most common SMTP error code when sending email is 550.
SMTP error 550 is a generic error message. It means the email could not be delivered.
An SMTP error 550 delivery failure happen for a variety of reasons; while the error code 550 itself tells you nothing about the cause of failure, many an SMTP server includes an explanatory message with the error code.
Variations of SMTP 550
Often, an email could not be delivered because it has been blocked as spam, either through an analysis of its contents or because the sender—or sender’s network—is listed as a probable source of spam in a DNS blocklist. Some mail servers check for links to malware as well and return an error 550. SMTP error 550 codes for these cases include:
- 550 5.7.1: Service unavailable: client [###] blocked using ### (Exchange Server)
- 550 5.7.1: Message rejected as spam by Content Filtering (Exchange Server)
- 550 This message was classified as SPAM and may not be delivered
- 550 High probability of spam (Gmail)
- 550 5.2.1 mail from refused spam site
- 550 Your message has been rejected because you have been detected sending spam (Sending from Rackspace)
- 550 Message contained unsafe content
What can you do? If possible, try to contact the recipient by other means. If the error message points to a specific blocklist or spam filter, do try to contact the list or filter administrator. Failing all this, you can always explain the unfortunate situation to your email provider. They may be able to contact their colleague at the receiving end and get the situation sorted.
List of SMTP Error Codes (With Explanations)
An SMTP error’s three numbers get us a detailed list of ESMTP/SMTP server response codes, as laid down in RFC 821 and later extensions:
- 211 — A system status message.
- 214 — A help message for a human reader follows.
- 220 — SMTP Service ready.
- 221 — Service closing.
- 250 — Requested action taken and completed. The best message of them all.
- 251 — The recipient is not local to the server, but the server will accept and forward the message.
- 252 — The recipient cannot be VRFYed, but the server accepts the message and attempts delivery.
- 354 — Start message input and end with .. This indicates that the server is ready to accept the message itself (after you have told it who it is from and where you want to to go).
- 421 — The service is not available and the connection will be closed.
- 450 — The requested command failed because the user’s mailbox was unavailable (for example because it was locked). Try again later.
- 451 — The command has been aborted due to a server error. Not your fault. Maybe let the admin know.
- 452 — The command has been aborted because the server has insufficient system storage.
- 455 — The server cannot deal with the command at this time.
Got SMTP 550: Permanent Failure for One or More Recipients?
The following error messages (500-504) usually tell you that your email client is broken or, most commonly, that your email could not be delivered for one reason or another.
- 500 — The server could not recognize the command due to a syntax error.
- 501 — A syntax error was encountered in command arguments.
- 502 — This command is not implemented.
- 503 — The server has encountered a bad sequence of commands.
- 504 — A command parameter is not implemented.
- 521 — This host never accepts mail; a response by a dummy server.
- 541 — The message could not be delivered for policy reasons—typically a spam filter. (Only some SMTP servers return this error code.)
- 550 — The requested command failed because the user’s mailbox was unavailable (for example because it was not found, or because the command was rejected for policy reasons).
- 551 — The recipient is not local to the server. The server then gives a forward address to try.
- 552 — The action was aborted due to exceeded storage allocation.
- 553 — The command was aborted because the mailbox name is invalid.
- 554 — The transaction failed. Blame it on the weather.
- 555 — The server does not recognize the email address format, and delivery is not possible.
- 556 — The message would have to be forwarded, but the receiving server will reject it.
Thanks for letting us know!
Get the Latest Tech News Delivered Every Day
Subscribe
На чтение 5 мин. Просмотров 2.2k. Опубликовано 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 . Сообщение необходимо переслать, но принимающий сервер отклонит его.
Ошибки почтового сервера
Содержание статьи:
- Пошаговая проверка почтового сервера
- Коды ошибок почтовых серверов и как устранить эти ошибки
- Ошибка почтового сервера 421
- Почтовый сервер ответил 451
- Ошибка почтового сервера 452
- Ошибка почтового сервера 550
- Почтовый сервер ответил 571
- Сертификат почтового сервера недействителен
Иногда в работе электронной почты возникают ошибки. Чаще всего они проявляются в том, что пользователи не могут отправить или получить письмо, получают сообщение “Не удалось подключиться к почтовому серверу”. Причины некоторых ошибок почтового сервера легко найти, для других потребуется тщательная диагностика настроек почтового сервера. Эта статья призвана помочь в поиске и устранении таких ошибок.
Пошаговая проверка почтового сервера
В первую очередь надо убедиться, что проблема именно на сервере, а не где-либо еще. Для этого попробуйте отправить себе несколько тестовых писем на тот же адрес электронной почты и на внешние почтовые сервисы, такие как Gmail*. Если вы успешно получите тестовое письмо, то ответьте на него, чтобы проверить отправку и прием почты.
- Если вы сразу же получили сообщение об ошибке подключения к почтовому серверу, как только попытались отправить или получить письмо, это свидетельствует, что проблема действительно с сервером. Отметьте себе код ошибки, далее мы расскажем о них подробнее.
- Письмо было отправлено, но затем возвращено, вы получили так называемое bounced message — сообщение о том, что письмо было не доставлено по какой-либо причине. Чаще всего в тексте сообщения указывается эта причина (например, письмо слишком похоже на спам или почтовый сервер imap mail не отвечает), попробуйте устранить её.
- Почтовый сервер не отвечает, при отправке ошибок не было, но вы не получили письмо в течение нескольких минут. В первую очередь проверьте папку “Спам”, возможно, оно попало туда. Если нет, то перепроверьте настройки почтового клиента.
- Если вы без проблем отправляете и получаете тестовые письма, скорее всего проблема не в почтовом сервере, а в работе сети.
Рекомендуем также проверить доступность почтового сервера хотя бы одним из бесплатных инструментов для проверки почтового сервера онлайн:
- https://mxtoolbox.com
- https://www.ultratools.com
- http://mail2web.com/
Эти сервисы пробуют подключиться к вашему почтовому серверу по SMTP, замеряют время отклика, подтверждают, что у него есть запись обратной зоны DNS почтового сервера. С их помощью можно диагностировать некоторые ошибки службы почтовых серверов или проверить, не занесен ли почтовый сервер в черные списки из-за спама.
Коды ошибок почтовых серверов и как устранить эти ошибки:
Ошибка почтового сервера 421
- проблема может возникнуть из-за неправильно заданных параметров SMTP-соединения, перепроверьте их настройки
- брандмауэр блокирует IP сервера электронной почты, в таком случае надо добавить новое правило для него
- блокируется трафик через порт 25. Попробуйте в настройках учетной записи электронной почты сменить номер порта SMTP на 465
- ошибка вызвана использованием VPN — попробуйте отключить VPN и отправить письмо. Если проблема была в этом, то необходимо, чтобы провайдер услуги занес ваш почтовый сервер в белый список адресов VPN
Почтовый сервер ответил 451
Возможные причины:
- превышено количество допустимых подключений или лимит обмена сообщениями за отрезок времени, в таком случае письма просто ждут в очереди отправки. В настройках сервера вы можете увеличить этот лимит или задать ограничение не на количество подключений к серверу, а на количество писем на одного пользователя. Если никакой вредоносной деятельности вы не обнаружили, то можете отправить накопившуюся очередь писем командой принудительной отправки (force send).
- неправильно настроенные MX-записи домена и неправильная маршрутизация писем вследствие этого. Проверьте логи, конфигурационные файлы, МХ-записи и разрешения, чтобы установить причину ошибки
Ошибка почтового сервера 452
- вероятно, ошибка не на вашей стороне — на сервере получателя закончилось место, поэтому письмо не доставляется. Проверьте, получается ли отправлять письма на другие сервера
- если в сообщении об ошибке есть текст “Out of memory”, то места не хватает на вашем сервере. Проверьте количество писем в очереди, свободное место на диске и объем доступной памяти
Ошибка почтового сервера 550
- указан неправильный адрес почты получателя, уточните, действующий ли он и правильно ли вы его написали
- неправильные настройки сервера SMTP
- есть подозрение, что ваша система заражена вирусом, который автоматически рассылает письма. Выполните проверку специализированным антивирусом, например, Kaspersky для почтовых серверов
- провайдер установил ограничения на исходящие сообщения. Свяжитесь с техподдержкой провайдера и вам подскажут, что делать в таком случае
Почтовый сервер ответил 571
Ошибка при получении почты (на стороне получателя). Причины:
- IP отправителя заблокирован на стороне получателя спам-фильтром, антивирусом или фаерволом, текст сообщения об ошибке будет похож на такой: “Почтовый сервер ответил: spam message rejected”. Если вы отправляете тестовое письмо себе, попробуйте отключить это ПО и проверьте отправку/получение писем без него
- у IP отправителя нет RDNS
- отправитель занесен в спам-лист, фильтры сообщений получателя не пропускают письмо
Чтобы устранить ошибку, проверьте настройки получения писем и в особенности разрешения для доменов-отправителей.
Сертификат почтового сервера недействителен
Проверьте, вероятно, пришло время обновить сертификаты.
Мы надеемся, что этот материал был вам полезен. Иногда найти ошибку очень трудно, для этого приходится изучать логи электронной почты, её маршрутизацию, параметры почтового сервера. Специалисты “Интегрус” готовы помочь в этом. Мы проведем аудит, обеспечим защиту почтового сервера, отсутствие спам-рассылок, установим почтовый сервер на Windows Server, почтовый сервер на Линукс, выполним настройку почтового сервера Postfix, настроим записи RDNS и SPF, устраним ошибки почтового сервера pop3 и другие.
Мы всегда готовы дать рекомендации по настройке и защите почтового сервера, так что если у вас есть вопросы, не откладывайте и обращайтесь к нам за консультацией.
* — компания нарушает законы РФ.
Присоединяйтесь к нам,
чтобы получать чек-листы, реальные кейсы, а также
обзоры сервисов раз в 2 недели.
Смотрите также:
Ошибка формата потока 1С
Одной из наиболее часто встречающихся ошибок при использовании и администрировании 1С является ошибка потока данных. Что это такое, как предотвратить ее возникновение и устранить здесь и сейчас?
Виды ошибок SQL Server
Полагаясь на свой обширный опыт администрирования компьютерных сетей, серверов, мы сформировали описание наиболее частых ошибок SQL-сервера, проблем, что могут возникнуть в работе с ним. Как их избежать, устранить, на что следует обратить внимание?
Виды ошибок терминального сервера
Как предотвратить, устранить аппаратные проблемы (ошибки «железа») терминального сервера? Полезные примеры по защите сервера для безопасности, производительности, скорости работы.
Основные проблемы серверов
Поиск и устранение ошибок в работе сервера (и другого «железа») является одним из основных направлений работы при администрировании серверов и сети. Как диагностировать ошибки, что делать в случае выявления неисправностей, при обнаружении поломок?
Какие ошибки бывают при внедрении CRM
На основе наших кейсов мы подготовили список наиболее часто встречаемых ошибок и проблем, что возникают при внедрении CRM систем и IP-телефонии на предприятиях, в офисах. От обучения менеджеров работе с CRM до реализации сложных маркетинговых стратегий.
Услуги ИТ аутсорсинга
Поручив нам IT аутсорсинг обслуживания компьютерного и сетевого оборудования, вы получите в свое распоряжение действительно высококвалифицированных специалистов и при этом сократите затраты на ИТ, как минимум, на 30-40%
Создание сервера базы данных
Специалисты компании “Интегрус” оказывают услуги администрирования серверов баз данных на аутсорсинге. Грамотная настройка и администрирование сервера базы данных важны для бизнеса не меньше, чем качественное аппаратное и программное обеспечение. Главное в администрировании серверов БД — правильные настройки и организация хранилища баз данных. Правильная организация серверов баз данных позволяет сотрудникам эффективно управлять информацией и использовать её…
Удаленная поддержка компьютеров и серверов
Абонентское и разовое обслуживание компьютеров для организаций удаленно. Техническая поддержка компьютеров и серверов, срочное решение возникающих проблем с аппаратным или программным обеспечением, при сбоях, вирусах, необходимости смены доступов, подключения пользователей, программ, оборудования
Хотя есть части этого ответа, которые применяются только к использованию самой функции mail()
, многие из этих шагов устранения неполадок могут быть применены к любой почтовой системе PHP.
Существует множество причин, по которым ваш скрипт не отправляет электронные письма. Трудно диагностировать эти вещи, если нет очевидной синтаксической ошибки. Без этого вам нужно пройти через контрольный список ниже, чтобы найти возможные потенциальные проблемы, с которыми вы можете столкнуться.
Убедитесь, что отчет об ошибках включен и установлен для сообщения обо всех ошибках
Отчеты об ошибках необходимы для устранения ошибок в коде и общих ошибок, с которыми сталкивается PHP. Для получения этих ошибок необходимо включить отчет об ошибках. Размещение следующего кода в верхней части ваших файлов PHP (или в файле главной конфигурации) позволит включить отчет об ошибках.
error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");
См. Этот ответ для получения дополнительной информации об этом.
Убедитесь, что функция mail()
вызывается
Это может показаться глупым, но распространенной ошибкой является забыть фактически разместить функцию mail()
в вашем коде. Удостоверьтесь, что он есть и не прокомментирован.
Убедитесь, что функция mail()
вызывается правильно
bool mail (string $ to, string $ subject, string $ message [, string $ дополнительные_headers [, string $ дополнительные_параметры]])
Функция почты принимает три обязательных параметра и, необязательно, четвертый и пятый. Если ваш вызов на mail()
не имеет по крайней мере трех параметров, он не сработает.
Если ваш запрос на mail()
не имеет правильных параметров в правильном порядке, он также потерпит неудачу.
Проверка почтовых журналов сервера
Ваш веб-сервер должен регистрировать все попытки отправки электронной почты через него. Расположение этих журналов будет отличаться (вам может потребоваться спросить администратора вашего сервера, где они находятся), но их обычно можно найти в корневом каталоге пользователя в logs
. Внутри будут сообщения об ошибках, сообщенные сервером, если таковые имеются, связанные с вашими попытками отправить электронную почту.
Проверка сбоя подключения к порту
Порт-блок — очень распространенная проблема, с которой сталкиваются большинство разработчиков, интегрируя свой код для доставки электронной почты с использованием SMTP. И это можно легко проследить на сервере maillogs (расположение сервера почтового журнала может варьироваться от сервера к серверу, как объяснялось выше). Если вы находитесь на сервере общедоступного хостинга, порты 25 и 587 по умолчанию остаются заблокированными. Этот блок специально предназначен вашим хостинг-провайдером. Это справедливо даже для некоторых выделенных серверов. Когда эти порты заблокированы, попробуйте подключиться с помощью порта 2525. Если вы обнаружите, что порт также заблокирован, единственное решение — связаться с вашим хостинг-провайдером, чтобы разблокировать эти порты.
Большинство хостинг-провайдеров блокируют эти почтовые порты, чтобы защитить свою сеть от отправки любых спам-писем.
Используйте порты 25 или 587 для соединений с обычным /TLS и с портом 465 для соединений SSL. Для большинства пользователей предлагается использовать порт 587, чтобы избежать ограничений по скорости, установленных некоторыми хостинг-провайдерами.
Не используйте оператор подавления ошибок
Когда оператор подавления ошибок @
добавляется к выражению в PHP, любые сообщения об ошибках, которые могут быть сгенерированы этим выражением, будут игнорироваться. Существуют обстоятельства, при которых использование этого оператора необходимо, но отправка почты не является одним из них.
Если ваш код содержит @mail(...)
вы можете скрывать важные сообщения об ошибках, которые помогут вам отладить это. Удалите @
и проверьте, не сообщаются ли какие-либо ошибки.
Это целесообразно только после проверки с error_get_last()
сразу для конкретных отказов.
Проверьте возвращаемое значение mail()
Функция mail()
:
Возвращает
TRUE
если почта была успешно принята к доставке, в противном случаеFALSE
. Важно отметить, что только потому, что почта была принята для доставки, это НЕ означает, что почта действительно достигнет предполагаемого адресата.
Это важно отметить, потому что:
- Если вы получили возвращаемое значение
FALSE
вы знаете, что ошибка заключается в том, что ваш сервер принимает вашу почту. Вероятно, это не проблема с кодировкой, а проблема конфигурации сервера. Вам нужно поговорить с вашим системным администратором, чтобы узнать, почему это происходит. - Если вы получите
TRUE
возвращаемое значение, это не означает, что ваш адрес электронной почты определенно будет отправлен. Это просто означает, что письмо было отправлено на соответствующий обработчик на сервере с помощью PHP. Есть еще больше проблем с ошибкой вне контроля PHP, которые могут привести к тому, что письмо не будет отправлено.
Таким образом, FALSE
поможет указать вам в правильном направлении, тогда как TRUE
не обязательно означает, что ваша электронная почта была успешно отправлена. Это важно отметить!
Убедитесь, что ваш хостинг-провайдер позволяет отправлять электронные письма и не ограничивает отправку почты
Многие общие веб-хосты, особенно бесплатные провайдеры веб-хостинга, не позволяют отправлять электронные письма со своих серверов или ограничивать количество, которое может быть отправлено в течение любого заданного периода времени. Это связано с их усилиями по ограничению спамеров от использования их более дешевых услуг.
Если вы считаете, что ваш хост имеет ограничения по электронной почте или блокирует отправку электронных писем, проверьте их часто задаваемые вопросы, чтобы узнать, перечисляют ли они такие ограничения. В противном случае вам может потребоваться обратиться к их поддержке, чтобы проверить, существуют ли какие-либо ограничения в отношении отправки электронных писем.
Проверьте папки спама; предотвращать помехи от сообщений электронной почты как спам
Зачастую по различным причинам электронные письма, отправленные через PHP (и другие языки программирования на стороне сервера), попадают в папку спама получателя. Всегда проверяйте их перед тем, как устранить неисправность вашего кода.
Чтобы избежать отправки почты, отправленной через PHP, в папку спама-получателя, вы можете делать различные действия, как в вашем PHP-коде, так и в других целях, чтобы минимизировать вероятность того, что ваши письма будут помечены как спам. Хорошие советы от Michiel de Mare включают:
- Используйте методы проверки подлинности электронной почты, такие как SPF и DKIM, чтобы доказать, что ваши электронные письма и ваше доменное имя принадлежат друг другу, и для предотвращения подмены имени домена. На веб-сайте SPF есть мастер для создания DNS-информации для вашего сайта.
- Проверьте обратный DNS, чтобы убедиться, что IP-адрес вашего почтового сервера указывает на имя домена, которое вы используете для отправки почты.
- Убедитесь, что IP-адрес, который вы используете, не включен в черный список
- Убедитесь, что адрес ответа — это действительный существующий адрес.
- Используйте полное, настоящее имя адресата в поле Кому, а не только адрес электронной почты (например,
"John Smith" <[email protected]>
).- Контролируйте свои учетные записи о злоупотреблениях, такие как [email protected] и [email protected]. Это означает — убедитесь, что эти учетные записи существуют, читайте, что им прислали, и поступайте по жалобам.
- Наконец, очень легко отказаться от подписки. В противном случае ваши пользователи откажутся от подписки, нажав кнопку спама, и это повлияет на вашу репутацию.
См. Как вы уверены, что адрес электронной почты, который вы отправляете программно, автоматически не помечен как спам? для получения дополнительной информации по этой теме.
Убедитесь, что все почтовые заголовки поставлены
Некоторые спам-программы отклонят почту, если отсутствуют общие заголовки, такие как «От» и «Ответ на»:
$headers = array("From: [email protected]",
"Reply-To: [email protected]",
"X-Mailer: PHP/" . PHP_VERSION
);
$headers = implode("rn", $headers);
mail($to, $subject, $message, $headers);
Убедитесь, что заголовки сообщений не имеют синтаксических ошибок
Недопустимые заголовки так же плохи, как отсутствие заголовков. Одним из неправильных символов может быть все, что нужно, чтобы сорвать вашу электронную почту. Выполните двойную проверку, чтобы убедиться, что ваш синтаксис верен, поскольку PHP не поймает эти ошибки для вас.
$headers = array("From [email protected]", // missing colon
"Reply To: [email protected]", // missing hyphen
"X-Mailer: "PHP"/" . PHP_VERSION // bad quotes
);
Убедитесь, что значение получателя правильно
Иногда проблема такая же простая, как неправильное значение для получателя сообщения электронной почты. Это может быть связано с использованием неправильной переменной.
$to = '[email protected]';
// other variables ....
mail($recipient, $subject, $message, $headers); // $recipient should be $to
Другой способ проверить это — записать код получателя в вызов функции mail()
:
mail('[email protected]', $subject, $message, $headers);
Это может применяться ко всем параметрам mail()
.
Отправить на несколько аккаунтов
Чтобы устранить проблемы с электронной почтой, отправьте свое электронное письмо на несколько учетных записей электронной почты у разных поставщиков электронной почты. Если ваши электронные письма не поступают в учетную запись пользователя Gmail, отправьте те же письма на учетную запись Yahoo, учетную запись Hotmail и обычную учетную запись POP3 (например, вашу учетную запись электронной почты, предоставленную поставщиком услуг Интернета).
Если электронные письма поступают на все или другие учетные записи электронной почты, вы знаете, что ваш код отправляет электронные письма, но, скорее всего, поставщик электронной почты блокирует их по какой-либо причине. Если письмо не приходит ни на одну учетную запись электронной почты, проблема скорее связана с вашим кодом.
Убедитесь, что код соответствует методу формы
Если вы установили метод формы в POST
, убедитесь, что вы используете $_POST
для поиска значений формы. Если вы установили его в GET
или не установили его вообще, убедитесь, что вы используете $_GET
для поиска значений формы.
Убедитесь, что значение action
формы указывает на правильное местоположение
Убедитесь, что атрибут action
формы содержит значение, указывающее на ваш почтовый код PHP.
<form action="send_email.php" method="POST">
Убедитесь, что веб-хост поддерживает отправку электронной почты
Некоторые веб-хостинг-провайдеры не разрешают или не позволяют отправлять электронные письма через свои серверы. Причины этого могут различаться, но если они отключили отправку почты, вам нужно будет использовать альтернативный метод, который использует стороннюю компанию для отправки этих электронных писем для вас.
Электронная почта к их технической поддержке (после поездки к их онлайн-поддержке или FAQ) должна уточнить, доступны ли возможности электронной почты на вашем сервере.
Убедитесь, что почтовый сервер localhost
настроен
Если вы работаете на своей локальной рабочей станции с помощью WAMP, MAMP или XAMPP, сервер электронной почты, вероятно, не установлен на вашей рабочей станции. Без него PHP не может отправлять почту по умолчанию.
Вы можете преодолеть это, установив базовый почтовый сервер. Для Windows вы можете использовать бесплатную Mercury Mail.
Вы также можете использовать SMTP для отправки своих писем. Посмотрите на этот отличный ответ от Викаса Дувиди, чтобы узнать, как это сделать.
Включить собственный пользовательский mail.log
В дополнение к файлу журнала MTA и PHP вы можете включить ведение журнала для функции mail()
. Он не записывает полное взаимодействие с SMTP, но, по крайней мере, выполняет функции вызова и сценарий вызова.
ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);
Подробнее см. Http://php.net/manual/en/mail.configuration.php. (Лучше всего включить эти опции в возможностях php.ini
или .user.ini
или .htaccess
.)
Проверьте с помощью службы проверки почты
Существуют различные службы проверки доставки и спама, которые вы можете использовать для тестирования вашей настройки MTA/webserver. Обычно вы отправляете почтовый пробник To: их адрес, затем получаете отчет о доставке и более конкретные отказы или анализы позже:
- mail-tester.com (бесплатный/простой)
- glockapps.com (бесплатно/$$$)
- senforensics.com (регистрация/$$$)
- mailtrap.io (pro/$$$)
- ultratools/…/emailTest (только для проверки /MX)
- Различные: http://www.verticalresponse.com/blog/7-email-testing-delivery-tools/
Использовать другую почтовую программу
Функция PHP, встроенная в функцию mail()
удобна и часто выполняет свою работу, но имеет свои недостатки. К счастью, есть альтернативы, которые предлагают больше возможностей и гибкости, включая решение многих проблем, описанных выше:
- Наиболее популярным является: PHPMailer
- Точно так же: SwiftMailer
- Или даже старшая PEAR :: Mail.
Все они могут быть объединены с профессиональным SMTP-сервером/поставщиком услуг. (Поскольку типичные общие 15/15 общие планы веб-хостинга поражают или пропускают, когда дело доходит до настройки/настройки электронной почты).