PHPMailerをいくつかのプロジェクトで使用しましたが、今は行き詰まっています。それは私にエラーを与えます:
SMTPエラー:SMTPホストに接続できませんでした。
Thunderbirdからメールを送信しようとしましたが、機能します。しかし、PHPMailer経由ではありません... Thunderbirdの設定は次のとおりです。
サーバー名:mail.exampleserver.com
ポート:587
ユーザー名:[email protected]
セキュア認証:いいえ
接続セキュリティ:STARTTLS
PHPMailerを使用した前回のプロジェクトで、これらをサーバーと比較しました。
サーバー名:mail.exampleserver2.com
ポート:465
ユーザー名:[email protected]
セキュア認証:いいえ
接続セキュリティ:SSL/TLS
私のPHPコードは次のとおりです。
$mail = new PHPMailer();
$mail->IsSMTP(); // send via SMTP
$mail->Host = SMTP_Host; // SMTP servers
$mail->Port = SMTP_PORT; // SMTP servers
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = SMTP_USER; // SMTP username
$mail->Password = SMTP_PASSWORD; // SMTP password
$mail->From = MAIL_SYSTEM;
$mail->FromName = MAIL_SYSTEM_NAME;
$mail->AddAddress($aSecuredGetRequest['email']);
$mail->IsHTML(true); // send as HTML
私はどこが間違っていますか?
この質問はグーグルでよく出てくるので、PHPがバージョン5.6(より厳密なSSL動作をする)にアップグレードされた場合のソリューションをここで共有したいと思います。
PHPMailer wikiにはこれに関するセクションがあります:
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure
推奨される回避策は、次のコードを含めることです。
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
これは、PHPMailer 5.2.10(以降)で機能するはずです。
注:明らかに、またそのウィキで示唆されているように、これは一時的な解決策です!
これに対する正しい修正は、無効な、誤って設定された、または自己署名証明書を適切な証明書に置き換えることです
私の場合、PHPでSSLがサポートされていなかったため、このエラーが発生しました。
だから私は有効にしたextension = php_openssl.dll
$mail->SMTPDebug = 1;
もこの解決策を示唆しました。
2017年に更新
$mail->SMTPDebug = 2;
、参照: https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enabling-debug-output
あなたの問題はおそらくこれです
接続セキュリティ:STARTTLS接続セキュリティ:SSL/TLS
これらは2つの異なるプロトコルです。Thunderbirdで使用しているものは何でも使用する必要がありますが、正しいプロトコルを使用していますか。
変数を設定してみてください:
// if you're using SSL
$mail->SMTPSecure = 'ssl';
// OR use TLS
$mail->SMTPSecure = 'tls';
私は同じ問題を抱えていましたが、PHPMailerはサーバーがSTARTTLSをサポートしていることを認識したため、暗号化された接続に接続を自動的にアップグレードしようとしました。私のメールサーバーは、ドメインファイアウォールの背後にあるネットワーク内のWebサーバーと同じサブネット上にあるため、暗号化の使用についてはあまり心配していません(さらに、生成された電子メールには機密データが含まれていません)。
したがって、先に行ってやったことは、class.phpmailer.phpファイルでSMTPAutoTLSをfalseに変更することでした。
/**
* Whether to enable TLS encryption automatically if a server supports it,
* even if `SMTPSecure` is not set to 'tls'.
* Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
* @var boolean
*/
public $SMTPAutoTLS = false;
同様の問題があり、openssl.cafile
のphp.ini
構成ディレクティブがセキュアピアの検証を許可するために設定する必要があることがわかりました。 http://curl.haxx.se/docs/caextract.html で取得できるような認証局ファイルの場所に設定するだけです。
このディレクティブはPHP 5.6の時点で新しく追加されたため、PHP 5.5からアップグレードするときに不意を突かれました。
mail.exampleserver.comは存在しますか??? 、次のコードを試さない場合(Gmailアカウントが必要です)
$mail->SMTPSecure = "ssl";
$mail->Host='smtp.gmail.com';
$mail->Port='465';
$mail->Username = '[email protected]'; // SMTP account username
$mail->Password = 'your gmail password';
$mail->SMTPKeepAlive = true;
$mail->Mailer = "smtp";
$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->CharSet = 'utf-8';
$mail->SMTPDebug = 0;
次のコードは私のために働いた:
$mail = new PHPMailer(true);
$mail->isSMTP();// Set mailer to use SMTP
$mail->CharSet = "utf-8";// set charset to utf8
$mail->SMTPAuth = true;// Enable SMTP authentication
$mail->SMTPSecure = 'tls';// Enable TLS encryption, `ssl` also accepted
$mail->Host = 'smtp.gmail.com';// Specify main and backup SMTP servers
$mail->Port = 587;// TCP port to connect to
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->isHTML(true);// Set email format to HTML
$mail->Username = 'Sender Email';// SMTP username
$mail->Password = 'Sender Email Password';// SMTP password
$mail->setFrom('[email protected]', 'John Smith');//Your application NAME and EMAIL
$mail->Subject = 'Test';//Message subject
$mail->MsgHTML('HTML code');// Message body
$mail->addAddress('User Email', 'User Name');// Target email
$mail->send();
$mail->SMTPDebug = 2; // to see exactly what's the issue
私の場合、これは役に立ちました:
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
同様の問題がありました。 SSL接続を管理する準備ができていないPHPMailerバージョン1.72をインストールしました。最後のバージョンにアップグレードすると、問題は解決しました。
CPANELの場合、「メールIDを登録する」オプションがあり、電子メールアドレスを追加し、30分後には単純なphpメール機能で正常に動作します。