2016-05-11 6 views
0

Ich benutze CakePHP 3, als ich meine App auf den Server verschoben, hörte es auf, E-Mails zu senden, Ich benutze Google Mail SMTP-Server. Ich versuchte mit SSL connect zu smtp.gmail.com auf Port 465, immer noch nicht funktioniert. Auch Variable $mail->SMTPDebug = on; macht einige Probleme.PHPmailer funktioniert nicht auf Live-Server mit Google Mail SMTP mit CakePHP 3

ist Meine Sendefunktion dieses:

public function send($to, $subject, $message) { 
    $sender = "[email protected]"; // this will be overwritten by GMail 

    $header = "X-Mailer: PHP/".phpversion() . "Return-Path: $sender"; 
    $header .= "MIME-Version: 1.0\r\n"; 
    $header .= "Content-Type: text/html; charset=UTF-8\r\n"; 

    $mail = new \PHPMailer(); 

    $mail->IsSMTP(); 
    $mail->Host = "aspmx.l.google.com"; 
    $mail->SMTPAuth = true; 
    $mail->SMTPSecure = "ssl"; 
    $mail->Port = 25; 
    $mail->SMTPDebug = on; // turn it off in production 
    $mail->Username = "........"; 
    $mail->Password = "........"; 

    $mail->From = $sender; 
    $mail->FromName = "From Me"; 

    $mail->AddAddress($to); 

    $mail->IsHTML(true); 
    $mail->CreateHeader($header); 

    $mail->Subject = $subject; 
    $mail->Body = nl2br($message); 
    $mail->AltBody = nl2br($message); 

    // return an array with two keys: error & message 
    if(!$mail->Send()) { 
     return array('error' => true, 'message' => 'Mailer Error: ' . $mail->ErrorInfo); 
    } else { 
     return array('error' => false, 'message' => "Message sent!"); 
    } 
} 
} 

mein Fehler ist dies:

Use of undefined constant on - assumed 'on' [APP/Controller/Component/EmailComponent.php, line 30] 

Undefined variable: errno [ROOT/vendor/phpmailer/class.smtp.php, line 182] 

Undefined variable: errstr [ROOT/vendor/phpmailer/class.smtp.php, line 183] 

Ist ist möglich, dass Web-Hosting auf dem ich Seite es blockiert?

Danke

Antwort

0

Es gibt einige Missverständnisse der grundlegenden PHP-Syntax, die hier passiert. Hast du versucht reading the manual?

In diesem Fall ist on (sowie einfach nur ungültig PHP) kein gültiger Wert für SMTPDebug, auch wenn Sie es zu einer Zeichenfolge machen. Versuchen Sie es auf 2, wie the docs suggest.

Ihr Code ist etwas durcheinander - Sie versuchen, Bits von PHPMailer zu brechen (versuchen Sie nicht, Header selbst so zu setzen, lassen Sie PHPMailer es richtig machen); Sie haben Ihren Code auf einem veralteten Beispiel basiert und verwenden eine alte Version von PHPMailer; Sie sprechen mit der falschen Adresse, um sie über Google Mail zu senden - sie sollte smtp.gmail.com sein; Sie versuchen, SSL an einem Nicht-SSL-Port zu verwenden. Sie fügen HTML-Tags in die reine Textversion ein.

Es ist einfach zu viel falsch hier zu loben, so dass ich schlage vor, Sie beginnen wieder mit einem clean, working example, und aktualisieren Sie auf the latest PHPMailer.

Soweit Probleme mit der Verbindung zu Google Mail gehen, wird dies auch sehr gut durch die Fehlersuche und viele andere Fragen zu SO abgedeckt.

+0

Wenn Ihr Gerät oder Ihre Anwendung SSL unterstützt, stellen Sie eine Verbindung mit smtp.gmail.com auf Port 465 her. Wenn Ihr Gerät oder Ihre Anwendung SSL nicht unterstützt, stellen Sie eine Verbindung zu ypmx.l.google.com auf Port 25 her. Dies ist was Ich habe in https://support.google.com/a/answer/176600 gesehen?hl = de Also es hängt von der SSL-Unterstützung –

+0

Richtig, und das Skript in der Frage verbindet sich mit 'aspmx.l.google.com' mit SSL an Port 25, d.h. es ist falsch. Der Hinweis ist im Hostnamen - er enthält 'mx', was darauf hinweist, dass es sich um einen eingehenden Server handelt, nicht um einen ausgehenden. Google lässt Sie nicht ohne Authentifizierung senden (sie sind kein Spam-Gateway), und Sie möchten keine Authentifizierung ohne Verschlüsselung verwenden, so dass Port und dieser Host nicht in Frage kommen. – Synchro

0

Bearbeiten Sie Ihre Zeilen darunter wie:

$mail->Host = "smtp.gmail.com"; 
$mail->Port = 587; 

Es sollte jetzt funktionieren.

+0

Ich habe versucht, immer noch nicht funktioniert. –

0

In Zeile $mail->SMTPDebug = on; // turn it off in production

on müssen in Anführungszeichen gesetzt werden: 'on'

UPDATE:

Im class.phpmailer.php (von der Linie nr 315.) Gibt es Beschreibung der SMTPDebug Werte: es ist Ganzzahl von 0 bis 4.

// 0 - No output 
// 1 - Commands 
// 2 - Data and commands 
// 3 - As 2 plus connection status 
// 4 - Low-level data output 
+0

ja, danke, aber immer noch nicht senden –

+0

Zitieren behebt den Fehler, aber es ist immer noch kein gültiger Wert für 'SMTPDebug'. – Synchro

Verwandte Themen