Ответ 1
Сначала убедитесь, что у вас установлена поддержка SSL (найдите раздел "openssl" на выходе из phpinfo()
).
Вы можете установить следующие параметры в вашем PHP.ini:
ini_set("SMTP","ssl://smtp.gmail.com");
ini_set("smtp_port","465");
Ответ SMTP-сервера: 530 5.7.0 Сначала необходимо выполнить команду STARTTLS
Я получаю это сообщение об ошибке при использовании функции mail() в файле сценария php...
Я использую SMTP-сервер Gmail и Gmail, используя STARTTLS, который является безопасным SSL и я уже использую эти команды в моем файле contact.php
ini_set("SMTP","smtp.gmail.com");
ini_set("sendmail_from","<email-address>@gmail.com>");
так, какую команду я могу использовать, чтобы включить STARTTLS или настроить в php, ini file??
Сначала убедитесь, что у вас установлена поддержка SSL (найдите раздел "openssl" на выходе из phpinfo()
).
Вы можете установить следующие параметры в вашем PHP.ini:
ini_set("SMTP","ssl://smtp.gmail.com");
ini_set("smtp_port","465");
Я знаю, что библиотека PHPMailer может обрабатывать такие SMTP-транзакции.
Кроме того, подделка sendmail с библиотекой sendmail-SSL должна выполнять эту работу.
Swift Mailer - отличная почтовая библиотека PHP, которая поддерживает SSL/TLS SMTP из коробки. Подумайте об использовании его вместо функции mail
, подверженной ошибкам.
В моем случае Swift Mailer тоже не помог. Я нашел решение здесь: http://forum.powweb.com/showthread.php?t=73406 - поэтому после команды EHLO нужно отправить команду STARTTLS, включив криптографию с помощью stream_socket_enable_crypto( $connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT );
и снова команду EHLO, Только это позволило мне отправлять электронные письма с моим "упрямым" SMTP-сервером.
Из коробки Swift Mailer не может делать STARTTLS, однако некоторые хорошие парни написали патч для него.
Я обнаружил, что исправление было немного сложным (возможно, пошло не так), поэтому он был готов к загрузке здесь: Swift Mailer с STARTTLS
У меня был ложный ответ на следующее:
fputs($connection, 'STARTTLS'.$newLine);
Оказывается, я использую неверную переменную соединения, поэтому мне просто пришлось ее изменить:
fputs($smtpConnect, 'STARTTLS'.$newLine);
Если использование TLS не забудьте поставить HELO до и после:
fputs($smtpConnect, 'HELO '.$localhost . $newLine);
$response = fgets($smtpConnect, 515);
if($secure == 'tls')
{
fputs($smtpConnect, 'STARTTLS'.$newLine);
$response = fgets($smtpConnect, 515);
stream_socket_enable_crypto($smtpConnect, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
// Say hello again!
fputs($smtpConnect, 'HELO '.$localhost . $newLine);
$response = fgets($smtpConnect, 515);
}
Я собираюсь поделиться своим путем, и это сработало для меня после реализации следующего:
Откройте файл Php.ini и заполните все значения в соответствующих полях, сняв ref из Настройки SMTP Gmail
Удалить комментарии из [почтовых функций] Заявления, которые являются инструкциями для сервера smtp и соответствуют их значениям.
Также SMTP-сервер sendmail является фальшивым сервером. Его ничего нет рядом с текстовым терминалом (попробуйте написать что-нибудь на нем: P). Он будет использовать gmail s, tp для отправки писем. Поэтому настройте его правильно, сопоставляя настройки SMTP Gmail:
smtp.gmail.com
Port: 587
Я бы предложил вам перейти по этой ссылке.
https://www.php.net/manual/en/ref.mail.php
Хотя я не получил почту в Gmail, но, по крайней мере, она будет обслуживать первоначальные ошибки.
Благодарю вас
Проблема решена,
Я отредактировал файл /etc/postfix/master.cf
и прокомментировал
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
и изменил строку с
-o smtpd_tls_security_level=encrypt
в
-o smtpd_tls_security_level=may
И работал хорошо
Blockquote
I then modified the php.ini file to use it (commented out the other lines):
[mail function]
; For Win32 only.
; SMTP = smtp.gmail.com
; smtp_port = 25
; For Win32 only.
; sendmail_from = <e-mail username>@gmail.com
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"
Ignore the "For Unix only" comment, as this version of sendmail works for Windows.
You then have to configure the "sendmail.ini" file in the directory where sendmail was installed:
[sendmail]
smtp_server=smtp.gmail.com
smtp_port=25
error_logfile=error.log
debug_logfile=debug.log
auth_username=<username>
auth_password=<password>
force_sender=<e-mail username>@gmail.com
http://byitcurious.blogspot.com.br/2009/04/solving-must-issue-starttls-command.html
> Blockquote
В Windows я смог заставить его работать, включив TLS для безопасной связи на виртуальном SMTP-сервере. TLS не будет доступен на виртуальном сервере SMTP без сертификата. Эта ссылка даст необходимые шаги.