Respuesta del servidor SMTP: 530 5.7.0 Primero debe emitir un comando STARTTLS

Respuesta del servidor SMTP: 530 5.7.0 Primero debe emitir un comando STARTTLS

Aparece este mensaje de error cuando uso la función mail () en el archivo de script php

Estoy usando gmail SMTP server y gmail usando STARTTLS, que es SSL seguro para evitar spams y ya uso estos comandos en mi archivo contact.php

ini_set("SMTP","smtp.gmail.com"); ini_set("sendmail_from","@gmail.com>"); 

Entonces, ¿qué comando puedo usar para habilitar STARTTLS o configurar en php, archivo ini?

Primero, asegúrese de que la instalación de PHP tenga soporte SSL (busque una sección “openssl” en la salida de phpinfo() ).

Puede establecer la siguiente configuración en su PHP.ini:

 ini_set("SMTP","ssl://smtp.gmail.com"); ini_set("smtp_port","465"); 

Sé que la biblioteca PHPMailer puede manejar ese tipo de transacciones SMTP.

Además, un sendmail falso con la biblioteca sendmail-SSL debería hacer el trabajo.

Swift Mailer es una excelente biblioteca de correo PHP que admite SSL / TLS SMTP de fábrica . Considere usarlo en lugar de la función de mail propenso a errores.

En mi caso, Swift Mailer tampoco pudo ayudar. Encontré una solución aquí: http://forum.powweb.com/showthread.php?t=73406 – entonces después del comando EHLO uno debe enviar el comando STARTTLS, habilitando la criptografía con stream_socket_enable_crypto( $connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT ); y nuevamente el comando EHLO. Solo esto me permitió enviar correos electrónicos con mi servidor SMTP “obstinado”.

Fuera de la caja Swift Mailer no puede hacer STARTTLS, sin embargo, algunos chicos buenos han escrito un parche para ello .

Encontré el parcheo que era un poco pesado (probablemente lo hice de la manera incorrecta), así que lo he descomprimido listo para descargarlo aquí: Swift Mailer con STARTTLS

Tuve una respuesta falsa para lo siguiente:

 fputs($connection, 'STARTTLS'.$newLine); 

Resulta que utilizo la variable de conexión incorrecta, así que solo tuve que cambiarla a:

 fputs($smtpConnect, 'STARTTLS'.$newLine); 

Si usa TLS recuerde poner HELO antes y después:

 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); } 

Voy a compartir mi camino y funcionó para mí después de implementar lo siguiente:

Abra el archivo Php.ini y complete todos los valores en los campos respectivos tomando ref desde Gmail SMTP Settings

Elimine los comentarios de las declaraciones de [función de correo] que son instrucciones para el servidor smtp y coinciden con sus valores.

Además, el servidor SMTP de sendmail es un servidor falso. No hay nada al lado de un terminal de texto (Intenta escribir algo sobre él.: P). Utilizará gmail s, tp para enviar correos. Así que configúrelo correctamente haciendo coincidir las configuraciones SMTP de Gmail:

 smtp.gmail.com Port: 587 

Problema resuelto,

Edité el archivo /etc/postfix/master.cf

y comentó

 -o smtpd_relay_restrictions=permit_sasl_authenticated,reject 

y cambiado

 -o smtpd_tls_security_level=encrypt to -o smtpd_tls_security_level=may 

Y funcionó bien

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 = @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= auth_password= force_sender=@gmail.com http://byitcurious.blogspot.com.br/2009/04/solving-must-issue-starttls-command.html > Blockquote 

Para Windows, pude hacer que funcione al habilitar TLS para una comunicación segura en el servidor virtual SMTP. TLS no estará disponible en el servidor virtual SMTP sin un certificado. Este enlace dará los pasos necesarios.

https://support.microsoft.com/en-ie/help/4014125/how-to-configure-iis-smtp-for-outgoing-tls-authentication