web-dev-qa-db-ja.com

PHPメーラーを介してGmail SMTPサーバーを使用してEメールを送信する

Gmail SMTPサーバーを使用してPHPメーラーを使用してメールを送信したい。

これは私のコードです

<?php
require_once('class.phpmailer.php');

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet="UTF-8";
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->Username = '[email protected]';
$mail->Password = 'valid password';
$mail->SMTPAuth = true;

$mail->From = '[email protected]';
$mail->FromName = 'Mohammad Masoudian';
$mail->AddAddress('[email protected]');
$mail->AddReplyTo('[email protected]', 'Information');

$mail->IsHTML(true);
$mail->Subject    = "PHPMailer Test Subject via Sendmail, basic";
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
$mail->Body    = "Hello";

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

しかし、私はこの次のエラーを受け取ります

Mailer Error: SMTP Error: The following recipients failed: [email protected]

SMTP server error: SMTP AUTH is required for message submission on port 587

私のドメインは vatandesign.ir

69
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = "smtp.gmail.com";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->Username = "[email protected]";
$mail->Password = "password";
$mail->SetFrom("[email protected]");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("[email protected]");

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

上記のこのコードはテストされて私のために働きました。

$mail->SMTPSecure = 'ssl';が必要だったのかもしれません

また、問題が発生する可能性があるため、そのアカウントでは2段階認証プロセスをオンにしないでください。

更新しました

$ mail-> SMTPを次のように変更してみてください。

$mail->SMTPSecure = 'tls';

いくつかのSMTPサーバーが接続をブロックしていることは注目に値します。一部のSMTPサーバーはSSL(またはTLS)接続をサポートしません。

128

それで、私は自分自身の "SMTP connection failure"エラーを解決しただけで、それが他の誰かに役立つのを念のためにこのソリューションを投稿したいと思いました。

私はPHPMailerの例のgmail.phpsファイルで与えられた正確なコードを使いました。私がMAMPを使用している間それは単に働いた、そして私が私の個人的なサーバーにそれを動かしたら私はSMTP接続エラーを得た。

私が読んだすべてのStack Overflowの回答、およびPHPMailerのすべてのトラブルシューティングドキュメントでは、これはPHPMailerの問題ではないと述べています。それはサーバー側の設定の問題でした。私は別のポート(587、465、25)を試し、 'SSL'と 'TLS'暗号化を試しました。私は自分のphp.iniファイルでopensslが有効になっていることを確認しました。ファイアウォールの問題がないことを確認しました。すべてチェックアウトしましたが、それでも何もありません。

解決策は、この行を削除しなければならなかったことです。

$mail->isSMTP();

今それはすべてうまくいきます。理由はわかりませんが、うまくいきます。私のコードの残りの部分はPHPMailerサンプルファイルからコピー&ペーストされています。

26
Evan Butler

また、2要素認証を有効にしている場合は、メールアカウントのパスワードの代わりに使用するアプリケーション固有のパスワードを設定する必要があります。

次の手順に従ってアプリケーション固有のパスワードを生成できます。 https://support.google.com/accounts/answer/1858

次に、$mail->Passwordをアプリケーション固有のパスワードに設定します。

8
Tim Carr

サーバーがGmail SMTPサーバーへの接続を確立できないようです。この問題を解決するためのヒントをいくつか示します。1)SSLが正しく設定されているかどうかをチェックしますPHP(PHPではデフォルトではインストールされません) 2)ファイアウォールが必要なポート(ここでは465または587)への発信呼び出しを許可しているかどうかを確認します。 telnetを使ってください。ポートが開かれていない場合は、設定をセットアップするためにsysdminからのサポートが必要になります。私はあなたがこれを早く整理してくれることを望みます!

5
Pr Shadoko

これを開く Link そして指示に従ってgoogle serversが未知のサーバーからの試みをブロックするように選択してください。

3
Yasin Hassanien

グーグルは、おそらくスパマーを抑制するために、利用可能なユーザー情報に応じてGmailアカウントを異なる方法で扱います。

電話で確認するまでSMTPを使用できませんでした。ダブルチェックするために別のアカウントを作成し、私はそれを確認することができました。

1
 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
0
brandenM

このコードは私のためにうまく働きます

    $mail = new PHPMailer;
    //Enable SMTP debugging. 
    $mail->SMTPDebug = 0;
    //Set PHPMailer to use SMTP.
    $mail->isSMTP();
    //Set SMTP Host name                          
    $mail->Host = $hostname;
    //Set this to true if SMTP Host requires authentication to send email
    $mail->SMTPAuth = true;
    //Provide username and password     
    $mail->Username = $sender;
    $mail->Password = $mail_password;
    //If SMTP requires TLS encryption then set it
    $mail->SMTPSecure = "ssl";
    //Set TCP port to connect to 
    $mail->Port = 465;
    $mail->From = $sender;  
    $mail->FromName = $sender_name;
    $mail->addAddress($to);
    $mail->isHTML(true);
    $mail->Subject = $Subject;
    $mail->Body = $Body;
    $mail->AltBody = "This is the plain text version of the email content";
    if (!$mail->send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    }
    else {
           echo 'Mail Sent Successfully';
    }
0
Zohaib Hussain

Andersccはそれを正しくしています。ありがとう。それは私のために働いたが、100%ではなかった。

設定しなければならなかった

$ mail-> SMTPDebug = 0; 1に設定すると、特に次のページにjsonとしてデータを渡す場合にエラーが発生する可能性があります。例-メールが送信された場合に検証を実行し、jsonを使用してajaxを介してデータを渡します。

エラーを取り除くために、Gmailアカウントのセキュリティ設定を下げる必要がありました:「SMTP connect()failed」および「SMTP ERROR:Password command failed」

解決策:この問題は、「安全性の低い」アプリケーションがメールアカウントを使用しようとしているために発生する可能性があります(これはGoogleヘルプによるもので、安全なものとそうでないものの判断方法は不明です)ORしようとしている場合国を変更する場合(たとえば、VPNを使用する、コードを別のサーバーに移動する、または実際に世界のさまざまな部分からログインしようとする)、連続して複数回ログインするOR。

問題を解決するリンク(Googleアカウントにログインする必要があります):

注:詳細なリファレンスについては、次のstackoverflow回答リンクにアクセスできます。

https://stackoverflow.com/a/25175234

0
Akshay P. Raul

CPanelを使用している場合は、SMTPを使用して外部サーバーに送信できるようにするためのチェックボックスをクリックしてください。

CPanelにログイン>微調整設定>すべて> "送信SMTPをroot、exim、mailmanに制限する(FKA SMTP微調整)"

ここで答えたように:

GMailとphpMailerで送信する場合、「サーバからパスワードが受け入れられません:535認証データが正しくありません」

0
Tristanisginger