PHPMailer を使用した SMTP 認証エラー

PHPMailer を使用した SMTP 認証エラー

PHPMailer を使用して基本フォームを電子メール アドレスに送信していますが、次のエラーが発生します。

SMTP エラー: 認証できませんでした。メッセージを送信できませんでした。メーラー エラー: SMTP エラー: 認証できませんでした。SMTP サーバー エラー: VXNlcm5hbWU6

奇妙なことに、もう一度送信してみると、うまくいきます。最初のエラーの後、フォームを送信するたびにうまくいきます。しかし、数分間放置してからもう一度試すと、同じエラーが再び発生します。

ユーザー名とパスワードは正しくなければなりません。そうしないと、うまく動作しないこともあります。テストのために次の(非常に基本的な)スクリプトを作成しましたが、同じ結果になりました。

<?php

require("phpmailer/class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();
$mail->Host = "smtp.host.com";
$mail->SMTPAuth = true;
$mail->Username = "[email protected]";
$mail->Password = "password";

$mail->From = "[email protected]";
$mail->FromName = "From Name";
$mail->AddAddress("[email protected]");
$mail->AddReplyTo("[email protected]");

$mail->IsHTML(true);  

$mail->Subject = "Here is the subject";
$mail->Body    = "This is the HTML message body <b>in bold!</b>";
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";

if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}

echo "Message has been sent";

?>

これは関係ないと思いますが、ホスティングを Linux 共有サーバーに変更したばかりです。なぜこのようなことが起こるのか、理由をご存知ですか?

ありがとう!

***2012 年 2 月 6 日更新
いくつかのテストを行ってきました。結果:

IIS サーバーでスクリプトをテストしたところ、正常に動作しました。エラーは Linux サーバーでのみ発生するようです。

また、Gmail メール サーバーを使用すると、IIS と Linux の両方で正常に動作します。

Linux サーバーの設定に問題があるのでしょうか?

***更新2
swiftmailを試してみましたが、問題なく動作しました:-) そのため、PHPMailerを捨てます

答え1

問題がサーバー側か PHPMailer 側かはわかりませんが、Swiftmail を試してみたところ問題なく動作しました。私は通常、何かが動作しない理由を知りたいのですが、問題が見つからず、テクニカル サービスも私と同じように途方に暮れています。そのため、今後はプロジェクトで Swiftmail を使用するつもりです。

助けてくれてありがとう!

答え2

次のように TLS 接続を要求してみてください。

$mail->SMTPAuth   = true;
$mail->SMTPSecure = "tls";

SOのこの質問/回答にはさらに詳しい情報があります。phpmailer の代わりに php PEAR ライブラリを使用するよう推奨されています。

関連情報