2016-05-05 5 views
0

Ich versuche, Mail mit PHP zu senden. Aber es gab mir Fehler,Senden von E-Mails mit PHP: SMTP ERROR

"SMTP-Fehler: Fehler beim Server verbinden: Connection refused (111)
SMTP connect() fehlgeschlagen https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
." Mailer-Fehler: SMTP-connect() ist fehlgeschlagen. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting "
"

So dass ich viel gesucht habe, um das Problem zu finden. Dort habe ich eine Lösung, die ich ändern muss $ mail-> IsMail(); von $ mail-> IsSMTP();

Ich habe es getan und E-Mail gesendet wurde ... Aber wenn ich meine E-Mails überprüft,

Ich habe, „Diese Nachricht kann durch nicht gesendet wurden: [email protected]

Als Entwickler habe ich verstanden, dass eine E-Mail solche Zeilen oder Probleme nicht enthalten sollte.

Ich möchte wissen, ist es in Ordnung, wenn Receiver solche Linie in E-Mail zeigt? und wenn nicht das Was soll ich tun?

Ich meine, was ich in meinem Code ändern sollte.

Hier ist meine PHP-Code:

**

date_default_timezone_set('Etc/UTC'); 
include 'PHPMailerAutoload.php'; 
$mail = new PHPMailer(); 
$mail->IsSMTP(); 
// $mail->Mailer = "smtp"; 
$mail->SMTPDebug = 1; 
$mail->Debugoutput = 'html'; 
$mail->Host = 'smtp.gmail.com'; 
$mail->Port = 465; 
$mail->SMTPSecure = 'tls'; 
$mail->SMTPAuth = true; 
$mail->Username = "[email protected]"; 
$mail->Password = 'senderPassword'; 
$mail->setFrom("[email protected]", 'sender name'); 
$mail->addReplyTo('[email protected]', ''); 
$mail->addAddress($receiver, ''); 
$mail->Subject = 'Welcome'; 
$mail->Body = 'body'; 
$mail->AltBody = 'This is a plain-text message body'; 
if (!$mail->send()) 
{ 
    return "Mailer Error: " . $mail->ErrorInfo; 
} 
else 
{ 
    return array('flag' => "1"); 
} 

**

+0

Sie verwenden 465 Port für TLS, aber SMTP TLS Port für Gmail ist 587. Versuchen Sie dies und prüfen Sie, ob Sie die gleiche Nachricht erhalten oder nicht. – Haridarshan

+0

Ich habe es schon versucht .. :(Warum Mail gesendet wird, wenn ich IsMail() verwende; statt IsSMTP(); ?? –

+0

Ich bin ein wenig verwirrt darüber, was das mit phpMyAdmin zu tun hat? –

Antwort

-1

Hier ist der Code, der Einsatz für den Versand Zweck ist. Versuchen Sie, den SMTPDebug-Modus 3 einzustellen und überprüfen Sie die Ausgabe.

$mail = new PHPMailer; 

$mail->SMTPDebug = 3; 
$mail->isSMTP(); 
$mail->Host = 'smtp.office365.com'; 
$mail->SMTPAuth = true; 
$mail->Username = 'xxxxxxxxxxxxxxx'; 
$mail->Password = 'xxxxxxxxxxxxx'; 
$mail->SMTPSecure = 'tls'; 
$mail->Port = 587; 

$mail->From = 'xxxxxxxxxxxxxx'; 
$mail->FromName = 'xxxxxxxxxxxxxxxxx'; 
$mail->addAddress(xxxxxxxxxxxxxx); 
$mail->addReplyTo('xxxxxxxxxxxxxxxxxxxxxxx', 'xxxxxxxxxxxxxxxxxxxxx'); 

$mail->isHTML(true); 

$mail->Subject = ''; 
$mail->Body = ""; 
$mail->send(); 
+0

Verbindung: Öffnung zu smtp.gmail.com:587, Timeout = 300, options = array()
SMTP ERROR: Fehler beim Server verbinden. Verbindung verweigert (111)
SMTP connect() fehlgeschlagen https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
" Mailer Fehler: SMTP connect() fehlgeschlagen. Https: \/\/github.com \/PHPMailer \/PHPMailer \/wiki \/Fehlerbehebung " –

+0

unter Fehler kommt, wenn Ich verwende SMTPDebug = 3 ... –

+0

In diesem Fall überprüfen Sie die Google Mail-Kontoeinstellungen für die E-Mail, mit der Sie die E-Mail senden. Sie müssen das Senden von E-Mails zulassen. – Haridarshan

0

isMail und isSMTP Gebrauch zwei verschiedene Mechanismen zu senden. isMail übergibt Nachrichten über die PHP-Funktion mail(), die Nachrichten über eine Sendmail-Binärdatei an einen lokalen Mail-Server sendet. Dieser lokale Mail-Server versucht dann, die Nachricht an seinen endgültigen Empfänger zu übermitteln. Es ist möglich, dass dieser lokale Server eine Nachricht akzeptiert, die später zurückgewiesen wird. Dies ist jedoch zu spät für Ihr Skript.

Mit isMail:

script -> local mail server -> gmail 

Mit isSMTP:

script -> gmail 

Mit isMail Sie brauchen nicht zu authentifizieren (wird localhost in der Regel Relais erlaubt), und die Nachricht von gesendet wird Ihr Server zu Google Mail. Mit isSMTP wird Ihre Nachricht gesendet von Google Mail bis Google Mail, und es erfordert Authentifizierung.

Wenn Sie direkt über Google Mail senden, müssen Sie sich mit Google Mail authentifizieren, und das hat seine eigenen Probleme (das ist der Grund, warum Ihr Skript nicht funktioniert) gründlich behandelt in den PHPMailer Dokumenten, Beispielen und Fragen hier auf SO.

Wenn Sie über Ihren Server senden, sagen Sie, dass Sie von einem Google Mail-Benutzer senden, aber er wird von Ihrem Server und nicht von einem Server im SPF-Datensatz von Google Mail gesendet. Dies ist Fälschung, weshalb Sie die Nachricht "Diese Nachricht wurde möglicherweise nicht gesendet von ..." sehen. Es würde nicht sagen, dass wenn Sie von einer Adresse in Ihrer eigenen Domäne gesendet haben.

Die Lösung besteht darin, Ihre Google Mail-Authentifizierung zu beheben und direkt über Google Mail zu senden. Stellen Sie Ihren Code auf the gmail example provided with PHPMailer, nicht den alten veralteten Code, den Sie verwenden, und read the docs.