web-dev-qa-db-ja.com

メール機能をインスタンス化できませんでした。このエラーが発生する理由

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.';
}
?>
19
Rajasekar

Ubuntu(少なくとも12.04)では、sendmailはデフォルトでインストールされていないようです。コマンドSudo apt-get install sendmail-binを使用してインストールする必要があります

上記のように、適切なアクセス許可を構成する必要がある場合もあります。

41

このコード行を使用しました

_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-関数内にあります。

12
arik

この問題が発生し、Apacheエラーログでsendmailがインストールされていないことがわかりました。インストール後、すべて正常に機能していました。

root@web1:~$ tail /var/log/Apache2/error.log
sh: 1: /usr/sbin/sendmail: not found
6
Jacta

同じ問題がありました。 Apache2 error.logファイルを簡単に調べたところ、何が問題なのかが正確にわかりました。

> sh: /usr/sbin/sendmail: Permission denied

そのため、解決策は/usr/sbin/sendmailファイルに適切なアクセス許可を与えることでした(phpからアクセスできませんでした)。

これを行うコマンドは次のとおりです。

> chmod 777 /usr/sbin/sendmail

それが存在することを確認してください!

3
slawkens

[〜#〜] 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';
2

Phpmailerに付属のsmtpクラスも含めるようにしてください。

// for mailing
require("phpmailer/class.phpmailer.php");
require("phpmailer/class.smtp.php");
2
Sarfraz

古いスレッドを再訪するために、私の問題は、「AddressTo」電子メールアドレスの1つが無効だったことです。そのメールアドレスを削除すると、エラーが削除されました。

2
Greg A

こちら 、 "これは、PHPインストールがmail()関数を正しく呼び出すように設定されていないことを意味します(たとえば、sendmail_pathがphp.iniで正しく設定されていません。 )、またはローカルメールサーバーがインストールおよび構成されていません。」

私の場合、ウェブホストの設定でmail()関数(「mail()キューをアクティブ化」)を許可する必要がありました。

1
Fanky

Gmailではないアドレスで試してください。彼らは(私が知る限り)smptからのメール送信を許可していません。私は先週簡単なメールプログラムをやっていたのですが、デフォルトポートを使用して送信したり、httpsを介してトランスポートする必要がありません

1
Kieran

ホストに確認して、送信される電子メールに1時間ごとの制限があるかどうかを確認してください。

1
Sir Lojik

これはシステムエラーです。

次の方法でシステムのエラーを確認します。

tail /var/log/httpd/error_log

それには理由があります。

1
Alexey

古いスレッドを再検討するだけで、PHPMailerを詳細にデバッグできます:

print_r(error_get_last());

これにより、デフォルトのphp mail()が破損する原因となっている正確なエラーが出力されます。

それが誰かを助けることを願っています。

0
Shuja Ahmed

古いスレッドですが、私のような人を助けるかもしれません。 PHP.iniでSMTPサーバーの値を正当な値に設定することで問題を解決しました

0
Atif.Net

同じエラーが発生しました。返信先が問題を引き起こしていました。削除しました。

$email->AddReplyTo( $admin_email, $admin_name ); 
0
Zeke

CentOSでは、SELinuxポリシーが原因である可能性があります。次のコードを実行して、有効になっているかどうかを確認します。

getsebool httpd_can_sendmail

以下のコマンドを呼び出すことで有効にできます。 -Pパラメーターは、永続的にします。

setsebool -P httpd_can_sendmail 1
0
Roman Štefko

「メール機能をインスタンス化できませんでした」は、mail()(Mail拡張機能内)の呼び出しが失敗したことを報告するPHPMailerの方法です。 (つまり、「メール」メーラーを使用しています。)

PHPMailer :: MailSendでmail()を呼び出す前に@sを削除し、エラーがある場合は何が静かに破棄されているかを確認してください。

0
Frank Shearar

私は私の問題を解決しました(沼のため)

    $mail->IsSMTP(); 

    $mail->Host='hote_smtp'; 

正しい値によるhote_smtpの変更

0
khaled_webdev