У меня проблемы с получением сценария, который отправляет счета клиентам для надежной работы.Некоторое время сценарий работал совершенно нормально, и мы не получали никаких ошибок.Однако недавно один из наших клиентов уведомил нас, что они получили сообщение об ошибке после того, как разместили свой заказ, и я сузил его до той части скрипта, которая отправляет электронное письмо с приложенным счетом.
Ошибка, которую мы получаем:
Warning:stream_socket_enable_crypto(): SSL operation failed with code 1.
OpenSSL Error messages: error:14090086:SSL
routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in
path/to/phpmailer/phpmailer/class.smtp.php on line 355
В то время я использовал конфигурацию PHPMailer:
// enable SMTP debugging.
$mail->SMTPDebug = 0;
//Set PHPMailer to use SMTP
$mail->isSMTP();
//Set SMTP host name.
$mail->Host = "smtp.netregistry.net";
$mail->SMTPAuth = true;
// Username and Password;
$mail->Username = $email;
$mail->Password = $email_pw;
$mail->Port = 25;
// Message information bellow
На основании некоторых исследований я обнаружил, что порт 25 часто блокируется дляпопробуйте предотвратить спам, и он также используется провайдерами (правильно?).Поэтому я перечитал документацию почтового сервера NetRegistry, а также поговорил с их службой поддержки.Если я хотел использовать SSL, мне нужно было использовать порт 465, в противном случае я должен был бы использовать порт 587.
Итак, на моей локальной машине Windows, использующей XAMPP, я попытался использовать следующую конфигурацию:
// Server Settings
$mail->SMTPDebug = 2;
$mail->isSMTP();
$mail->Host = "smtp.netregistry.net";
$mail->SMTPAuth = true;
$mail->Username = $email;
$mail->Password = $email_pw;
$mail->SMTPSecure = "ssl";
$mail->Port = 465;
И все это было помещено в блок try catch, где я ловил исключение, основываясь на том, что я прочитал о том, как PHPMailer обрабатывает ошибки и предупреждения.
Это прекрасно работало на моей локальной машине, и ябыл в состоянии надежно и регулярно отправлять электронные письма с этими настройками.Тем не менее, когда я загрузил это на удаленный хост, он не отправлял ни одного письма (прошло 4 дня с тех пор, как я попробовал это), и не выдает никаких сообщений об ошибках, несмотря на то, что блок catch отображает строку, в которой говорится, что ошибка имеетпроизошло.Я запустил различные конфигурации с аргументом SMTPDebug, установленным в 2, и это дало мне следующее:
При запуске скрипта на удаленном хосте с моими исходными настройками (порт 25) при сбое:
2019-03-25 21:10:12 SERVER -> CLIENT: 220 smtp.netregistry.net
2019-03-25 21:10:12 CLIENT -> SERVER: EHLO website.com.au
2019-03-25 21:10:12 SERVER -> CLIENT: 250-smtp-1.servers.netregistry.net Hello apache.netregistry.net [202.124.241.203]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-AUTH LOGIN PLAIN CRAM-MD5
250-STARTTLS
250 HELP
2019-03-25 21:10:12 CLIENT -> SERVER: STARTTLS
2019-03-25 21:10:12 SERVER -> CLIENT: 220 TLS go ahead
<br />
<b>Warning</b>: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in <b>\path\to\vendor\phpmailer\phpmailer\class.smtp.php</b> on line <b>355</b><br />
2019-03-25 21:10:13 SMTP Error: Could not connect to SMTP host.
2019-03-25 21:10:13 CLIENT -> SERVER: QUIT
2019-03-25 21:10:13 SERVER -> CLIENT: �������A�;� MNb���ʋ�]+�
���M�m3����Kz����f,�b�����<��t�٢��i�ޜ�w�k��PC����c�g�?���I��"r
��1���$����kKA�L�G����� ��z�<tC�� �s� BP����Tu�xڼH5����ɧ`���e��ڍF������i[�ql@����Gh�D=[���gh������pV����}������������P
2019-03-25 21:10:13 SMTP ERROR: QUIT command failed: �������A�;� MNb���ʋ�]+�
���M�m3����Kz����f,�b�����<��t�٢��i�ޜ�w�k��PC����c�g�?���I��"r
��1���$����kKA�L�G����� ��z�<tC�� �s� BP����Tu�xڼH5����ɧ`���e��ڍF������i[�ql@����Gh�D=[���gh������pV����}������������P
2019-03-25 21:10:13 SMTP Error: Could not connect to SMTP host.
<strong> There was an error sending your packing slip</strong>
Когда я запускаю сценарий с моими обновленными настройками (SSL для порта 465):
2019-03-25 22:15:21 SMTP ERROR: Failed to connect to server: Connection refused (111)
2019-03-25 22:15:21 SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
<strong> There was an error sending your packing slip</strong>
Я предполагаю, что ключевая проблема заключается в том, что я не правильно что-то понимаю здесь, поэтомуесли бы кто-то мог помочь мне понять, где я иду не так, это было бы замечательно.
Спасибо.
РЕДАКТИРОВАТЬ: Одна вещь, которую я забыл упомянуть, говоря сегодня о поддержке Net Registryони предложили установить хост на localhost
и порт на 25. Это не сработало.