Не удалось создать почтовую функцию. Почему эта ошибка возникает
Когда я пытаюсь отправить почту через 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.';
}
?>
Ответы
Ответ 1
В Ubuntu (не менее 12.04) кажется, что sendmail не установлен по умолчанию. Вам нужно будет установить его с помощью команды
sudo apt-get install sendmail-bin
Вам также может потребоваться настроить соответствующие разрешения для него, как указано выше.
Ответ 2
Я использовал эту строку кода
if($phpMailer->Send()){
echo 'Sent.<br/>';
}else{
echo 'Not sent: <pre>'.print_r(error_get_last(), true).'</pre>';
}
чтобы узнать, в чем проблема. Оказывается, я работал в безопасном режиме, а в строке 770 или что-то, пятый аргумент $params
был передан mail()
, который не поддерживается при работе в безопасном режиме. Я просто прокомментировал это, и он ответил:
$rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header/*, $params*/);
Внутри MailSend
-функции PHPMailer.
Ответ 3
У меня просто была эта проблема и я нашел в моем журнале ошибок apache, что sendmail was'nt был установлен, после установки он все работал так, как должен!
[email protected]:~$ tail /var/log/apache2/error.log
sh: 1: /usr/sbin/sendmail: not found
Ответ 4
Была такая же проблема. Просто быстро просмотрел файл apache2 error.log
, и он точно сказал, в чем проблема:
> sh: /usr/sbin/sendmail: Permission denied
Итак, решение заключалось в предоставлении правильных разрешений для файла /usr/sbin/sendmail
(он не был доступен из php).
Команда для этого:
> chmod 777 /usr/sbin/sendmail
убедитесь, что он даже существует!
Ответ 5
Убедитесь, что вы также включили класс smtp, который поставляется с phpmailer:
// for mailing
require("phpmailer/class.phpmailer.php");
require("phpmailer/class.smtp.php");
Ответ 6
Попробуйте использовать 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';
Ответ 7
Чтобы пересмотреть старый поток, моя проблема заключалась в том, что один из адресов электронной почты "AddressTo" недействителен. Удаление этого адреса электронной почты устранило ошибку.
Ответ 8
Попробуйте указать адрес, который не является gmail. Они не позволяют (насколько я знаю) доступ к почте для отправки почты. На прошлой неделе я делал простую почтовую программу, и они также не используют порты по умолчанию для отправки и требуют, чтобы вы переместили через https
Ответ 9
Это системная ошибка.
Проверьте ошибку системы:
tail /var/log/httpd/error_log
Это может быть любая причина.
Ответ 10
Обратитесь к своему хосту, чтобы узнать, есть ли у них ограничения по времени на отправленные письма.
Ответ 11
Как отмечено здесь," Это означает, что ваша установка PHP не настроена на правильное выполнение функции mail() (например, sendmail_path не установлен правильно в php.ini), или у вас не установлен и настроен локальный почтовый сервер.
В моем случае мне пришлось разрешить функцию mail() ( "активировать очередь mail()" в настройках моего веб-хостинга.
Ответ 12
"Не удалось создать почтовую функцию" - это способ PHPMailer сообщать, что вызов mail() (в расширении Mail) не удался. (Таким образом, вы используете почтовую программу "mail".)
Вы можете попытаться удалить @s перед вызовами mail() в PHPMailer:: MailSend и увидеть, что, если таковые имеются, ошибки молча отбрасываются.
Ответ 13
Я решил проблему (для wamp)
$mail->IsSMTP();
$mail->Host='hote_smtp';
изменения корня hote_smtp по правильному значению
Ответ 14
Старый поток, но он может помочь кому-то вроде меня.
Я решил проблему, настроив значение SMTP-сервера на законное значение в PHP.ini
Ответ 15
Просто пересматривая старый поток, вы можете глубоко отлаживать PHPMailer, добавив:
print_r(error_get_last());
это выведет точную ошибку для вас, из-за которой ломается почтовая рассылка по умолчанию().
Надеюсь, это поможет кому-то.
Ответ 16
У меня была такая же ошибка. Проблема была вызвана Ответом. Я удалил его.
$email->AddReplyTo( $admin_email, $admin_name );
Ответ 17
В CentOS это может быть вызвано политикой SELinux.
Выполните следующий код, чтобы убедиться, что он включен.
getsebool httpd_can_sendmail
Вы можете включить его, вызвав команду ниже. Параметр -P делает его постоянным.
setsebool -P httpd_can_sendmail 1