web-dev-qa-db-ja.com

SMTPを使用してSSL経由でPHPMailerでメールが送信されない

PHPMailerを使用してSMTP経由で電子メールを送信しようとしていますが、これまでのところ運がありません。私は多くのSO質問、PHPMailerチュートリアル、フォーラムの投稿を行ってきましたが、それでも機能することはできません。 、しかし最初にここに私が使用しているコードがあります:

<?php
    session_start();
    error_reporting(E_ALL);
    ini_set('display_errors','On');

    require('includes/class.phpmailer.php');
    include('includes/class.smtp.php');
    $mail = new PHPMailer(); 

    $name = $_POST["name"];
    $guests = $_POST["guests"];
    $time = $_POST["time"];

    $message = "<h1>".$name." has booked a table for ".$guests." at ".$time."</h1>";

    $mail->IsSMTP(); // telling the class to use SMTP
    $mail->Host       = "ssl://smtp.gmail.com"; // SMTP server
    $mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
    $mail->SMTPAuth   = true;                  // enable SMTP authentication
    $mail->Port       = 26;                    // set the SMTP port for the GMAIL server
    $mail->Username   = "[email protected]"; // SMTP account username
    $mail->Password   = "myPassword";        // SMTP account password
    $mail->SetFrom('[email protected]', 'James Cushing');
    $mail->AddReplyTo("[email protected]","James Cushing");
    $mail->Subject    = "PHPMailer Test Subject via smtp, basic with authentication";
    $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
    $mail->MsgHTML($message)
    $address = "[email protected]";
    $mail->AddAddress($address, "James Cushing");

    if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent!";
    }
?>

まず、このコードを実行すると、2つの異なるエラーが発生します。ローカルサーバーでエラーが表示されます。
SMTP->エラー:サーバーへの接続に失敗しました:操作がタイムアウトしました(60)
次の差出人アドレスが失敗しました:[email protected]:接続せずにMail()を呼び出しました
メーラーエラー:次の差出人アドレスが失敗しました:[email protected]:接続せずにMail()を呼び出しました

Webサーバーで同じコードを実行すると、同じエラーが発生しますが、最初の行は次のとおりです。
SMTP->エラー:サーバーへの接続に失敗しました:ネットワークに到達できません(101)

明らかに、「[email protected]」というリテラルを使用していないことを指摘する価値はありますが、この投稿の代わりに自分のメールを使用しました。

試したこと
-iCloud SMTPサーバーの使用
-別のポートを使用する
-php.iniファイルでOpenSSL拡張機能を有効にする
-さまざまなPHPMailerの例からコードをコピーする
-Googleの「DisplayUnlockCaptcha」システムを使用して接続を有効にする
-さまざまなアドレスとの送受信-ユーザー名プロパティからの「@ gmail.com」の削除-覚えていない他の多くのこと

これは今、私を約1日間怒らせているので、誰かがそれを解決できればヒーローになります。

ありがとう

6
James Cushing
$mail->IsSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Username = "[email protected]";
$mail->Password = "**********";
$mail->Port = "465";

これが機能する構成です。

あなたが持っているものを交換してみてください

32
ybert

ポート465でSSLを使用しないでください。SSLは1998年以降廃止されており、メモを取得していないMicrosoft製品でのみ使用されています。代わりにポート587でTLSを使用してください。したがって、以下のコードは非常にうまく機能するはずです。

mail->IsSMTP(); // telling the class to use SMTP
$mail->Host       = "smtp.gmail.com"; // SMTP server

$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "tls";                 // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 587;                   // set the SMTP port for the 
3
Asuquo12

まず、Googleで次の設定を使用します。

$mail->IsSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls"; //edited from tsl
$mail->Username = "myEmail";
$mail->Password = "myPassword";
$mail->Port = "587";

しかし、また、どのファイアウォールを設定しましたか?

TCPポート465/995、おそらく587を除外する場合は、いくつかの例外を構成するか、ルールリストから除外する必要があります。

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

2
jacob21

クライアントマシンがネットワーク接続(例:ホームネットワークとオフィスネットワーク)を変更するたびにSMTPで同様のエラーが発生し、何らかの理由でネットワークサービスを再起動(またはマシンを再起動)すると問題が解決します。これがあなたのケースに当てはまるかどうかはわかりませんが、念のためです。

Sudo /etc/init.d/networking restart   # for ubuntu
1
user1533634

まず、Googleは「安全性の低いアカウントメソッドを使用する」機能を作成しました。

https://myaccount.google.com/security

次に、別のアクセス許可を作成しました。

https://accounts.google.com/b/0/DisplayUnlockCaptcha

それが役に立てば幸い。

0
Andre Mesquita