PHPMailerを介してメールを送信しようとすると、このエラーメッセージが表示されます。私のコードは次のとおりです。
<?
require("phpmailer/class.phpmailer.php"); // First we require the PHPMailer libary in our script
$mail = new PHPMailer(); // Next we create a new object of the PHPMailer called $mail
$mail->From = "[email protected]";
$mail->FromName = "Rajasekar";
$mail->AddAddress("[email protected]"); // This is the adress to witch the email has to be send.
$mail->Subject = "First PHP Email message"; // This is the subject of the email message.
$mail->Body = "Hi! \n\n This is my first e-mail sent through PHP."; // This is the actual email message
if(!$mail->Send()) // Now we send the email and check if it was send or not.
{
echo 'Message was not sent.';
echo 'Mailer error: ' . $mail->ErrorInfo;
}
else
{
echo 'Message has been sent.';
}
?>
Ubuntu(少なくとも12.04)では、sendmailはデフォルトでインストールされていないようです。コマンドSudo apt-get install sendmail-bin
を使用してインストールする必要があります
上記のように、適切なアクセス許可を構成する必要がある場合もあります。
このコード行を使用しました
_if($phpMailer->Send()){
echo 'Sent.<br/>';
}else{
echo 'Not sent: <pre>'.print_r(error_get_last(), true).'</pre>';
}
_
問題が何であるかを見つけるために。判明したのは、セーフモードで実行していたことです。770行目などで、5番目の引数_$params
_がmail()
に渡されましたが、セーフモードでの実行時にはサポートされません。私はそれをコメントアウトしただけで、それはうまくいきました:
_$rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header/*, $params*/);
_
PHPMailerのMailSend
-関数内にあります。
この問題が発生し、Apacheエラーログでsendmailがインストールされていないことがわかりました。インストール後、すべて正常に機能していました。
root@web1:~$ tail /var/log/Apache2/error.log
sh: 1: /usr/sbin/sendmail: not found
同じ問題がありました。 Apache2 error.log
ファイルを簡単に調べたところ、何が問題なのかが正確にわかりました。
> sh: /usr/sbin/sendmail: Permission denied
そのため、解決策は/usr/sbin/sendmail
ファイルに適切なアクセス許可を与えることでした(phpからアクセスできませんでした)。
これを行うコマンドは次のとおりです。
> chmod 777 /usr/sbin/sendmail
それが存在することを確認してください!
[〜#〜] smtp [〜#〜]を使用してメールを送信してください:-
$mail->IsSMTP();
$mail->Host = "smtp.example.com";
// optional
// used only when SMTP requires authentication
$mail->SMTPAuth = true;
$mail->Username = 'smtp_username';
$mail->Password = 'smtp_password';
Phpmailerに付属のsmtpクラスも含めるようにしてください。
// for mailing
require("phpmailer/class.phpmailer.php");
require("phpmailer/class.smtp.php");
古いスレッドを再訪するために、私の問題は、「AddressTo」電子メールアドレスの1つが無効だったことです。そのメールアドレスを削除すると、エラーが削除されました。
こちら 、 "これは、PHPインストールがmail()関数を正しく呼び出すように設定されていないことを意味します(たとえば、sendmail_pathがphp.iniで正しく設定されていません。 )、またはローカルメールサーバーがインストールおよび構成されていません。」
私の場合、ウェブホストの設定でmail()関数(「mail()キューをアクティブ化」)を許可する必要がありました。
Gmailではないアドレスで試してください。彼らは(私が知る限り)smptからのメール送信を許可していません。私は先週簡単なメールプログラムをやっていたのですが、デフォルトポートを使用して送信したり、httpsを介してトランスポートする必要がありません
ホストに確認して、送信される電子メールに1時間ごとの制限があるかどうかを確認してください。
これはシステムエラーです。
次の方法でシステムのエラーを確認します。
tail /var/log/httpd/error_log
それには理由があります。
古いスレッドを再検討するだけで、PHPMailerを詳細にデバッグできます:
print_r(error_get_last());
これにより、デフォルトのphp mail()が破損する原因となっている正確なエラーが出力されます。
それが誰かを助けることを願っています。
古いスレッドですが、私のような人を助けるかもしれません。 PHP.iniでSMTPサーバーの値を正当な値に設定することで問題を解決しました
同じエラーが発生しました。返信先が問題を引き起こしていました。削除しました。
$email->AddReplyTo( $admin_email, $admin_name );
CentOSでは、SELinuxポリシーが原因である可能性があります。次のコードを実行して、有効になっているかどうかを確認します。
getsebool httpd_can_sendmail
以下のコマンドを呼び出すことで有効にできます。 -Pパラメーターは、永続的にします。
setsebool -P httpd_can_sendmail 1
「メール機能をインスタンス化できませんでした」は、mail()(Mail拡張機能内)の呼び出しが失敗したことを報告するPHPMailerの方法です。 (つまり、「メール」メーラーを使用しています。)
PHPMailer :: MailSendでmail()を呼び出す前に@sを削除し、エラーがある場合は何が静かに破棄されているかを確認してください。
私は私の問題を解決しました(沼のため)
$mail->IsSMTP();
$mail->Host='hote_smtp';
正しい値によるhote_smtpの変更