Ответ SMTP-сервера: 530 5.7.0 Сначала необходимо выполнить команду STARTTLS
Я получаю это сообщение об ошибке, когда я использую функцию mail () в файле php script …
Я использую gmail SMTP-сервер и gmail, используя STARTTLS, который является защищенным SSL для предотвращения спама, и я уже использую эти команды в файле contact.php
ini_set("SMTP","smtp.gmail.com"); ini_set("sendmail_from","<email-address>@gmail.com>");
поэтому какую команду я могу использовать для включения STARTTLS или настройки в php, ini-файле?
Во-первых, убедитесь, что на PHP-установке установлена поддержка 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 из коробки . Подумайте о том, чтобы использовать его вместо функции, связанной с ошибкой.
В моем случае 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.
Удалите комментарии из сообщений [mail function], которые являются инструкциями для сервера smtp и соответствуют их значениям.
Также SMTP-сервер sendmail является поддельным сервером. Его ничего нет рядом с текстовым терминалом (попробуйте написать что-нибудь на нем: P). Он будет использовать gmail s, tp для отправки писем. Поэтому настройте его правильно, сопоставляя настройки SMTP Gmail:
smtp.gmail.com Port: 587
Задача решена,
Я редактировал файл /etc/postfix/master.cf
и прокомментировал
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
и изменено
-o smtpd_tls_security_level=encrypt to -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 без сертификата. Эта ссылка даст необходимые шаги.