Когда я пытаюсь отправить почту через 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.'; } ?>
В Ubuntu (не менее 12.04) кажется, что sendmail не установлен по умолчанию. Вам нужно будет установить его с помощью команды sudo apt-get install sendmail-bin
Вам также может потребоваться настроить соответствующие разрешения для него, как указано выше.
Я использовал эту строку кода
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.
У меня просто была эта проблема и я нашел в своем журнале ошибок 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
будьте уверены, что он существует!
Убедитесь, что вы также включили класс 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';
Чтобы пересмотреть старый поток, моя проблема заключалась в том, что один из адресов электронной почты «AddressTo» недействителен. Удаление этого адреса электронной почты устранило ошибку.
Попробуйте указать адрес, который не является gmail. Они не позволяют (насколько я знаю) доступ к почте для отправки почты. На прошлой неделе я делал простую почтовую программу, и они также не используют порты по умолчанию для отправки и требуют, чтобы вы переместили через https
Проконсультируйтесь с вашим хозяином, чтобы узнать, есть ли у них часовые ограничения на отправленные электронные письма.
Это системная ошибка.
Проверьте ошибку системы:
tail /var/log/httpd/error_log
Это может быть любая причина.
Как указано здесь : «Это означает, что ваша установка PHP не настроена правильно называть функцию mail () (например, sendmail_path не установлен правильно в вашем php.ini), или у вас не установлен и настроен локальный почтовый сервер».
В моем случае мне пришлось разрешить функцию mail () («активировать очередь mail ()» в настройках моего веб-хостинга.
«Не удалось создать почтовую функцию» – это способ PHPMailer сообщить, что вызов функции mail () (в расширении Mail) не удался. (Таким образом, вы используете почтовую программу «mail».)
Вы можете попытаться удалить @s перед вызовами mail () в PHPMailer :: MailSend и посмотреть, что, если таковые имеются, ошибки молча отбрасываются.
я решил свою проблему (для wamp)
$mail->IsSMTP(); $mail->Host='hote_smtp';
изменения корса hote_smtp по правильному значению
Старая нить, но это может помочь кому-то вроде меня. Я решил проблему, установив значение SMTP-сервера в законное значение в PHP.ini
Просто пересматривая старый поток, вы можете глубже отладить PHPMailer, добавив:
print_r(error_get_last());
это будет печатать точную ошибку для вас, которая вызывает прерывание по умолчанию php mail ().
Надеюсь, это поможет кому-то.
У меня была такая же ошибка. Проблема была вызвана Ответом. Я удалил его.
$email->AddReplyTo( $admin_email, $admin_name );