Ошибка smtp не удается подключиться к хосту smtp

I’ve used PHPMailer on several projects but now I’m stuck. It gives me the error:
SMTP Error: Could not connect to SMTP host.
I’ve tried sending email from Thunderbird and it works ! But not through PHPMailer … Here are the settings from Thunderbird:

Server name: mail.exampleserver.com
Port: 587
Username: user@exampleserver.com
Secure Authentication: No
Connection Security: STARTTLS

I’ve compared these with the server at my last project where I used PHPMailer and they were:

Server name: mail.exampleserver2.com
Port: 465
Username: user@exampleserver2.com
Secure Authentication: No
Connection Security: SSL/TLS

My php code is:

 $mail = new PHPMailer();
 $mail->IsSMTP(); // send via SMTP
 $mail->Host = SMTP_HOST; // SMTP servers
 $mail->Port = SMTP_PORT; // SMTP servers
 $mail->SMTPAuth = true; // turn on SMTP authentication
 $mail->Username = SMTP_USER; // SMTP username
 $mail->Password = SMTP_PASSWORD; // SMTP password
 $mail->From = MAIL_SYSTEM;
 $mail->FromName = MAIL_SYSTEM_NAME;
 $mail->AddAddress($aSecuredGetRequest['email']);
 $mail->IsHTML(true); // send as HTML

Where I am wrong?

asked Aug 13, 2010 at 14:23

Ilian Andreev's user avatar

Ilian AndreevIlian Andreev

1,0513 gold badges12 silver badges18 bronze badges

1

Since this questions shows up high in google, I’d like to share here my solution for the case where PHP was just upgraded to version 5.6 (which has stricter SSL behavior).

The PHPMailer wiki has a section on this:

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

The suggested workaround is including the following piece of code:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

This should work for PHPMailer 5.2.10 (and up).

Note: Obviously, and also as suggested in that wiki, this should be a temporary solution!

The correct fix for this is to replace the invalid, misconfigured or self-signed certificate with a good one.

answered Apr 4, 2016 at 14:32

Marten Koetsier's user avatar

Marten KoetsierMarten Koetsier

3,3692 gold badges24 silver badges36 bronze badges

9

Your problem is most likely this

Connection Security: STARTTLS
Connection Security: SSL/TLS

Those are 2 different protocols, are you using the correct one, whatever one you’re using in Thunderbird needs to be used.

Try setting the variable:

// if you're using SSL
$mail->SMTPSecure = 'ssl';
// OR use TLS
$mail->SMTPSecure = 'tls';

answered Aug 13, 2010 at 15:41

Viper_Sb's user avatar

Viper_SbViper_Sb

1,80914 silver badges18 bronze badges

I had a similar issue and figured out that it was the openssl.cafile configuration directive in php.ini that needed to be set to allow verification of secure peers. You just set it to the location of a certificate authority file like the one you can get at http://curl.haxx.se/docs/caextract.html.

This directive is new as of PHP 5.6 so this caught me off guard when upgrading from PHP 5.5.

answered Jun 16, 2015 at 15:55

Jasper's user avatar

JasperJasper

75.7k14 gold badges151 silver badges146 bronze badges

2

I had the same problem and it was because PHPMailer realized the server supported STARTTLS so it tried to automatically upgrade the connection to an encrypted connection. My mail server is on the same subnet as the web server within my network which is all behind our domain firewalls so I’m not too worried about using encryption (plus the generated emails don’t contain sensitive data anyway).

So what I went ahead and did was change the SMTPAutoTLS to false in the class.phpmailer.php file.

/**
 * Whether to enable TLS encryption automatically if a server supports it,
 * even if `SMTPSecure` is not set to 'tls'.
 * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
 * @var boolean
 */
public $SMTPAutoTLS = false;

answered Jan 31, 2017 at 21:26

Sina's user avatar

SinaSina

3594 silver badges9 bronze badges

1

does mail.exampleserver.com exist ??? , if not try the following code (you must have gmail account)

$mail->SMTPSecure = "ssl";  
$mail->Host='smtp.gmail.com';  
$mail->Port='465';   
$mail->Username   = 'you@gmail.com'; // SMTP account username
$mail->Password   = 'your gmail password';  
$mail->SMTPKeepAlive = true;  
$mail->Mailer = "smtp"; 
$mail->IsSMTP(); // telling the class to use SMTP  
$mail->SMTPAuth   = true;                  // enable SMTP authentication  
$mail->CharSet = 'utf-8';  
$mail->SMTPDebug  = 0;   

admdrew's user avatar

admdrew

3,7814 gold badges27 silver badges39 bronze badges

answered Dec 27, 2010 at 16:19

Rami Dabain's user avatar

Rami DabainRami Dabain

4,70912 gold badges62 silver badges104 bronze badges

Followed code worked for me:

$mail = new PHPMailer(true);

$mail->isSMTP();// Set mailer to use SMTP
$mail->CharSet = "utf-8";// set charset to utf8
$mail->SMTPAuth = true;// Enable SMTP authentication
$mail->SMTPSecure = 'tls';// Enable TLS encryption, `ssl` also accepted

$mail->Host = 'smtp.gmail.com';// Specify main and backup SMTP servers
$mail->Port = 587;// TCP port to connect to
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);
$mail->isHTML(true);// Set email format to HTML

$mail->Username = 'Sender Email';// SMTP username
$mail->Password = 'Sender Email Password';// SMTP password

$mail->setFrom('example@mail.com', 'John Smith');//Your application NAME and EMAIL
$mail->Subject = 'Test';//Message subject
$mail->MsgHTML('HTML code');// Message body
$mail->addAddress('User Email', 'User Name');// Target email


$mail->send();

answered Jun 27, 2018 at 13:54

Dumitru Boaghi's user avatar

1

$mail->SMTPDebug = 2; // to see exactly what's the issue

In my case this helped:

$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;

answered Jan 28, 2019 at 6:09

Martin Zvarík's user avatar

Well this is really old but I still want to share my solution.
If you are using phpmail with an local server like xampp turn off your antivirus.
That solved it for me :)

answered Jul 22, 2022 at 13:11

Waaal's user avatar

WaaalWaaal

576 bronze badges

Since this is a popular error, check out the PHPMailer Wiki on troubleshooting.

Also this worked for me

$mailer->Port = '587';

answered Apr 20, 2017 at 17:37

Francis Sunday's user avatar

I recently dealt with this problem, and the cause of the problem turned out to be that the root certificate on the SMTP server that I was connecting to was the Sectigo root certificate that recently expired.

If you’re connecting to the SMTP server by SSL/TLS or STARTTLS, and you’ve not changed anything recently in the environment where your PHPMailer script is running, and this problem suddenly occurred — then you might want to check for an expired or invalid certificate somewhere in the certificate chain on the server.

You can view the server’s certificate chain using openssl s_client.

For SSL/TLS on port 465:

openssl s_client -connect server.domain.tld:465 | openssl x509 -text

For STARTTLS on port 587:

openssl s_client -starttls smtp -crlf -connect server.domain.tld:587 | openssl x509 -text

answered Jun 10, 2020 at 18:45

mti2935's user avatar

mti2935mti2935

11.4k3 gold badges28 silver badges33 bronze badges

I had a similar issue. I had installed PHPMailer version 1.72 which is not prepared to manage SSL connections. Upgrading to last version solved the problem.

answered May 22, 2012 at 12:49

David's user avatar

DavidDavid

2,94232 silver badges16 bronze badges

In my case in CPANEL i have ‘Register mail ids’ option where i add my email address and after 30 minutes it works fine with simple php mail function.

answered Feb 7, 2019 at 13:09

Dinesh Gurjar's user avatar

Будучи менеджером коммерческого отдела небольшой торговой компании, я выполнял задачу по отправке нескольких сотен писем постоянным и потенциальным клиентам. Базу формировали из открытых источников мы сами, предложение было реально интересным целевой аудитории. Возникла «неожиданная» проблема – часть писем стала возвращаться. Кроме того, начали приходить сообщения с указаниями кодов ошибки SMTP. Своего IT-специалиста в штате у нас не было, потому разобраться с проблемой я решил самостоятельно. О результатах этой работы, причинах возникновения таких ошибок и методах их решения расскажу в этой статье.

Ошибка SMTP

Как избежать ошибок при составлении и отправке писем

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

Самый простой способ это понять – отправить тестовое сообщение на свой ящик. Затем следует протестировать его отправку и получение, используя разные внешние почтовые сервисы: 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 говорит об успешном или неудачном варианте доставки именно на уровне взаимодействия почтовых серверов. Положительный ответ вовсе не означает, что ваше письмо не попало в папку «Спам».

Читайте также

Как настроить почту в Outlook

Почему письма не отправляются с электронной почты

Виды почтовых сервисов

На программном уровне существует несколько видов обработки электронной почтовой корреспонденции. К первой группе относятся виртуальные сервисы, доступные чаще всего в бесплатном исполнении через интернет-соединение на сайте почтового сервера. Это всем известные ресурсы: 

  • 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-сообщений. Способы решения проблем

Классификация отрицательных 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 никак не удается решить, то попробуйте обратиться в службу поддержки почтового сервера.

296 Upvotes | 34 comments

The author voluntarily contributed this tutorial as a part of Pepipost Write to Contribute program.

Introduction

Facing an error which says «PHPMailer SMTP Error: Could not connect to SMTP host»?

Let’s solve it together.

PHPMailer is one of the most popular open-source written in PHP for sending emails. While it’s easy to deploy and start sending emails, but there is a common error which most of us might be facing.

In this document, I have tried sharing the answer for some of the most occurring errors with the PHPMailer:

#Error: PHPMailer: SMTP Error: Could Not Connect To SMTP Host

Depending on your situation, there can be multiple reasons for the occurrence of this error. So, please try to go through the different scenarios below and pick the one which is closest to your use case.

Possible Problem 1: Problem With The Latest Version Of PHP

I tried using PHPMailer in many projects in the past and it worked buttery smooth. But, when I updated the PHP version to 5.6, I started getting an SMTP connection error. Later, I observed that this problem is there with the latest version of the PHP.

I noticed that in the newer version, PHP has implemented stricter SSL behaviour which has caused this problem.

Here is a help doc on PHPMailer wiki which has a section around this.

And, here is the quick workaround mentioned in the above wiki, which will help you fix this problem:

$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);

You can also change these settings globally, in the php.ini file but that’s a really bad idea because PHP has done these SSL level strictness for very good reasons only.

This solution should work fine with PHPMailer v5.2.10 and higher.

Possible Problem 2: Using Godaddy As The Hosting Provider

If you are running your code on Godaddy and trying to connect to some third-party SMTP provider like smtp.pepipost.com or smtp.sendgrid.com and getting some errors like this;

Mailer Error: SMTP connect() failed.

then nothing to really debug further, because it is because of a wried rule imposed by Godaddy on its user, where Godaddy has explicitly blocked the outgoing SMTP connection to ports 25, 587 and 465 to all external servers except for their own. Godaddy primarily wants their users to use their own SMTP instead of any third party SMTP, which is not at all an acceptable move for the developer community and many have has expressed their frustration in form of issues on StackOverflow too.

Your PHPmailer code might work perfectly fine on a local machine but the same code, when deployed on Godaddy server might not work and that’s all because of this silly rule implemented by Godaddy.

Here are few workarounds to avoid SMTP connection issues in Godaddy:

#1- Use Godaddy SMTP Instead Of Any Third Party:

In case you are sending 1-1 personalized emails, then using Godaddy SMTP makes sense. For that, just make the following changes in your PHPMailer code and you will be done;

$mail->isSMTP();
$mail->Host = 'localhost';
$mail->SMTPAuth = false;
$mail->SMTPAutoTLS = false; 
$mail->Port = 25; 

Note: Godaddy also restricts using any free domains like gmail, yahoo, hotmail, outlook, live, aim or msn as sender domain/From address. This is mostly because these domains have their own SPF and DKIM policies and some one can really forg the from address if allowed without having custom SPF and DKIM.

But, in case you want to send bulk/emails at scale then it becomes a bottleneck with high chances of your emails been landed in spam and your domain/IP address getting blacklisted. In such a case, I would suggest checking your email blacklist status and going with an option no #2.

#2- Use Email APIs Instead Of Any SMTP:

Godaddy can block the outgoing SMTP ports but can’t really block the outgoing HTTP ports (80, 8080) 😀 So, I would recommend using some good third party email service provider who provides email APIs to send emails. Most of these providers have code libraries/SDKs like PHPMailer which you can install and include in your code to start sending emails. Unlike using Godaddy’s local SMTP, using email APIs will give you a better control on your email deliverability.

Possible Problem 3: Getting SMTP Connection Failure On A Shared Hosting Provider

If you are running your code on a shared hosting provider and trying to connect to some third-party SMTP provider like smtp.pepipost.com or smtp.sendgrid.com and getting some errors like this;

SMTP connect() failed.

then, this is mostly because of the firewall rules on their infrastructure which explicitly blocks the outgoing SMTP connection to ports 25, 587 and 465 to all external servers. This rule is primarily to protect the infrastructure from sending spam, but also a really frustrating situation for developers like us.

The only solution to this is, same as I suggested above in the Godaddy section (Use Email APIs instead of any SMTP) or contact the hosting provider to allow connection to SMTP ports.

How to check whether your outgoing port (25, 587 or 465) is really blocked or not?

1. Trying doing telnet
Using telnet command you can actually test whether the port is opened or not.

//Type the following command to see if Port 25 is blocked on your network. 
telnet pepipost.com 25

If Port 25 is not blocked, you will get a successful 220 response (text may vary).

Trying 202.162.247.93... 
Connected to pepipost.com. 
Escape character is '^]'. 
220 pepipost.com ESMTP Postfix

If Port 25 is blocked, you will get a connection error or no response at all.

Trying 202.162.247.93...
telnet: connect to address 202.162.247.93: Connection refused
telnet: Unable to connect to remote host

2. Use outPorts
outPorts is a very good open-source on GitHub to which scans all your ports and gives the result.
Once outPorts is installed, you can type the following command in the terminal to check port 25 connectivity:
outPorts 25

Possible Problem 4: SELinux Blocking Issue

In case you are some error like the following:

SMTP -> ERROR: Failed to connect to server: Permission denied (13)

then, the most probably your SELinux is preventing PHP or the webserver from sending emails.

This problem is mostly with Linux based machines like RedHat, Fedora, Centos, etc.

How to debug whether it’s really the SELinux issue which is blocking these SMTP connections?

You can use the getsebool command to check whether the httpd daemon is allowed to make an SMTP connection over the network to send an email.

getsebool httpd_can_sendmail
getsebool httpd_can_network_connect

This command will return a boolean on or off. If it’s disabled, then you will see an output like this;

getsebool: SELinux is disabled

We can turn it on using the following command:

sudo setsebool -P httpd_can_sendmail 1
sudo setsebool -P httpd_can_network_connect 1

If you are running your code on a shared hosting provider and trying to connect to some third-party SMTP provider like smtp.pepipost.com or smtp.sendgrid.com and getting some errors like this.

Possible Problem 5: PHPMailer SMTP Connection Failed Because Of SSL Support Issue With PHP

There are many popular cases for the failure of SMTP connection in PHPMailer and lack of SSL is one of that too.

There might be a case, that the Open SSL extension is not enabled in your php.ini which is creating the connection problem.

So, once you enable the extension=php_openssl.dll in the ini file.

Enable debug output, so that you can really see that SSL is the actual problem or not. PHPMailer gives a functionality by which you can get detailed logs of the SMTP connection.

You can enable this functionality by including the following code in your script;

$mail->SMTPDebug = 2;

By setting the value of SMTPDebug property to 2, you will be actually getting both server and client level transcripts.

For more details on the other parameter values, please refer the official PHPMailer Wiki.

In case you are using Godaddy hosting, then just enabling SSL might not fix your problem. Because there are other serious challenges with Godaddy which you can refer in the above godaddy section.

Possible Problem 6: PHPMailer Unable To Connect To SMTP Because Of The IPv6 Blocking Issue

There are some set of newer hosting companies which includes DigitalOcean provides IPv6 connectivity but explicitly blocks outgoing SMTP connections over IPv6 but allow the same over IPv4.

While this is not a major issue, because this can be workaround by setting the host property to an IPv4 address using the gethostbyname function.

$mail->Host = gethostbyname('smtp.pepipost.com');

Note: In this approach, you might face a certificate name check issue but that can be workaround by disabling the check, in SMTPOptions.
But, this is mostly an extreme case, most of the times it’s the port block issue by the provider, like DigitalOcean in this case.
So, it is important to first get confirmed whether the port is really unlocked or not, before digging further into the solution.

Possible Problem 7: Getting The Error «Could Not Instantiate Mail Function»

This issue happens primarily when your PHP installation is not configured correctly to call the mail() function. In this case, it is important to check the sendmail_path in your php.ini file. Ideally, your sendmail_path should point to the sendmail binary (usually the default path is /usr/sbin/sendmail).

Note: In case of Ubuntu/Debian OS, you might be having multiple .ini files (under the path /etc/php5/mods-available), so please ensure that you are making the changes at all the appropriate places.

If this configuration problem is not the case, then try further debugging and check whether you have a local mail server installed and configured properly or not. You can install any good mail server like Postfix.

Note: In case all of the above things are properly in place and you’re still getting this error of «Could not instantiate mail function», then try to see if you are getting more details of the error. If you see some message like «More than one from person» in the error message then it means that in php.ini the sendmail_path property already contains a from -f parameter and your code is also trying to add a second envelope from, which is actually not allowed.

What Is The Use Of IsSMTP()?

isSMTP() is been used when you want to tell PHPMailer class to use the custom SMTP configuration defined instead of the local mail server.

Here is a code snippet of how it looks like;

require 'class.phpmailer.php'; // path to the PHPMailer class
       require 'class.smtp.php';
           $mail = new PHPMailer();
           $mail->IsSMTP();  // telling the class to use SMTP
           $mail->SMTPDebug = 2;
           $mail->Mailer = "smtp";
           $mail->Host = "ssl://smtp.gmail.com";
           $mail->Port = 587;
           $mail->SMTPAuth = true; // turn on SMTP authentication
           $mail->Username = "[email protected]"; // SMTP username
           $mail->Password = "mypasswword"; // SMTP password
           $Mail->Priority = 1;
           $mail->AddAddress("[email protected]","Name");
           $mail->SetFrom($visitor_email, $name);
           $mail->AddReplyTo($visitor_email,$name);
           $mail->Subject  = "This is a Test Message";
           $mail->Body     = $user_message;
           $mail->WordWrap = 50;
           if(!$mail->Send()) {
           echo 'Message was not sent.';
           echo 'Mailer error: ' . $mail->ErrorInfo;
           } else {
           echo 'Message has been sent.';
           }

Many times developers get the below error:

"SMTP -> ERROR: Failed to connect to server: Connection timed out (110). SMTP Connect() failed. Message was not sent. Mailer error: SMTP Connect() failed."

If you’re constantly getting the above error message, then just try identifying the problem as stated in the above sections.

I have this code, and all works well in my local server. The email is sent without any problem.

But now I pass the content to webserver, and I get this error…

SMTP Error: Could not connect to SMTP host.

SSL is enable in the server..correct? so, what is the problem?
enter image description here

            $mail = new PHPMailer();
            $mail->IsSMTP();
            $mail->SMTPAuth   = true;                  // enable SMTP authentication
            $mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
            $mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
            $mail->Port       = 465;                   // set the SMTP port
            $mail->Username   = "dnteiro"; // GMAIL username
            $mail->Password   = "xxx";      // GMAIL password

Lightness Races in Orbit's user avatar

asked Jun 1, 2011 at 23:59

anvd's user avatar

3

It sounds like your web host is blocking outbound connections to smtp.gmail.com:465. Suggestions:

  1. Verify: If you have shell/terminal access to your web hosting server, try a telnet test to verify that they are in fact blocking this. Run telnet smtp.gmail.com 465

  2. Contact: Call or email your hosting provider and find out what SMTP server they provide for outbound relay. Make sure they know you want to use your @gmail.com address as the From/Reply-to address.

  3. Update code: Once your host provides you with a different mail server, update your code and try again.

If your web host doesn’t allow outbound relay from its servers at all, then you need to look at switching hosts, if this is a requirement for your application.

answered Jun 2, 2011 at 0:07

AJ.'s user avatar

AJ.AJ.

27.1k17 gold badges84 silver badges93 bronze badges

1

answered Jan 1, 2012 at 3:28

Nir Alfasi's user avatar

Nir AlfasiNir Alfasi

52.7k11 gold badges83 silver badges127 bronze badges

require 'phpmailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'mail.abc.co.in';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls';
$mail->SMTPOptions = array(
    'ssl' => array(
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true
    )
); 

$mail->Username = 'user name';
$mail->Password = 'password';

$mail->setFrom("from email id", "name");
$mail->addAddress("receipiant email id");

$mail->isHTML(true);
$bodycontent = 'body';
$mail->Body    = $bodycontent;

if (!$mail->send()) {
    echo "message has been not send", $mail->ErrorInfo;
    }
else{
    echo "message has been send";
    }

answered Mar 7, 2020 at 6:21

Kannan Kannan's user avatar

SMTP Error: Could not connect to SMTP host. Message could not be sent.

Mailer Error: SMTP Error: Could not connect to SMTP host.

I can’t seem to find a way to make PHPMailer work under CentOS. Mail work just fine under Windows with XAMPP but I always get this error under Linux.

The SMTP server is a Lotus Domino listening on port 25, CentOS machine has NO firewall at all and the strange thing is that even mail() does not work. It returns nothing (while on Windows returns 1). If I send an email through telnet via CentOS server it works just fine so I don’t think it is a network problem. It must be related to PHP but I don’t know how.

<?php
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "192.168.x.x";
$mail->SMTPAuth = false;
$mail->From = "xxx@xxx.it";
$mail->FromName = "XXX";
$mail->AddAddress("xxx@xxx.it");
$mail->IsHTML(true);
$mail->Subject = "Test";
$mail->Body    = "Test";
if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}
echo "Message has been sent";
?>

Just to clarify the code above works on XAMPP (Windows).

I debugged the error on PHPMailer and error happens here (class.smtp.php method Connect()):

$this->smtp_conn = @fsockopen($host,    // the host of the server
                             $port,    // the port to use
                             $errno,   // error number if any
                             $errstr,  // error message if any
                             $tval);   // give up after ? secs
// verify we connected properly
if(empty($this->smtp_conn)) {
  $this->error = array("error" => "Failed to connect to server",
                       "errno" => $errno,
                       "errstr" => $errstr);
  if($this->do_debug >= 1) {
    echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '<br />';
  }
  return false;
}

It looks like it can’t open the Socket…

UPDATE: Using $mail->SMTPDebug = 2; as suggested by Alvaro produced this output:

SMTP -> ERROR: Failed to connect to server: Permission denied (13)

SMTP Error: Could not connect to SMTP host. Message could not be sent.

Mailer Error: SMTP Error: Could not connect to SMTP host.

I can’t seem to find a way to make PHPMailer work under CentOS. Mail work just fine under Windows with XAMPP but I always get this error under Linux.

The SMTP server is a Lotus Domino listening on port 25, CentOS machine has NO firewall at all and the strange thing is that even mail() does not work. It returns nothing (while on Windows returns 1). If I send an email through telnet via CentOS server it works just fine so I don’t think it is a network problem. It must be related to PHP but I don’t know how.

<?php
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "192.168.x.x";
$mail->SMTPAuth = false;
$mail->From = "xxx@xxx.it";
$mail->FromName = "XXX";
$mail->AddAddress("xxx@xxx.it");
$mail->IsHTML(true);
$mail->Subject = "Test";
$mail->Body    = "Test";
if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}
echo "Message has been sent";
?>

Just to clarify the code above works on XAMPP (Windows).

I debugged the error on PHPMailer and error happens here (class.smtp.php method Connect()):

$this->smtp_conn = @fsockopen($host,    // the host of the server
                             $port,    // the port to use
                             $errno,   // error number if any
                             $errstr,  // error message if any
                             $tval);   // give up after ? secs
// verify we connected properly
if(empty($this->smtp_conn)) {
  $this->error = array("error" => "Failed to connect to server",
                       "errno" => $errno,
                       "errstr" => $errstr);
  if($this->do_debug >= 1) {
    echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '<br />';
  }
  return false;
}

It looks like it can’t open the Socket…

UPDATE: Using $mail->SMTPDebug = 2; as suggested by Alvaro produced this output:

SMTP -> ERROR: Failed to connect to server: Permission denied (13)

0 Пользователей и 1 Гость просматривают эту тему.

  • 42 Ответов
  • 16155 Просмотров

Не получается настроить отправку почты. При использовании PHP Mail, пишет — «не удалось вызвать функцию mail». При использовании Send Mail — пишет «/var/qmail/bin/sendmail». При использовании SMTP — пишет «Ошибка SMTP! Не удаётся подключиться к хосту SMTP.».

Интересно, то, что этот же ящик работает с такими же настройками (один в один) на этом же сервере (сервер VDS) только на другом сайте с J1.5. В чем может быть дело и как это исправить?

Заранее спасибо за помощь, если кто-то с таким сталкивался и знает как настроить почту на J1.7.

PHP Mail у меня работает (сервер VDS).

SMTP — это вообще немного другая вещь (например подключить «яндекс, почта для домена») но тоже работает.

Записан

Я с мобильного, в основном…

SMTP — это вообще немного другая вещь (например подключить «яндекс, почта для домена») но тоже работает.

Это использование любого стороннего ящика — пробовала mail.ru и yandex. не работает в J1.7, а вот в J1.5 — сразу и никаких проблем.

Настроить получилось… Пришлось перерыть Joomla 1.5.23. Может быть кому-нибудь пригодится:
За отправку почты в Joomla отвечает файл компонента phpmailer.php. В версии 1.5.x там есть строки:

$params = sprintf("-oi -f %s", $this->Sender);
$params = '';

В Joomla версии 1.7 по какой-то причине отсутствует строка:

Так вот, если ее туда добавить, то почта начинает работать. Не знаю глюк это, недоработка или «так задумано» разработчиками, но голову пришлось поломать.

Спс, помогло ;)

Прикол — у меня этот глюк появился с обновления 1.6.х-1.7, и сам(!) пропал при обновлении до 1.7.1 — я даже phpmailer.php посмотреть не успел..
Видно разработчики учли…
(p.s. автоматическое обновление у меня не проходит, приходится скачивать патч с русской легализацией с http://joomlaportal.ru)

а у меня при обновлении все слетает и опять не работает.. только что накатила 1.7.2 — увы.. пришлось опять править

Belka,
спасибо за совет, проблема устранилась быстро и качественно :)

Joomla 1.7.3, разные хостеры.
1. У одного phpmailer.php добавлена строка

Ошибка «Не удалось вызвать функцию mail» всё равно остаётся, письма на xxx@yandex.ru не уходят.

2.  У другого в phpmailer.php нет строки

Ошибки нет, письма уходят и доходят до адресата.

Вопрос: может ли в этом случае быть что-то отключено со стороны хостера?

« Последнее редактирование: 21.11.2011, 04:09:26 от Maxum »

Записан

Строку ($params = »; ) прописал, кэш почистил/ Проблема осталась(((
Может действительно, проблема у хостера? В таком случае, какие настройки хостинга должны быть выставлены?

Большое Спасибо! Не работала отправка почты на Joomla 1.5.24 ковырял целый день прочитал ваш пост заменил phpmailer.php
Заработало Ура!

Подскажите, пожалуйста, в какой папке находится файл компонента phpmailer.php. Не могу его найти.

Хостер отказался мне помочь. Пишет — это проблема Joomla.

Подскажите, пожалуйста, в какой папке находится файл компонента phpmailer.php. Не могу его найти.

Libraries/phpmailer/

Спасибо, но не помогло. Все равно почта не работает. В  ПУ хостинга почту вижу, а в админке ее нет.

Спасибо, но не помогло. Все равно почта не работает. В  ПУ хостинга почту вижу, а в админке ее нет.

Не понял. Вы хотите читать письма в админке?

Посылаю сообщение на адрес admin@имя_сайта для проверки работы почты сайта. В панели управления хостинга сообщение  вижу и могу прочитать. А в  админке пишет «сообщений нет».
Регистрацию пользователей сайта могу делать только автоматическую, без посылки на его адрес ссылки для активации учетной записи. Потому что никакая ссылка не посылается.
Т.е. никакая работа, связанная с почтовым ящиком, не делается. Он вообще не работает.
И так в обоих сайтах на Joomla 1.7.3.

Захожу в админке на страничку «новое личное сообщение». Нажимаю «выбор пользователя». Выдает пустой список. А на сайте есть много зарегистрированных пользователей.

Посылаю сообщение на адрес admin@имя_сайта для проверки работы почты сайта. В панели управления хостинга сообщение  вижу и могу прочитать. А в  админке пишет «сообщений нет».
Регистрацию пользователей сайта могу делать только автоматическую, без посылки на его адрес ссылки для активации учетной записи. Потому что никакая ссылка не посылается.
Т.е. никакая работа, связанная с почтовым ящиком, не делается. Он вообще не работает.
И так в обоих сайтах на Joomla 1.7.3.

Ну для начала обновитесь… У Вас не последняя версия.

Далее, в админке ваши письма отображаться не будут. Они будут только в панели управления хостингом, что логично =)  Или в 1.7 ввели такой функционал? Сомневаюсь.
Ну и покажите какие настройки стоят для почты в админке

Не знаю, где делают настройку почты. Нигде в админке не нашла раздел «настройка почты».

Не знаю, где делают настройку почты. Нигде в админке не нашла раздел «настройка почты».

О_о Сайт-Общие настройки-Сервер

Там справа

Здрасти помогите такая проблема при добовлении нового материалла , левый модуль опускается в самый низ в нем находится(ресистрация,популярное,голосование и т.д)я в Joomle не данвно занимаюсь недели 2

спасибо, нашла. В настройках почты написано:

Способ отправки: php mail
E-mail сайта: мой е-mail
Отправитель письма: название сайта
путь к sendmail: /usr/sbin/sendmail
Авторизация на smtp-сервере: нет
Защита smtp:нет
Порт smtp-сервера: 25
Имя пользователя smtp: (пусто)
Пароль для smtp: (пусто)
smtp-сервер: localhost

Как видно, тут собака зарыта. Нужно было заполнить эти поля?

Как видно, тут собака зарыта. Нужно было заполнить эти поля?

отправляются письма?

Пока ни от кого писем не получала. Пробовала сама отправить на ящик сайта письмо. В админке пишет «нет сообщений».

Пока ни от кого писем не получала. Пробовала сама отправить на ящик сайта письмо. В админке пишет «нет сообщений».

Так, еще раз!
В админке Вы писем не прочитаете! Там нет такого функционала! Сайт почту только отправляет! Но не принимает! Попробуйте письмо об активации получить.

Теперь понятно?

Сообщение об активации прошло.
Но когда хочу послать сообщение и захожу на страничку «создание личного сообщения» в админке и нажимаю «выбрать пользователя» — выходит пустой список. Хотя на фильтре по группе пользователей стоит «все», а на сайте больше 10 зарегистрированных пользователей.
Что может быть?

smtp error

SMTP-сервер — это программное обеспечение для отправки электронных писем, использующее SMTP протокол. Напомним, что вообще работа электронной почты обеспечивается с помощью трех протоколов: POP3 или IMAP — для получения писем, SMTP — для отправки.

Передача письма по SMTP происходит с помощью TCP-соединения. Стандартный порт для незащищенного соединения — 25. Однако многие сервисы по умолчанию его блокируют, так как именно на него обычно идет рассылка вирусного спама.

В качестве альтернативных можно прописывать в настройках порты 587 и 2525.

Для защищенного соединения по SSL используется порт 465.

Функции почтового сервера SMTP сводятся к следующему:

  • определить домен получателя письма и то, совпадает ли он с доменом отправителя;
  • определить IP-адрес сервера SMTP получателя;

  • установить соединение с ним;

  • с помощью серии запросов-ответов передать адреса отправителя и получателя, а также само письмо вместе с заголовками.

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

Виды почтовых серверов

SMTP-сервер встречается в нескольких вариантах:

  • Бесплатные серверы SMTP. Идут как дополнение к бесплатным почтовым сервисам, таким как Яндекс.Почта, Gmail, Mail.ru и другим. Предназначены в основном для личного использования и не подходят для корпоративных рассылок: есть ограничения на количество отправок, высокий риск попасть под спам-фильтры и т. д.
  • Сервер, предоставляемый интернет-провайдером. Этот вариант SMTP чем-то похож на использование бесплатных почтовых серверов: у вас также будут ограничения на отправку писем и, возможно, на скорость обработки очереди отправки
  • SMTP от хостинга. Обычно достаточно производительный и без ограничений на отправку. Но нужно учитывать, что при массовых рассылках и низком качестве списка получателей есть большой риск попасть под спам-фильтр, причем не только того адреса, с которого ведется рассылка, но и всего домена.
  • Коммерческие серверы SMTP. Предлагаются многими сервисами рассылок. Лучшее решение, если вы рассылаете множество писем, причем как транзакционных, так и рекламных. Обеспечивают быструю и надежную доставку и снижают риск попадания ваших писем в папку «Спам» у получателей.

Ответы SMTP-сервера. Коды успешной или неуспешной обработки запроса

В процессе передачи данных по SMTP ваш сервер отправляет на почтовый сервер получателя запросы, а тот высылает ответы. Ответы содержат трехзначный код, в котором зашифрован результат обработки запроса, и поясняющий текст к нему. Коды ответов могут иметь вид:

  • 2xx. Такой ответ означает, что предыдущая команда была успешно выполнена.
  • 3xx. Коды, начинающиеся на тройку, высылаются на промежуточном этапе передачи, когда сервер ждет остальную часть данных.
  • 4xx. Это коды ошибок, которые могут носить временный характер.
  • 5xx. В эту категорию относятся коды критичных ошибок.

Коды ошибок SMTP, их причины и варианты исправления ситуации

Прежде всего учтите важный момент: хотя многие коды ответов стандартны, существуют и уникальные для каждого SMTP сервера коды. Их могут создавать администраторы почтовых серверов. Обычно к ним идет поясняющий текст, из него можно понять, в чем дело.

Мы же разберем самые распространенные ошибки SMTP и поясним, что делать в этих ситуациях.

Ошибка 421

Расшифровка ошибки SMTP 421 — «сервис недоступен». Причиной могут быть:

  • Блокировка трафика на 25 порту. Пропишите в настройках альтернативные порты.

  • Неправильно заданы настройки соединения. Проверьте и исправьте настройки.

  • Ваш антивирус или брандмауер блокирует соединение с сервером SMTP.

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

  • Использование VPN. Встречается достаточно редко, но все же проверьте, отправляется ли письмо, если отключить VPN. Если да, то необходимо обратиться к администраторам VPN-сервиса, чтобы устранить проблему.
  • Вы используете бесплатный сервер SMTP и при этом отправляете много писем. У таких серверов существуют лимиты на отправку в определенный промежуток времени, возможно, вы его превысили. Вам лучше использовать профессиональные платные решения.

  • Грейслистинг (серый список). Это функция защиты от спама. Работает она следующим образом: в ответ на все подозрительные письма, письма с адресов, с которых сообщение приходит впервые, сервер отправляет эту ошибку. Если на стороне отправителя — легитимный SMTP-сервер, а не спамерское ПО, то через некоторое время он отправит письмо еще раз, и уже тогда сервер получателя примет письмо. Спамеры обычно не предпринимают повторных попыток отправки. Предпринимать в этом случае обычно ничего не нужно — если вы пользуетесь надежным сервером, он сам повторит отправку и письмо будет доставлено.

Ошибка 451

Эта ошибка означает, что отправка была прервана в процессе. Возможные причины и пути решения проблемы следующие:

  • На DNS-сервере неправильно прописаны параметры почтового сервера (MX записи). Например, некорректно проставлены предпочтения, если почтовых серверов для домена несколько. Перепроверьте и исправьте записи. Возможно, потребуется также посмотреть логи и файлы конфигурации.
  • Превышены лимиты сервера на отправки или подключения. Проверьте, нет ли подозрительно большого количества отправляемых писем, если все нормально — увеличьте лимиты в настройках.

Ошибка 452

Означает, что либо у вас, либо у получателя закончилось место на машине, где установлен сервер, или не хватает памяти для обработки. Проверьте, есть ли в сообщении упоминание про «memory», и проверьте свою систему. Если у вас все в порядке, обратитесь к получателю.

Ошибка 550

Самый распространенный тип ошибки SMTP. В большинстве случаев возникает, если указан несуществующий email-адрес получателя. Но также возможны следующие причины:

  • Не работает почтовый сервер на стороне адресата. Попробуйте отправить любое письмо на домен, за который отвечает другой почтовый сервер. Если письмо успешно отправлено — значит, проблема не у вас, нужно связаться с адресатом и объяснить ему ситуацию.
  • Неправильно настроены параметры SMTP — перепроверьте настройки.

  • Вы используете сервер провайдера, и у него установлены лимиты на отправку сообщений. Свяжитесь с провайдером, узнайте значения лимитов. При необходимости перейдите на другой тариф или используйте платный SMTP-сервер.

  • Возможно, в вашей сети вирус и с вашего адреса рассылается спам. Проверьте систему с помощью антивирусного ПО.

Ошибка 571

Это ошибка означает, что сервер SMTP получателя не принял ваше письмо. Возможные причины:

  • Ваш IP-адрес заблокирован почтовым сервером адресата. Это может сделать антивирусное ПО, или файервол, или программное обеспечение для защиты от спама. Проблему нужно решать с системным администратором получателя.
  • Ваш email внесен в списки спамеров. Нужно разбираться в причине и предпринимать меры, чтобы его оттуда удалили.

  • У вашего IP нет rDNS записи. Это необходимый параметр, без него ни один почтовый сервер не примет ваше письмо. Для решения проблемы обратитесь к хостинг-провайдеру.

Истек сертификат почтового сервера

Просто обновите сертификат SMTP.

Я использовал PHPMailer в нескольких проектах, но теперь застрял. Это дает мне ошибку:
Ошибка SMTP: не удалось подключиться к узлу SMTP.
Я пробовал отправлять электронную почту из Thunderbird, и это работает! Но не через PHPMailer … Вот настройки от Thunderbird:

Имя сервера: mail.exampleserver.com
Порт: 587
Имя пользователя: user@exampleserver.com
Безопасная аутентификация: нет
Безопасность подключения: STARTTLS

Я сравнил их с сервером в моем последнем проекте, где я использовал PHPMailer, и они были:

Имя сервера: mail.exampleserver2.com
Порт: 465
Имя пользователя: user@exampleserver2.com
Безопасная аутентификация: нет
Безопасность подключения: SSL / TLS

Мой PHP-код:

 $mail = new PHPMailer();
 $mail->IsSMTP(); // send via SMTP
 $mail->Host = SMTP_HOST; // SMTP servers
 $mail->Port = SMTP_PORT; // SMTP servers
 $mail->SMTPAuth = true; // turn on SMTP authentication
 $mail->Username = SMTP_USER; // SMTP username
 $mail->Password = SMTP_PASSWORD; // SMTP password
 $mail->From = MAIL_SYSTEM;
 $mail->FromName = MAIL_SYSTEM_NAME;
 $mail->AddAddress($aSecuredGetRequest['email']);
 $mail->IsHTML(true); // send as HTML

Где я не прав?

12 ответы

Поскольку этот вопрос часто встречается в Google, я хотел бы поделиться здесь своим решением для случая, когда PHP был только что обновлен до версии 5.6 (которая имеет более строгое поведение SSL).

В вики PHPMailer есть раздел об этом:

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

Предлагаемый обходной путь включает следующий фрагмент кода:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

Это должно работать для PHPMailer 5.2.10 (и выше).

Примечание: Очевидно, как и предлагается в этой вики, это должно быть временное решение!

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

ответ дан 04 апр.

Создан 14 фев.

Ваша проблема, скорее всего, в этом

Безопасность подключения: STARTTLS Безопасность подключения: SSL / TLS

Это 2 разных протокола. Используете ли вы правильный, какой бы из них вы ни использовали в Thunderbird, нужно использовать.

Попробуйте установить переменную:

// if you're using SSL
$mail->SMTPSecure = 'ssl';
// OR use TLS
$mail->SMTPSecure = 'tls';

ответ дан 13 авг.

У меня была аналогичная проблема, и я понял, что это openssl.cafile директива конфигурации в php.ini который нужно было установить, чтобы разрешить проверку безопасных узлов. Вы просто устанавливаете его в расположение файла центра сертификации, такого как тот, который вы можете получить по адресу http://curl.haxx.se/docs/caextract.html.

Эта директива появилась в PHP 5.6 впервые, поэтому при обновлении с PHP 5.5 это застало меня врасплох.

Создан 16 июн.

У меня была такая же проблема, потому что PHPMailer понял, что сервер поддерживает STARTTLS, поэтому он попытался автоматически обновить соединение до зашифрованного соединения. Мой почтовый сервер находится в той же подсети, что и веб-сервер в моей сети, который находится за нашими брандмауэрами домена, поэтому я не слишком беспокоюсь об использовании шифрования (плюс сгенерированные электронные письма в любом случае не содержат конфиденциальных данных).

Итак, я пошел дальше и изменил SMTPAutoTLS на false в файле class.phpmailer.php.

/**
 * Whether to enable TLS encryption automatically if a server supports it,
 * even if `SMTPSecure` is not set to 'tls'.
 * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
 * @var boolean
 */
public $SMTPAutoTLS = false;

Создан 31 янв.

Для меня работал следующий код:

$mail = new PHPMailer(true);

$mail->isSMTP();// Set mailer to use SMTP
$mail->CharSet = "utf-8";// set charset to utf8
$mail->SMTPAuth = true;// Enable SMTP authentication
$mail->SMTPSecure = 'tls';// Enable TLS encryption, `ssl` also accepted

$mail->Host = 'smtp.gmail.com';// Specify main and backup SMTP servers
$mail->Port = 587;// TCP port to connect to
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);
$mail->isHTML(true);// Set email format to HTML

$mail->Username = 'Sender Email';// SMTP username
$mail->Password = 'Sender Email Password';// SMTP password

$mail->setFrom('example@mail.com', 'John Smith');//Your application NAME and EMAIL
$mail->Subject = 'Test';//Message subject
$mail->MsgHTML('HTML code');// Message body
$mail->addAddress('User Email', 'User Name');// Target email


$mail->send();

Создан 27 июн.

mail.exampleserver.com существует ??? , если нет, попробуйте следующий код (у вас должна быть учетная запись gmail)

$mail->SMTPSecure = "ssl";  
$mail->Host='smtp.gmail.com';  
$mail->Port='465';   
$mail->Username   = 'you@gmail.com'; // SMTP account username
$mail->Password   = 'your gmail password';  
$mail->SMTPKeepAlive = true;  
$mail->Mailer = "smtp"; 
$mail->IsSMTP(); // telling the class to use SMTP  
$mail->SMTPAuth   = true;                  // enable SMTP authentication  
$mail->CharSet = 'utf-8';  
$mail->SMTPDebug  = 0;   

Создан 23 сен.

$mail->SMTPDebug = 2; // to see exactly what's the issue

В моем случае это помогло:

$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;

Создан 28 янв.

У меня была аналогичная проблема. Я установил PHPMailer версии 1.72, которая не подготовлена ​​для управления SSL-соединениями. Обновление до последней версии решило проблему.

ответ дан 22 мая ’12, 13:05

Поскольку это распространенная ошибка, ознакомьтесь с PHPMailer вики по поиску и устранению неисправностей.

Также это сработало для меня

$mailer->Port = '587';

ответ дан 20 апр.

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

Если вы подключаетесь к SMTP-серверу с помощью SSL / TLS или STARTTLS, и в последнее время вы ничего не меняли в среде, в которой работает ваш скрипт PHPMailer, и эта проблема внезапно возникла — тогда вы можете проверить, не истек ли срок действия или нет. недействительный сертификат где-то в цепочке сертификатов на сервере.

Вы можете просмотреть цепочку сертификатов сервера, используя openssl s_client.

Для SSL / TLS на порту 465:

openssl s_client -connect server.domain.tld:465 | openssl x509 -text

Для STARTTLS на порту 587:

openssl s_client -starttls smtp -crlf -connect server.domain.tld:587 | openssl x509 -text

Создан 10 июн.

В моем случае в CPANEL у меня есть опция «Зарегистрировать идентификаторы почты», где я добавляю свой адрес электронной почты, и через 30 минут он отлично работает с простой функцией почты php.

Создан 07 фев.

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

php
email
phpmailer

or задайте свой вопрос.

На чтение 6 мин. Просмотров 181 Опубликовано 16.04.2021

Некоторые пользователи сообщали об ошибке «сервер ответил: 421 не может подключиться к SMT/SMTP-серверу» при попытке отправить электронное письмо в Outlook. Часто ошибка возникает из-за неправильных настроек для SMTP//SMT-сервера, но есть несколько других причин, которые вызывают такое поведение Outlook.

Ошибка довольно часто встречается в учетных записях Gmail. настроен в Outlook.

Ошибки SMTP/SMT, обнаруженные в Outlook, можно в целом разделить на следующие четыре категории:

  • Ошибки конфигурации Outlook . Наиболее частой причиной ошибки Outlook не удается подключиться к SMTP/SMT-серверу является ошибка конфигурации в настройках Outlook. Но это применимо только в том случае, если проблема возникла с недавно настроенной учетной записью электронной почты.
  • Проблемы, связанные с брандмауэром . Такое поведение неизвестно со встроенным в брандмауэре Windows. Однако некоторые сторонние брандмауэры и антивирусные пакеты настроены на блокировку подключения к некоторым диапазонам IP-адресов, в том числе к почтовому серверу. Это могло быть основной причиной получения ошибки при отправке электронного письма в Outlook.
  • Фильтрованный трафик на порту 25 – одна из наиболее распространенных практик, применяемых интернет-провайдерами. Чтобы свести к минимуму автоматический спам, необходимо заблокировать трафик через порт 25 . Хотя это эффективно предотвращает использование зараженных компьютеров в качестве сетей для спама, это также создает множество проблем для конечного пользователя, включая ошибку 421 Не удается подключиться к SMTP-серверу .
  • Помехи, вызванные подключением VPN . У некоторых поставщиков VPN (особенно новых продуктов) может не быть почтового сервера, который вы использовали, в белом списке. Известно, что это вызывает ошибку «сервер ответил, что 421 не может подключиться к серверу SMT» .

В зависимости от причины сообщения об ошибке пользователи следует использовать соответствующее решение. Ниже представлен набор методов, которые были успешно развернуты пользователями для решения проблемы « сервер ответил: 421 не может подключиться к SMT/SMTP-серверу» и нормально отправлять электронные письма в Outlook.

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

Если вы настроили только учетную запись Outlook, начните с Метод 1 и устранение ошибок конфигурации. Если раньше вы могли отправлять электронные письма в Outlook, начните с метода 2 и продолжайте дальше..

Если вы не уверены в причине проблемы, следуйте каждому методу по порядку, пока не найдете решение, которое успешно решает вашу проблему.

Содержание

  1. Метод 1. Устранение проблем с конфигурацией Outlook
  2. Метод 2: изменение порта SMTP номер
  3. Метод 3: Проверка на наличие помех брандмауэра
  4. Метод 4. Проверка помех от VPN

Метод 1. Устранение проблем с конфигурацией Outlook

Если вы недавно настроили свою учетную запись электронной почты в Outlook, скорее всего, ошибка вызвана ошибкой конфигурации. Имейте в виду, что из-за неправильного написания имени почтового сервера или неправильной настройки порта Outlook будет отображать ошибку « 421 не может подключиться к SMT/SMTP-серверу» при отправке или получении электронной почты.

Если вы вручную настроили параметры учетной записи электронной почты в первый раз, давайте попробуем повторно добавить вашу учетную запись и позволить Outlook автоматически добавить правильные параметры. В большинстве случаев Outlook хорошо выбирает правильные порты. Вот краткое руководство по автоматическому добавлению правильной конфигурации:

  1. Давайте начнем с удаления учетной записи, прежде чем позволить Outlook автоматически перенастроить настройки. Для этого откройте Outlook и перейдите в Файл> Настройки учетной записи , выберите нужную учетную запись и нажмите кнопку Удалить .
  2. После удаления учетной записи нажмите кнопку Создать , выберите Учетная запись электронной почты и снова введите свои учетные данные. Нажмите Далее и дождитесь настройки параметров и отправки тестового сообщения электронной почты.
  3. Если тестовое электронное письмо успешно отправлено, ваша учетная запись электронной почты должна быть успешно настроена.

Если вы получаете такое же сообщение об ошибке при отправке тестового электронного письма, перейдите к методу 2.

Метод 2: изменение порта SMTP номер

Если вы получаете такое же сообщение об ошибке, когда тестовое электронное письмо отправляется в Outlook, весьма вероятно, что проблема возникает из-за того, что порт SMTP (25) фильтруется вашим Интернет-провайдер. Известно, что некоторые интернет-провайдеры блокируют трафик через порт 25 , пытаясь свести к минимуму распространение автоматического спама.

Примечание: Этот сценарий применим только в том случае, если ваше соединение с сервером исходящей почты (SMTP) настроено через SSL .

Вы можете проверить если это причина ошибки, измените номер порта SMTP с 25 на 465 и посмотрите, возобновится ли нормальная работа. Для этого перейдите в Файл> Настройки учетной записи , выберите учетную запись электронной почты, в которой возникла проблема, и нажмите кнопку Изменить .

В мастере Изменить учетную запись перейдите в Дополнительные настройки и выберите Дополнительно . Затем введите 465 в поле рядом с Сервер исходящей почты (SMTP) и убедитесь, что тип зашифрованного соединения установлен на SSL .

Если проблема все еще не решена перейдите к Методу 3 .

Метод 3: Проверка на наличие помех брандмауэра

Брандмауэры – это дополнительные барьеры безопасности, которые защищают нас от злонамеренных атак и взломов. Но некоторые решения сторонних брандмауэров ошибочно блокируют определенные диапазоны IP-адресов на основе ряда шаблонов активности. Если немного не повезет, IP-адрес почтового сервера может оказаться в этом списке. , что приведет к ошибке «сервер ответил, что 421 не может подключиться к серверу SMT» . Известно, что антивирус Avast вызывает конфликты с Outlook.

Вы Вы можете проверить этот сценарий, отключив сторонний брандмауэр/антивирус и отправив тестовое электронное письмо через Outlook. Если электронное письмо отправлено успешно, начните просматривать настройки антивируса и посмотрите, можете ли вы добавить почтовый сервер в список исключений . Расположение списка исключений во многом зависит от вашего стороннего антивируса.

Примечание . Если вы используете надстройки Outlook, вы также можете воспользоваться посмотрите, какие надстройки у вас активны. Перейдите в Файл> Параметры> Надстройки и посмотрите, есть ли у вас какой-либо антивирусный плагин, который может помешать подключению к серверу. Если вы видите антивирусный плагин (например, Avast! Add-in ), нажмите кнопку Go рядом с Управление надстройкой COM- ins и снимите флажок рядом с плагином. Это должно предотвратить вмешательство антивирусного модуля в соединение с сервером.

Метод 4. Проверка помех от VPN

Если вы используете решение VPN для защиты своего веб-трафика и сохранения анонимности при просмотре веб-страниц в Интернете, вам может потребоваться чтобы проверить, не в этом ли причина проблемы. Некоторые пользователи сообщают, что обнаруживают, что их VPN-соединение препятствует обмену данными Outlook с почтовым сервером.

Вы можете легко проверить, так ли это, отключив сетевое соединение VPN и отправив электронное письмо через Outlook. Если электронное письмо было успешно отправлено, когда сеть VPN отключена, у вас есть два возможных пути вперед. Вы можете либо обратиться в службу поддержки сети VPN и попросить внести почтовый сервер в белый список, либо вообще искать другого поставщика VPN.

Сайт на последней версии Друпала. Установлен и настроен модуль SMTP Authentication Support (полгода уже как). Почта для домена — на Гугле.

Заметила, что вдруг перестали отправляться письма из формы обратной связи. Настройки не трогались. Посмотрела снова инструкции, зашла в аккаунт Гугла, в разделе Безопасность снова включила доступ для небезопасных приложений (Гугл периодически отключает его, как написано у него в справке), потом ещё перешла по ссылке accounts.google.com/DisplayUnlockCaptcha (тоже по инструкции) — но проблему это не решило.

Больше не знаю, что сделать. Почему вдруг сломалось — не пойму. Обновления уже давно сделала, работало до сих пор. Может Гугл на своей стороне что-то поменял? Пришло письмо, что будет переход на протокол Oauth, но это через год, а не прямо сейчас…

  • Drupal8
  • Есть вопрос
  • Решение проблем

Лучший ответ

Включите в настройках модуля smtp отладочные сообщения. Возможно станет более понятно что происходит

Ошибка SMTP: не удалось подключиться к узлу SMTP. Сообщение не может быть отправлено.

Ошибка Mailer: ошибка SMTP: не удалось подключиться к узлу SMTP.

  • отправка почты с использованием php и груши на окнах
  • PHP: Как отправить электронную почту с вложением с помощью smtp-настроек?
  • Ошибка SMTP: не удалось подключиться к SMTP-хосту
  • Отказывающийся парсинг электронной почты
  • Google App-Gmail Невозможно установить. Gmail, заменяющий адрес при отправке через SMTP-транспорт Swiftmailer (PHP)

Я не могу найти способ заставить PHPMailer работать в CentOS. Почта работает очень хорошо под Windows с XAMPP, но я всегда получаю эту ошибку под Linux.

SMTP-сервер является слушателем Lotus Domino на порту 25, у компьютера CentOS нет никакого брандмауэра, и странно, что даже почта () не работает. Он ничего не возвращает (в то время как в Windows возвращается 1). Если я отправлю электронное письмо через telnet через CentOS-сервер, он работает нормально, поэтому я не думаю, что это сетевая проблема. Это должно быть связано с PHP, но я не знаю, как это сделать.

<?php require("class.phpmailer.php"); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Host = "192.168.xx"; $mail->SMTPAuth = false; $mail->From = "xxx@xxx.it"; $mail->FromName = "XXX"; $mail->AddAddress("xxx@xxx.it"); $mail->IsHTML(true); $mail->Subject = "Test"; $mail->Body = "Test"; if(!$mail->Send()) { echo "Message could not be sent. <p>"; echo "Mailer Error: " . $mail->ErrorInfo; exit; } echo "Message has been sent"; ?> 

Просто для уточнения кода выше работает на XAMPP (Windows).

Я отлаживал ошибку на PHPMailer, и здесь происходит ошибка (метод class.smtp.php Connect ()):

 $this->smtp_conn = @fsockopen($host, // the host of the server $port, // the port to use $errno, // error number if any $errstr, // error message if any $tval); // give up after ? secs // verify we connected properly if(empty($this->smtp_conn)) { $this->error = array("error" => "Failed to connect to server", "errno" => $errno, "errstr" => $errstr); if($this->do_debug >= 1) { echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '<br />'; } return false; } 

Похоже, он не может открыть Socket …

UPDATE: использование $ mail-> SMTPDebug = 2; как было предложено Альваро, произвел этот результат:

SMTP -> ОШИБКА: Не удалось подключиться к серверу: разрешено (13)

  • Как настроить php.ini для использования gmail в качестве почтового сервера
  • PHPMailer на сервере godaddy, правильно настройте?
  • Могу ли я использовать gmail как smtp-сервер для своего веб-сайта
  • PHPMailer Скрыть аутентификацию SMTP?
  • Как настроить PHP для отправки электронной почты?

Вы можете включить режим отладки с SMTPDebug свойства SMTPDebug , например:

 $mail = new PHPMailer(); // 1 = errors and messages // 2 = messages only $mail->SMTPDebug = 2; 

Сообщения об ошибках будут отображаться на экране.

Обновить:

Разрешение, отклоняющее сообщение об ошибке с помощью fsockopen (), указывает на то, что пользовательский PHP работает, так как не разрешено открывать сокет. Если вы дважды проверили, что нет брандмауэра, возможно, это проблема SELinux : -?

ОС CentOS 6.3

Не удалось отправить электронные письма

после того, как некоторые reserch выяснили, что SELinux блокирует связь

SELinux активируется и настраивается по умолчанию. Поскольку SELinux не позволяет Apache (httpd, phpmailer) использовать функцию sendmail и делать какие-либо сетевые подключения.

Используя команду getsebool, мы можем проверить, разрешен ли демон httpd сделать подключение по сети и отправить электронное письмо.

 getsebool httpd_can_sendmail getsebool httpd_can_network_connect 

Эта команда возвращает логическое значение boolean. Если его выключить, мы можем установить его, используя следующее:

 sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1 

Теперь вы можете проверить свой php, код, чтобы увидеть, правильно ли работает SendMail или нет.

Ошибка SMTP: не удалось подключиться к узлу SMTP — ИСПРАВЛЕНИЕ

Я использовал PHPMailer в нескольких проектах, но теперь застрял. Это дает мне ошибку: Ошибка SMTP: не удалось подключиться к узлу SMTP. Я пробовал отправлять электронную почту из Thunderbird, и это работает! Но не через PHPMailer … Вот настройки от Thunderbird:

Имя сервера: mail.exampleserver.com Порт: 587 Имя пользователя: [email protected] Безопасная аутентификация: нет Безопасность подключения: STARTTLS

Я сравнил их с сервером в моем последнем проекте, где я использовал PHPMailer, и они были:

Имя сервера: mail.exampleserver2.com Порт: 465 Имя пользователя: [email protected] Безопасная аутентификация: нет Безопасность подключения: SSL / TLS

Мой код php:

 $mail = new PHPMailer(); $mail->IsSMTP(); // send via SMTP $mail->Host = SMTP_HOST; // SMTP servers $mail->Port = SMTP_PORT; // SMTP servers $mail->SMTPAuth = true; // turn on SMTP authentication $mail->Username = SMTP_USER; // SMTP username $mail->Password = SMTP_PASSWORD; // SMTP password $mail->From = MAIL_SYSTEM; $mail->FromName = MAIL_SYSTEM_NAME; $mail->AddAddress($aSecuredGetRequest['email']); $mail->IsHTML(true); // send as HTML 

Где я не прав?

  • stackoverflow.com/questions/42471693/…

Поскольку этот вопрос часто встречается в Google, я хотел бы поделиться здесь своим решением для случая, когда PHP был только что обновлен до версии 5.6 (которая имеет более строгое поведение SSL).

В вики PHPMailer есть раздел об этом:

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

Предлагаемый обходной путь включает следующий фрагмент кода:

$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); 

Это должно работать для PHPMailer 5.2.10 (и выше).

Заметка: Очевидно, как и предлагается в этой вики, это должно быть временное решение!

Правильным решением этой проблемы является замена недействительного, неправильно настроенного или самоподписанного сертификата на исправный.

  • 4 Это лучший ответ для тех, кто борется с почтой на localhost и сталкивается с проблемами самоподписывания.
  • Согласовано! Это лучшее решение для тех, кто работает в среде разработки. Просто оберните этот код в оператор if, чтобы проверить тип среды. Если среда разработки, используйте этот код, иначе пусть сервер позаботится о сертификации.
  • Лучшее решение, после нескольких часов ломки моего мозга всевозможными изменениями параметров кода PHPMailer, это оказалось ошибкой или несовместимостью с более новой версией PHP. Теперь я отправляю с localhost в свою локальную среду разработки. Молодец Мартен!
  • Огромное спасибо! Два дня искал решение.
  • 1 Боковое примечание: мои сертификаты LetsEncrypt были установлены неправильно в Postfix. Это должно быть fullchain.pem а также privkey.pem,

В моем случае эта ошибка возникла из-за отсутствия поддержки SSL в PHP.

Итак, я включил extension = php_openssl.dll

$mail->SMTPDebug = 1; также намекнул на это решение.

Обновление 2017

$mail->SMTPDebug = 2;см. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enhibited-debug-output

  • 2 Мне нужно было включить это расширение PHP (пункт меню WAMP). Спасибо.
  • Ты мой герой. Я уже несколько часов борюсь с электронной почтой на моем локальном хосте, но это решило все мои проблемы!
  • 2 Как вы включили это расширение? @wessel
  • Как я могу включить extension = php_openssl.dll в хостинге GoDaddy? Благодарность

Ваша проблема скорее всего в этом

Безопасность подключения: STARTTLS Безопасность подключения: SSL / TLS

Это 2 разных протокола. Используете ли вы правильный, независимо от того, какой из них вы используете в Thunderbird.

Попробуйте установить переменную:

// if you're using SSL $mail->SMTPSecure = 'ssl'; // OR use TLS $mail->SMTPSecure = 'tls'; 

У меня была аналогичная проблема, и я понял, что это openssl.cafile директива конфигурации в php.ini который нужно было установить, чтобы разрешить проверку безопасных узлов. Вы просто устанавливаете его в расположение файла центра сертификации, такого как тот, который вы можете получить по адресу http://curl.haxx.se/docs/caextract.html.

Эта директива появилась только в PHP 5.6, поэтому при обновлении с PHP 5.5 это застало меня врасплох.

  • У меня та же проблема, используя PHP5.6, если я установил для проверки однорангового соединения значение false в электронных письмах phpmailer, которые попадают в папку спама. Любая идея, как я могу установить путь к сертификату? где взять сертификат? в Debian 8 VPS
  • Спасибо. Для меня это сработало. То есть: cd / etc / php5 && wget curl.haxx.se/ca/cacert.pem && echo «openssl.cafile = /etc/php5/cacert.pem» >> /etc/php5/apache2/php.ini

У меня была такая же проблема, потому что PHPMailer понял, что сервер поддерживает STARTTLS, поэтому он попытался автоматически обновить соединение до зашифрованного соединения. Мой почтовый сервер находится в той же подсети, что и веб-сервер в моей сети, который находится за нашими брандмауэрами домена, поэтому я не слишком беспокоюсь об использовании шифрования (плюс сгенерированные электронные письма в любом случае не содержат конфиденциальных данных).

Итак, я пошел дальше и изменил SMTPAutoTLS на false в файле class.phpmailer.php.

/** * Whether to enable TLS encryption automatically if a server supports it, * even if `SMTPSecure` is not set to 'tls'. * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid. * @var boolean */ public $SMTPAutoTLS = false; 
  • 2 Спасибо. Вам не нужно редактировать базовый класс, чтобы изменить это, просто выполните $ mail-> SMTPAutoTLS = false;

mail.exampleserver.com существует ??? , если нет, попробуйте следующий код (у вас должна быть учетная запись gmail)

$mail->SMTPSecure = 'ssl'; $mail->Host='smtp.gmail.com'; $mail->Port='465'; $mail->Username = '[email protected]'; // SMTP account username $mail->Password = 'your gmail password'; $mail->SMTPKeepAlive = true; $mail->Mailer = 'smtp'; $mail->IsSMTP(); // telling the class to use SMTP $mail->SMTPAuth = true; // enable SMTP authentication $mail->CharSet = 'utf-8'; $mail->SMTPDebug = 0; 

Для меня работал следующий код:

$mail = new PHPMailer(true); $mail->isSMTP();// Set mailer to use SMTP $mail->CharSet = 'utf-8';// set charset to utf8 $mail->SMTPAuth = true;// Enable SMTP authentication $mail->SMTPSecure = 'tls';// Enable TLS encryption, `ssl` also accepted $mail->Host = 'smtp.gmail.com';// Specify main and backup SMTP servers $mail->Port = 587;// TCP port to connect to $mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); $mail->isHTML(true);// Set email format to HTML $mail->Username = 'Sender Email';// SMTP username $mail->Password = 'Sender Email Password';// SMTP password $mail->setFrom('[email protected]', 'John Smith');//Your application NAME and EMAIL $mail->Subject = 'Test';//Message subject $mail->MsgHTML('HTML code');// Message body $mail->addAddress('User Email', 'User Name');// Target email $mail->send(); 
$mail->SMTPDebug = 2; // to see exactly what's the issue 

В моем случае это помогло:

$mail->SMTPSecure = false; $mail->SMTPAutoTLS = false; 

У меня была аналогичная проблема. Я установил PHPMailer версии 1.72, которая не предназначена для управления SSL-соединениями. Обновление до последней версии решило проблему.

Поскольку это распространенная ошибка, ознакомьтесь с информацией об устранении неполадок в PHPMailer Wiki.

Также это сработало для меня

$mailer->Port = '587'; 

В моем случае в CPANEL у меня есть опция «Зарегистрировать идентификаторы почты», где я добавляю свой адрес электронной почты, и через 30 минут он отлично работает с простой функцией почты php.

Недавно я столкнулся с этой проблемой, и причина проблемы оказалась в том, что корневой сертификат на SMTP-сервере, к которому я подключался, был корневым сертификатом Sectigo, срок действия которого недавно истек.

Если вы подключаетесь к SMTP-серверу с помощью SSL / TLS или STARTTLS, и в последнее время вы ничего не меняли в среде, в которой работает ваш скрипт PHPMailer, и эта проблема внезапно возникла — тогда вы можете проверить, не истек ли срок действия или нет. недействительный сертификат где-то в цепочке сертификатов на сервере.

Вы можете просмотреть цепочку сертификатов сервера, используя openssl s_client.

Для SSL / TLS на порту 465:

openssl s_client -connect server.domain.tld:465 | openssl x509 -text 

Для STARTTLS на порту 587:

openssl s_client -starttls smtp -crlf -connect server.domain.tld:587 | openssl x509 -text 

Tweet

Share

Link

Plus

Send

Send

Pin

  • Ошибка smtp failed to connect to server connection timed out 110
  • Ошибка smtp error from remote mail server after rcpt to
  • Ошибка smtp error code 550
  • Ошибка sms скания 6157285
  • Ошибка sms mms xiaomi redmi