Не удалось создать почтовую функцию. Почему эта ошибка возникает

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

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

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


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

if($phpMailer->Send()){
 echo 'Sent.';
}else{
 echo 'Not sent: <pre class="prettyprint linenums">'.print_r(error_get_last(), true).'
'; }

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

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

Внутри MailSend -функции PHPMailer.


У меня просто была эта проблема и я нашел в моем журнале ошибок apache, что sendmail was'nt был установлен, после установки он все работал так, как должен!

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

убедитесь, что он даже существует!


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


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

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


Попробуйте использовать 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';


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

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

tail /var/log/httpd/error_log

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


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

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


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


Обратитесь к своему хосту, чтобы узнать, есть ли у них ограничения по времени на отправленные письма.


"Не удалось создать почтовую функцию" - это способ PHPMailer сообщать, что вызов mail() (в расширении Mail) не удался. (Таким образом, вы используете почтовую программу "mail".)

Вы можете попытаться удалить @s перед вызовами mail() в PHPMailer:: MailSend и увидеть, что, если таковые имеются, ошибки молча отбрасываются.


Я решил проблему (для wamp)

$mail->IsSMTP(); 
 $mail->Host='hote_smtp';

изменения корня hote_smtp по правильному значению


Старый поток, но он может помочь кому-то вроде меня. Я решил проблему, настроив значение SMTP-сервера на законное значение в PHP.ini


У меня была такая же ошибка. Проблема была вызвана Ответом. Я удалил его.

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


Просто пересматривая старый поток, вы можете глубоко отлаживать PHPMailer, добавив:

print_r(error_get_last());

это выведет точную ошибку для вас, из-за которой ломается почтовая рассылка по умолчанию().

Надеюсь, это поможет кому-то.


В CentOS это может быть вызвано политикой SELinux. Выполните следующий код, чтобы убедиться, что он включен.

getsebool httpd_can_sendmail

Вы можете включить его, вызвав команду ниже. Параметр -P делает его постоянным.

setsebool -P httpd_can_sendmail 1

licensed under cc by-sa 3.0 with attribution.