installing enviar correo php gmail swiftmailer

php - enviar - swiftmailer smtp gmail



Usando swiftmailer de php con gmail (6)

465 es el puerto para ssl, 587 se usa para el cifrado tls (mira http://swiftmailer.org/docs/sending.html#encrypted-smtp )

Estoy escribiendo un script simple en el que se usa una cuenta de Gmail para enviarse un correo electrónico.

Alteré el guión de la reference de SwiftMailer, pero no estoy obteniendo ningún resultado. ¿Qué pasa?

Editar: después de una nueva depuración, encontré que la afirmación

$result = $mailer->send($message);

hace que el código falle (el eco debajo no se imprime).

¿Por qué es esto? ¿Solo porque el mensaje no se envía, el programa falla? : /

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php require_once ''/var/www/swift/lib/swift_required.php''; echo ''Mail sent <br />''; /* //create the transport $transport = Swift_SmtpTransport::newInstance(''smtp.gmail.com'', 587); ->setUsername(''[email protected]'') ->setPassword(''softrain1234'') ; */ $transport = Swift_SmtpTransport::newInstance(''smtp.gmail.com'', 587) ->setUsername(''[email protected]'') ->setPassword(''password'') ; echo ''line 40 <br />''; $mailer = Swift_Mailer::newInstance($transport); $message = Swift_Message::newInstance(''Wonderful Subject'') ->setFrom(array(''[email protected]'' => ''Evaluaciones'')) ->setTo(array(''[email protected]''=> ''A name'')) ->setBody(''Test Message Body'') ; echo ''line 52 <br />''; $result = $mailer->send($message); echo $result; echo ''line 58 <br />''; ?> </body> </html>

El formulario de prueba:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> <title>Test Mail Script</title> </head> <body> <form action="scriptmail.php" method="post"> <input type="submit"/> </table> </form> </body> </html>


Descubrí que lo que Evad dijo era cierto, pero tuve que cambiar un poco su trabajo para la versión actual de Swift Mailer. Ahora es:

$transporter = Swift_SmtpTransport::newInstance(''smtp.gmail.com'', 465, ''ssl'') ->setUsername(''[email protected]'') ->setPassword(''password''); $mailer = Swift_Mailer::newInstance($transporter);

Debería funcionar bien


El sistema GMail SMTP tiene sus problemas dado el SSL y los puertos. Me resulta difícil hacer que funcione con PHP muy bien.

Lo mejor que he encontrado, que funciona es phpGMailer . Es posible que pueda examinar ese código para ver cómo lo hicieron funcionar, pero eso siempre me ha funcionado a la perfección.

Sé que esto no aborda el problema de SwiftMail, solo pensé que lo señalaría :)


Encontré esta pregunta haciendo una búsqueda en Google y usé el código en la respuesta proporcionada por fullybaked. Me llevó al punto donde pude ver en las Excepciones lanzadas que el servidor smtp de Google estaba respondiendo con un código de error que indicaba que no se aceptaba la contraseña y el nombre de usuario. Tras una investigación más profunda encontré los siguientes pasos. Ahora funciona muy bien y puedo seguir desarrollando el código para la producción.

No estoy seguro de cuándo realizó el cambio Google, pero además de configurar su código con su nombre de usuario, contraseña y puerto de Google (465 / ssl o 587 / tls), debe seguir los siguientes pasos para poder usar el servidor de Google smtp.

Para usar el servidor smtp de gmail con su cuenta de gmail, necesita:

1) En Google, "Configuración de cuenta" habilita "Acceso para aplicaciones menos seguras" configurándolo en "Permitir".

2) En la configuración de Gmail en la pestaña "Reenvío y POP / IMAP", verifique el estado de IMAP, debe estar habilitado. (Esto permitirá que los correos electrónicos enviados se guarden en la carpeta enviada).

3) Si después de los pasos 1 y 2 sigue lanzando la excepción, el servidor smtp de Google no acepta el nombre de usuario y la contraseña que necesita para abrir un navegador, vaya a gmail e inicie sesión, luego abra otra pestaña en el mismo navegador y acceda a esta dirección :
https://accounts.google.com/DisplayUnlockCaptcha

According to Google you may have to enter a captcha.

4) Inmediatamente envíe un correo electrónico desde su código, ya que esto le permitirá estar autorizado para usar su cuenta de Gmail.

Espero que esto ayude.


No es para resucitar una publicación anterior, pero solo en caso de que otros estén buscando la respuesta, y porque esta publicación surgió durante mi búsqueda de una solución a pesar de la edad.

Al utilizar PHP SwiftMailer para conectarse a las cuentas de correo electrónico de Gmail o Google Apps, debe usar lo siguiente

$transporter = Swift_SmtpTransport::newInstance(''smtp.gmail.com'', 465, ''ssl'') ->setUsername($this->username) ->setPassword($this->password); $this->mailer = Swift_Mailer::newInstance($transporter);

Esto funciona bien para mi. En el código original, está utilizando el puerto 587 no 465 y no está especificando el protocolo (ssl). No sé si ese poco importa, pero para mí el puerto 587 falló y 465 funcionó bien.

Espero que ayude.


También vine aquí después de horas de investigación. Finalmente encontré la verdadera respuesta. Quería enviar correos electrónicos desde los servidores de correo de google y no desde mi host con autenticación smtp.

Puede rastrear un correo electrónico con sus encabezados completos dentro de gmail, siga esta guía.

https://support.google.com/mail/answer/29436?hl=en

@fullybaked tenía la respuesta correcta para autenticar su correo electrónico a través de smtp, pero aún estaría enviando a través de su host.

$transporter = Swift_SmtpTransport::newInstance(''smtp.gmail.com'', 465, ''ssl'') ->setUsername($this->username) ->setPassword($this->password); $this->mailer = Swift_Mailer::newInstance($transporter);

@ducin fue correcto con los diferentes puertos y tipos de encriptación.

$transporter = Swift_SmtpTransport::newInstance(''smtp.gmail.com'', 465, ''ssl'')

O más moderno y más seguro, uso;

$transporter = Swift_SmtpTransport::newInstance(''smtp.gmail.com'', 587, ''tls'')

Si desea enviar directamente desde un servidor de Gmail, debe configurar el modo de autorización. Normal es el predeterminado.

$transporter = Swift_SmtpTransport::newInstance(''smtp.gmail.com'', 587, ''tls'') ->setAuthMode(''login'') ->setUsername(''[email protected]'') ->setPassword(''password''); $mailer = Swift_Mailer::newInstance($transporter);

@gene también es correcto, tienes que autenticar tu aplicación, así que sigue sus instrucciones.

Además de evitar que su correo electrónico llegue a la carpeta de spam, también tendrá que agregar registros de texto dns con DKIM (claves de dominio)

https://support.google.com/a/answer/174124?hl=en

Registros SPF

https://support.google.com/a/answer/33786?hl=en

y DMARC

https://support.google.com/a/answer/2466580?hl=en