2010-08-21 10 views
31

Aquí está mi código:intentando enviar correo usando gestor de correo rápido, smtp gmail, php

<?php 
require_once 'Swift/lib/swift_required.php'; 

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465) 
    ->setUsername('[email protected]') 
    ->setPassword('pass'); 

$mailer = Swift_Mailer::newInstance($transport); 
$message = Swift_Message::newInstance('Wonderful Subject') 
    ->setFrom(array('[email protected]' => 'MY NAME')) 
    ->setTo(array('[email protected]' => 'YOU')) 
    ->setBody('This is the text of the mail send by Swift using SMTP transport.'); 
//$attachment = Swift_Attachment::newInstance(file_get_contents('path/logo.png'), 'logo.png'); 
//$message->attach($attachment); 
$numSent = $mailer->send($message); 
printf("Sent %d messages\n", $numSent); 
?> 

después de ejecutar dio este mensaje ...

Fatal error: Uncaught exception 'Swift_TransportException' with message 'Expected response code 220 but got code "", with message ""' in /home/sitenyou/public_html/Swift/lib/classes/Swift/Transport/AbstractSmtpTransport.php:406

Stack trace: 
#0 /home/sitenyou/public_html/Swift/lib/classes/Swift/Transport/AbstractSmtpTransport.php(299): Swift_Transport_AbstractSmtpTransport->_assertResponseCode('', Array) 
#1 /home/sitenyou/public_html/Swift/lib/classes/Swift/Transport/AbstractSmtpTransport.php(107): Swift_Transport_AbstractSmtpTransport->_readGreeting() 
#2 /home/sitenyou/public_html/Swift/lib/classes/Swift/Mailer.php(74): Swift_Transport_AbstractSmtpTransport->start() 
#3 /home/sitenyou/public_html/sgmail.php(16): Swift_Mailer->send(Object(Swift_Message)) 
#4 {main} thrown in /home/sitenyou/public_html/Swift/lib/classes/Swift/Transport/AbstractSmtpTransport.php on line 406 
+0

Realmente extraño es una cosa. Cuando trato de hacer lo mismo en Eclipse, el autocompletar no muestra los métodos 'setUsername' y' setPassword'. Me pregunto si son posibles o si Eclipse tiene errores, esa característica. – Eugene

+1

@Eugene Por lo que puedo decir, el método mágico '__call()' maneja esas funciones, por lo que la falta de autocompletar es normal (no 'phpdoc' @ method). – Maerlyn

+0

Ou. Bueno. No investigó eso. Gracias. – Eugene

Respuesta

50

SMTP de Gmail requiere encriptación. Uso:

Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, "ssl"); 
2

No puedo estar seguro, pero creo que el puerto de Gmail es 587 usando TLS, que no es SSL, pero una versión más reciente de ella. Debería verificar eso, porque creo que está colocando el código de construcción incorrecto.

¡La mejor de las suertes!

7

no le falta el parámetro SSL, debe ser algo así

Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, "ssl") 

Probado y funciona bien

+0

esto es idéntico a la respuesta seleccionada – Raptor

3

Swift SmtpTransport - Código (enviar un correo electrónico)

El SMTP de GMAIL es : smtp.googlemail.com

el código completo:

<?php 
$pEmailGmail = '[email protected]'; 
$pPasswordGmail = '********'; 
$pFromName = 'MundialSYS.com'; //display name 

$pTo = '[email protected]'; //destination email 
$pSubjetc = "Hello MundialSYS"; //the subjetc 
$pBody = '<html><body><p>Hello MundialSYS</p></html></body>'; //body html 

$transport = Swift_SmtpTransport::newInstance('smtp.googlemail.com', 465, 'ssl') 
      ->setUsername($pEmailGmail) 
      ->setPassword($pPasswordGmail); 

$mMailer = Swift_Mailer::newInstance($transport); 

$mEmail = Swift_Message::newInstance(); 
$mEmail->setSubject($pSubjetc); 
$mEmail->setTo($pTo); 
$mEmail->setFrom(array($pEmailGmail => $pFromName)); 
$mEmail->setBody($pBody, 'text/html'); //body html 

if($mMailer->send($mEmail) == 1){ 
    echo 'send ok'; 
} 
else { 
    echo 'send error'; 
} 
?> 
2

he logrado conseguir este trabajo sin el SSL, aquí es cómo:

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

$message = Swift_Message::newInstance($subject) 
      ->setFrom(array($emailTo=>$name)) 
      ->setTo(array($emailTo=>'Neo Nosrati')) 
      ->addPart($body,'text/plain') 
      ->setReturnPath('[email protected]'); 
+1

No sé si el proxy de mi trabajo bloquea el otro método de usar SwiftMailer pero esta respuesta funciona para mí, así que si la gente está teniendo dificultad con la opción del tercer parámetro ''ssl'', intente esto en su lugar. Gracias @Neo. – dunc

1

estoy usando los "mensajes" Swift Mailer bulto en laravel 3 y que tiene el mismo problema. Después de algunas pruebas, en mi caso, la solución fue establecer la misma dirección de correo electrónico que utilicé en la autenticación SMTP en el parámetro "de".

Estaba tratando de usar una dirección diferente y que estaba activando el "código de respuesta esperado del swiftmailer 220 pero obtuvo el código con el mensaje" error.

Espero que ayude.

+1

¡Gracias! Esto me salvó la vida :) – schw4ndi

1

Recibí el mismo error antes y agregué el parámetro "ssl" en Swift_SmtpTransport :: newInstance ('smtp.gmail.com', 465, "ssl") como dijo osos.

¡FUNCIONA! gracias ..: D

este es mi código:

<?php 
require_once 'swift/lib/swift_required.php'; 

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, "ssl") 
    ->setUsername('[email protected]') 
    ->setPassword('XXXXXXX'); 

$mailer = Swift_Mailer::newInstance($transport); 
$message = Swift_Message::newInstance('THIS IS THE SUBJECT') 
    ->setFrom(array('[email protected]' => 'YOUR NAME')) 
    ->setTo(array('[email protected]' => 'YOU')) 
    ->setBody('This is the text of the mail send by Swift using SMTP transport.'); 
//$attachment = Swift_Attachment::newInstance(file_get_contents('path/logo.png'), 'logo.png'); 
//$message->attach($attachment); 
$numSent = $mailer->send($message); 
printf("Sent %d messages\n", $numSent); 
?> 
Cuestiones relacionadas