Подтвердить что ты не робот

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

Когда я пытаюсь отправить почту через 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.';
}
?>
4b9b3361

Ответ 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