2009-08-05 13 views
16

Ich habe Probleme beim Senden einer E-Mail mit der PHPMailer-Klasse, aber es funktioniert mit PEAR Mail :: factory.Problem mit SMTP-Authentifizierung in PHP mit PHPMailer, mit Pear Mail funktioniert

Ich denke, das Problem ist mit der SMTP-Authentifizierung, aber ich konnte das Problem nicht finden.

Der Code mit Problem ist:

<?php 
require("class.phpmailer.php"); 

$mail = new PHPMailer(); 

$mail->IsSMTP();  // set mailer to use SMTP 
$mail->Host = 'mail.xxx.com.br'; // my host here 
$mail->SMTPAuth = true;  // turn on SMTP authentication 
$mail->Username = '[email protected]'; // a valid email here 
$mail->Password = '***'; // the password from email 
$mail->From = '[email protected]'; 
$mail->SMTPDebug = true; 
$mail->AddReplyTo('[email protected]', 'Test'); 

$mail->FromName = 'Test SMTP'; 
$mail->AddAddress('[email protected]', '[email protected]'); 

$mail->Subject = 'Test SMTP'; 
$mail->IsHTML(true); 
$mail->Body = '<b>Teste</b><br><h1>teste 2</h1>'; 
//$mail->Send(); 

if(!$mail->Send()) 
{ 
    echo "Message could not be sent. <p>"; 
    echo "Mailer Error: " . $mail->ErrorInfo; 
    exit; 
} 

?> 

Der Code mit PEAR, das funktioniert ist:

<?php 
include('Mail.php'); 
include('Mail/mime.php'); 

$text = 'Versao em texto'; 
$html = '<html><body>Versao de email em <b>HTML</b></body></html>'; 
$crlf = "\n"; 
$hdrs = array(
       'From' => '[email protected]', 
       'Subject' => 'Test - mail.php' 
      ); 

$mime = new Mail_mime($crlf); 

$mime->setTXTBody($text); 
$mime->setHTMLBody($html); 

$body = $mime->get(); 
$hdrs = $mime->headers($hdrs); 

$mail = Mail::factory('smtp', 
    array ('host' => 'mail.xxx.com.br', 
    'debug'=> true, 
    'auth' => true, 
    'username' => '[email protected]', 
    'password' => '***')); 

$mail->send('[email protected]', $hdrs, $body); 
?> 

Wenn ich den Code mit Problem mit Debug aktiviert laufen (SMTPDebug = True) Ich habe:

SMTP -> FROM SERVER: 

SMTP -> get_lines(): $data was "" 

SMTP -> get_lines(): $str is "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

" 

SMTP -> get_lines(): $data is "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

" 

SMTP -> get_lines(): $data was "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

" 
SMTP -> get_lines(): $str is "220-We do not authorize the use of this system to transport unsolicited, 
" 

SMTP -> get_lines(): $data is "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

220-We do not authorize the use of this system to transport unsolicited, 

" 

SMTP -> get_lines(): $data was "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

220-We do not authorize the use of this system to transport unsolicited, 

" 

SMTP -> get_lines(): $str is "220 and/or bulk e-mail. 

" 

SMTP -> get_lines(): $data is "220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

220-We do not authorize the use of this system to transport unsolicited, 

220 and/or bulk e-mail. 

" 

SMTP -> FROM SERVER: 

220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

220-We do not authorize the use of this system to transport unsolicited, 

220 and/or bulk e-mail. 

SMTP -> ERROR: EHLO not accepted from server: 220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Wed, 05 Aug 2009 10:00:48 -0300 

220-We do not authorize the use of this system to transport unsolicited, 

220 and/or bulk e-mail. 


SMTP -> get_lines(): $data was "" 

SMTP -> get_lines(): $str is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

" 

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

" 

SMTP -> get_lines(): $data was "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

" 

SMTP -> get_lines(): $str is "250-SIZE 20971520 

" 

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 
250-SIZE 20971520 

" 

SMTP -> get_lines(): $data was "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 
250-SIZE 20971520 

" 

SMTP -> get_lines(): $str is "250-PIPELINING 

" 

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

250-SIZE 20971520 

250-PIPELINING 

" 

SMTP -> get_lines(): $data was "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

250-SIZE 20971520 

250-PIPELINING 

" 

SMTP -> get_lines(): $str is "250-AUTH PLAIN LOGIN 

" 

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

250-SIZE 20971520 

250-PIPELINING 

250-AUTH PLAIN LOGIN 

" 

SMTP -> get_lines(): $data was "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

250-SIZE 20971520 

250-PIPELINING 

250-AUTH PLAIN LOGIN 

" 

SMTP -> get_lines(): $str is "250-STARTTLS 

" 

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

250-SIZE 20971520 

250-PIPELINING 

250-AUTH PLAIN LOGIN 

250-STARTTLS 

" 

SMTP -> get_lines(): $data was "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

250-SIZE 20971520 

250-PIPELINING 

250-AUTH PLAIN LOGIN 

250-STARTTLS 

" 

SMTP -> get_lines(): $str is "250 HELP 

" 

SMTP -> get_lines(): $data is "250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

250-SIZE 20971520 

250-PIPELINING 

250-AUTH PLAIN LOGIN 

250-STARTTLS 

250 HELP 

" 

SMTP -> FROM SERVER: 

250-orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

250-SIZE 20971520 

250-PIPELINING 

250-AUTH PLAIN LOGIN 

250-STARTTLS 

250 HELP 

SMTP -> get_lines(): $data was "" 

SMTP -> get_lines(): $str is "250 orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

" 

SMTP -> get_lines(): $data is "250 orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 

" 

SMTP -> ERROR: AUTH not accepted from server: 250 orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 


SMTP -> get_lines(): $data was "" 

SMTP -> get_lines(): $str is "503 AUTH command used when not advertised 

" 

SMTP -> get_lines(): $data is "503 AUTH command used when not advertised 

" 

SMTP -> FROM SERVER: 

503 AUTH command used when not advertised 

SMTP -> ERROR: RSET failed: 503 AUTH command used when not advertised 


Message could not be sent. <p>Mailer Error: SMTP Error: Could not connect to SMTP host. 

A nd das Debug-Ergebnis des PEAR Mail-Code ist:

DEBUG: Recv: 220-orion.bommtempo.net.br ESMTP Exim 4.69 #1 Tue, 04 Aug 2009 19:37:10 -0300 

DEBUG: Recv: 220-We do not authorize the use of this system to transport unsolicited, 

DEBUG: Recv: 220 and/or bulk e-mail. 

DEBUG: Send: EHLO localhost 


DEBUG: Recv: 250-orion.bommtempo.net.br Hello localhost [200.155.129.6] 

DEBUG: Recv: 250-SIZE 20971520 

DEBUG: Recv: 250-PIPELINING 

DEBUG: Recv: 250-AUTH PLAIN LOGIN 

DEBUG: Recv: 250-STARTTLS 

DEBUG: Recv: 250 HELP 

DEBUG: Send: STARTTLS 


DEBUG: Recv: 220 TLS go ahead 

DEBUG: Send: EHLO localhost 


DEBUG: Recv: 250-orion.bommtempo.net.br Hello localhost [200.155.129.6] 

DEBUG: Recv: 250-SIZE 20971520 

DEBUG: Recv: 250-PIPELINING 

DEBUG: Recv: 250-AUTH PLAIN LOGIN 

DEBUG: Recv: 250 HELP 

DEBUG: Send: AUTH LOGIN 


DEBUG: Recv: 334 VXNlcm5hbWU6 

DEBUG: Send: c2lzdGVtYWFkbWluQGJvbW10ZW1wby5jb20uYnI= 


DEBUG: Recv: 334 UGFzc3dvcmQ6 

DEBUG: Send: RVkyYVM4YnpMNU5k 


DEBUG: Recv: 235 Authentication succeeded 

DEBUG: Send: MAIL FROM: 


DEBUG: Recv: 250 OK 

DEBUG: Send: RCPT TO: 


DEBUG: Recv: 250 Accepted 

DEBUG: Send: DATA 


DEBUG: Recv: 354 Enter message, ending with "." on a line by itself 

DEBUG: Send: MIME-Version: 1.0 

From: [email protected] 

Subject: Teste de mail - mail.php 

Content-Type: multipart/alternative; 
    boundary="=_b3c5407ccf494306d78fbb35800efe65" 


--=_b3c5407ccf494306d78fbb35800efe65 

Content-Transfer-Encoding: 7bit 

Content-Type: text/plain; charset="ISO-8859-1" 


Versao em texto 

--=_b3c5407ccf494306d78fbb35800efe65 

Content-Transfer-Encoding: quoted-printable 

Content-Type: text/html; charset="ISO-8859-1" 


Versao de email em HTML--=_b3c5407ccf494306d78fbb35800efe65-- 

. 

DEBUG: Recv: 250 OK id=1MYSd4-0005Ky-Jw 

DEBUG: Send: QUIT 

Antwort

0

, dass die OpenSSL-Erweiterung aktiviert und die Verzeichnis Sprachen mit "br"? prüft zuerst die Daten.

+0

In die phpinfo() habe ich: ... OpenSSL-Unterstützung OpenSSL-Version \t OpenSSL 0.9.8-fips-rhel5 01 Jul 2008 Was mich verrückt machen ist, dass mit PEAR es funktioniert. – Evandro

16

Versuchen Sie, diese Zugabe:

$mail->SMTPAuth = true; 
$mail->SMTPSecure = "tls"; 

von Ihnen Debug-Protokolle suchen, können Sie feststellen, dass das fehlerhafte PHPMailer Protokoll zeigt dies:

(..snip..) 
SMTP -> ERROR: AUTH not accepted from server: 250 orion.bommtempo.net.br Hello admin-teste.bommtempo.com.br [200.155.129.6] 
(..snip..) 
503 AUTH command used when not advertised 
(..snip..) 

Während Ihrer erfolgreichen PEAR Log dies zeigt:

DEBUG: Send: STARTTLS 
DEBUG: Recv: 220 TLS go ahead 

Meine Vermutung ist, dass explizit PHPMAiler TLS verwenden wird es auf den richtigen Trac setzen k.
Stellen Sie außerdem sicher, dass Sie die neueste Version von PHPMailer verwenden.

+1

Diese Antwort löste mein Problem. Mein Hosting-Unternehmen sagte mir, ich solle SSL nicht setzen, aber dann habe ich TLS benötigt und sie haben vergessen, es mir zu sagen: p – Sebas

0

Exim 4 erfordert, dass der AUTH-Befehl nur gesendet wird, nachdem der Client EHLO ausgegeben hat - Authentifizierungsversuche ohne EHLO würden abgelehnt. Einige Mailserver verlangen, dass EHLO zweimal ausgestellt wird. PHPMailer scheint dies nicht zu tun. Wenn PHPMailer Ihnen nicht erlaubt, EHLO-Initiation zu erzwingen, sollten Sie wirklich zu SwiftMailer 4 wechseln.

+0

Nur um das zu sagen, PHPMailer macht das Richtige automatisch und sendet EHLO nach STARTTLS erneut. – Synchro

38

seltsame Frage, die ich durch Kommentar löste diese Linie

//$mail->IsSmtp(); 

Whit die letzte phpmailer Version (5,2)

+1

Wenn Sie die Zeile kommentieren, wird die Ausgabe generiert, als ob die E-Mail gesendet wurde, aber tatsächlich wird keine E-Mail gesendet. –

+0

nicht für mich ... ich weiß, es ist seltsam, aber dieser Code ist in meiner Produktionsumgebung und alle E-Mails werden gesendet ... (aber mein phpmailer ist 1 Jahr alt) – maurox

+1

Dies geschieht, wenn die folgende Zeile kommentiert: Konnte nicht instanziieren Mail-Funktion. Mailer-Fehler: Mail-Funktion konnte nicht instanziiert werden. – a77icu5

0

Überprüfen Sie, ob Sie eingestellt haben Benutzer nur einige System ausgehenden SMTP beschränken (root, MTA, Briefträger...). Diese Einschränkung verhindert möglicherweise Spammer, leitet jedoch ausgehende SMTP-Verbindungen an den lokalen Mail-Server weiter.

2

Das ist mir auch passiert. Für mich befand sich Postfix auf demselben Server wie das PHP-Skript, und der Fehler trat auf, wenn ich SMTP-Authentifizierung und smtp.domain.com anstelle von localhost verwenden würde.So

, wenn ich aus diesen Zeilen kommentiert:

$ mail-> SMTPAuth = true;
$ mail-> SMTPSecure = "tls";

und stellen Sie den Host

$mail->Host = "localhost"; 

statt

$ mail-> Host = 'smtp.mydomainiuse.com'

und es funktionierte :)