Не удалось создать экземпляр функции почты. Почему происходит эта ошибка - PullRequest
19 голосов
/ 22 декабря 2009

Когда я пытаюсь отправить почту через 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 = "rajasekar.kcet@gmail.com";
$mail->FromName = "Rajasekar";
$mail->AddAddress("rajasekar.kcet@gmail.com"); // 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.';
}
?>

Ответы [ 17 ]

41 голосов
/ 09 июня 2012

В Ubuntu (по крайней мере 12.04) кажется, что sendmail по умолчанию не установлен. Вам придется установить его с помощью команды sudo apt-get install sendmail-bin

Возможно, вам также потребуется настроить соответствующие разрешения для него, как указано выше.

12 голосов
/ 23 января 2012

Я использовал эту строку кода

<code>if($phpMailer->Send()){

    echo 'Sent.<br/>';

}else{

    echo 'Not sent: <pre>'.print_r(error_get_last(), true).'
'; }

чтобы выяснить, в чем проблема. Оказывается, я работал в безопасном режиме, а в строке 770 или что-то еще, пятый аргумент $params был задан mail(), что не поддерживается при работе в безопасном режиме. Я просто прокомментировал это, и вуаля, это сработало:

$rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header/*, $params*/);

Он находится внутри MailSend -функции PHPMailer.

6 голосов
/ 15 августа 2013

Я только что столкнулся с этой проблемой и обнаружил в своем журнале ошибок apache, что sendmail не был установлен, после установки все работало как надо!

root@web1:~$ tail /var/log/apache2/error.log
sh: 1: /usr/sbin/sendmail: not found
3 голосов
/ 19 ноября 2011

Была такая же проблема. Просто быстро просмотрел файл apache2 error.log и там было точно сказано, в чем проблема:

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

Итак, решение состояло в том, чтобы предоставить надлежащие разрешения для файла /usr/sbin/sendmail (он не был доступен с php).

Команда для этого будет:

> chmod 777 /usr/sbin/sendmail

будь уверен, что он вообще существует!

2 голосов
/ 22 августа 2011

Попробуйте использовать 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 голосов
/ 22 декабря 2009

Убедитесь, что вы также включили класс smtp, который поставляется с phpmailer:

// for mailing
require("phpmailer/class.phpmailer.php");
require("phpmailer/class.smtp.php");
2 голосов
/ 19 сентября 2014

Чтобы вернуться к старой теме, моя проблема заключалась в том, что один из адресов электронной почты "AddressTo" был недействительным. Удаление этого адреса электронной почты устранило ошибку.

1 голос
/ 07 июля 2016

Как отмечалось здесь , "Это означает, что ваша установка PHP не настроена для правильного вызова функции mail () (например, sendmail_path неправильно задан в вашем php.ini), или у вас нет локальной почтовый сервер установлен и настроен. "

В моем случае мне пришлось включить функцию mail () («активировать очередь mail ()») в настройках моего веб-хоста.

1 голос
/ 07 января 2010

Попробуйте с адресом, который не является Gmail. Они не позволяют (насколько я знаю) бездействующий доступ для отправки почты. На прошлой неделе я делал простую почтовую программу, и они также не используют порты по умолчанию для отправки и требуют, чтобы вы переправлялись через https

1 голос
/ 28 октября 2010

Это системная ошибка.

Проверьте ошибку системы с помощью:

tail /var/log/httpd/error_log

Это может быть любая причина.

...