2010-08-21 9 views
31

Ecco il mio codice:cercando di inviare posta utilizzando SwiftMailer, gmail smtp, 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); 
?> 

dopo l'esecuzione ottenuto questo errore ...

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

Davvero strano è una cosa. Quando provo a fare la stessa cosa in Eclipse, il completamento automatico non mostra i metodi 'setUsername' e' setPassword'. Mi chiedo se sono possibili o Eclipse è buggato con quella caratteristica. – Eugene

+1

@Eugene Per quanto posso dire, il metodo magico '__call()' gestisce tali funzioni, quindi la mancanza di completamento automatico è normale (neanche phpdoc '@ metodo'). – Maerlyn

+0

Ou. Okey. Non ho esaminato questo. Grazie. – Eugene

risposta

50

SMTP di Gmail richiede la crittografia. Usa:

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

Non posso essere sicuro, ma penso che la porta di Gmail è 587 utilizzando TLS, che non è SSL, ma una nuova versione di esso. Dovresti controllarlo, perché penso che stai inserendo il codice di costruzione sbagliato.

Buona fortuna!

7

ci manca il parametro ssl, dovrebbe essere qualcosa di simile

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

Testato e funziona bene

+0

questa è identica alla risposta selezionata – Raptor

3

Swift SmtpTransport - Codice (inviare un e-mail)

La SMTP di Gmail è : smtp.googlemail.com

il codice 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

sono riuscito a ottenere questo lavoro senza la SSL, ecco come:

$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

Non so se il proxy del mio lavoro blocca l'altro metodo di utilizzo di SwiftMailer ma questa risposta funziona per me quindi se le persone stanno avendo difficoltà con l'opzione 'ssl'' del terzo parametro, prova invece. Grazie a @Neo. – dunc

1

sto usando "Messaggi Swift Mailer" fagotto laravel 3 e avendo lo stesso problema. Dopo alcuni test, nel mio caso, la soluzione era impostare lo stesso indirizzo email che ho usato per l'autenticazione SMTP sul parametro "from".

Stavo cercando di utilizzare un indirizzo diverso e che stava attivando il codice di risposta previsto del codice di risposta rapida "" ma ha ottenuto il codice con l'errore "".

Spero che questo aiuti.

+1

Grazie! Questo mi ha salvato dal vivo :) – schw4ndi

1

Ho già ricevuto lo stesso errore e ho aggiunto il parametro "ssl" in Swift_SmtpTransport :: newInstance ('smtp.gmail.com', 465, "ssl") come osos ha detto.

FUNZIONA !! grazie ..: D

questo è il mio codice:

<?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); 
?> 
Problemi correlati