2016-05-11 11 views
0

私はcakePHP 3を使用しています。アプリをサーバーに移動したときに電子メールの送信が停止しました GmailのSMTPサーバーを使用しています。 SSLを使用してポート465のsmtp.gmail.comに接続しようとしましたが、まだ動作していません。変数$mail->SMTPDebug = on;もいくつかの問題を引き起こしています。cakemailPHPでGmailを使用しているライブサーバーでPHPmailerが動作しません3

マイ送信機能はこれです:

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!"); 
    } 
} 
} 

私のエラーはこれです:

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] 

されていますが、私はページを持っている上でのウェブホスティングは、それをブロックしている可能性がありますか?それが動作するようになりました

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

はあなたに以下のような

答えて

0

ここで起こっている基本的なPHP構文の誤解があります。 reading the manualを試しましたか?

この場合、on(ひどいプレーンなPHPであるだけでなく)はSMTPDebugの有効な値ではなく、文字列にしても有効です。 2the docs suggestと設定してみてください。

あなたのコードは何か混乱しています。あなたはPHPMailerのビットを壊そうとしています(ヘッダーを自分で設定しようとしないでください。古いコードに基づいてコードを作成し、古いバージョンのPHPMailerを使用しています。あなたは間違ったアドレスに話しているので、Gmailを使って送信します。それはsmtp.gmail.comでなければなりません。 SSL以外のポートでSSLを使用しようとしています。プレーンテキスト版にHTMLタグを入れています。

修正する価値があるのはあまりにも多すぎるので、clean, working exampleでもう一度やり直してthe latest PHPMailerに更新することをおすすめします。

gmailに接続する際の問題点については、トラブルシューティングガイドや他にも多くの質問があります。

+0

デバイスまたはアプリケーションがSSLをサポートする場合 - ポート465でsmtp.gmail.comに接続してください。 デバイスまたはアプリケーションがSSLをサポートしていない場合は、ポート25でaspmx.l.google.comに接続してください。 https://support.google.com/a/answer/176600で確認しましたか?hl = en SSLサポートに依存します –

+0

質問のスクリプトはポート25でSSLを使用して 'aspmx.l.google.com'に接続します。つまり間違っています。その手掛かりはホスト名にあります。これは 'mx'を含んでいます。これは、それがインバウンドサーバで、アウトバウンドではないことを示しています。 Googleでは、認証なしで(スパムゲートウェイではない)送信することはできません。また、暗号化なしで認証を使用したくないため、ポートとそのホストの両方が問題になりません。 – Synchro

0

編集して行をありがとうございました。ラインで

+0

私はまだ試してみました。 –

0

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

on引用符でなければならない:'on'

UPDATE:class.phpmailer.php

(ラインからNR 315)SMTPDebug値の記述がある:それは0から4までの整数。

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

はい、ありがとうございますがまだ送信していません –

+0

引用符で囲むことでエラーは修正されますが、それでも 'SMTPDebug'には有効な値ではありません。 – Synchro

関連する問題