Ошибка phpmailer "Не удалось создать почтовую функцию"
Я использую базовый пример mail()
, немного модифицированный для моего идентификатора пользователя, и я получаю сообщение об ошибке "Ошибка Mailer: не удалось создать почтовую функцию"
если я использую почтовую функцию -
mail($to, $subject, $message, $headers);
он отлично работает, хотя мне трудно отправить html, поэтому я пытаюсь PHPMailer.
это код:
<?php
require_once('../class.phpmailer.php');
$mail = new PHPMailer(); // defaults to using php "mail()"
$body = file_get_contents('contents.html');
$body = eregi_replace("[\]",'',$body);
print ($body ); // to verify that I got the html
$mail->AddReplyTo("[email protected]","my name");
$mail->SetFrom('[email protected]', 'my name');
$address = "[email protected]";
$mail->AddAddress($address, "her name");
$mail->Subject = "PHPMailer Test Subject via mail(), basic";
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";
$mail->MsgHTML($body);
$mail->AddAttachment("images/phpmailer.gif"); // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
?>
Ответы
Ответ 1
Попробуйте использовать 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
$mail->AddAddress($address, "her name");
следует изменить на
$mail->AddAddress($address);
Это сработало для моего дела.
Ответ 3
Если вы отправляете вложения файлов, а ваш код работает для небольших вложений, но не подходит для больших вложений:
Если вы получили сообщение об ошибке "Не удалось создать почтовую функцию" при попытке отправить большие электронные письма, а ваш журнал ошибок PHP содержит сообщение "Не удается отправить сообщение: слишком большой", то ваш агент передачи почты (sendmail, postfix, exim, и т.д.) отказывается доставлять эти письма.
Решение состоит в том, чтобы настроить MTA, чтобы позволить большие вложения. Но это не всегда возможно. Альтернативное решение - использовать SMTP. Вам потребуется доступ к SMTP-серверу (и учетным данным входа, если ваш SMTP-сервер требует аутентификации):
$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Host = "mail.yourdomain.com"; // set the SMTP server
$mail->Port = 26; // set the SMTP port
$mail->Username = "[email protected]"; // SMTP account username
$mail->Password = "yourpassword"; // SMTP account password
PHPMailer по умолчанию использует функцию PHP mail()
, которая использует настройки из php.ini
, которые обычно по умолчанию используют sendmail (или что-то подобное). В приведенном выше примере мы переопределяем поведение по умолчанию.
Ответ 4
Это сработало для меня
$mail->SetFrom("[email protected]","my name", 0); //notice the third parameter
Ответ 5
Вам нужно убедиться, что ваш адрес - это действительная настройка учетной записи электронной почты на этом сервере.
Ответ 6
Старый поток, но он может помочь кому-то вроде меня. Я решил проблему, настроив значение SMTP-сервера на законное значение в PHP.ini
Ответ 7
У меня тоже была эта проблема. Мое решение состояло в том, чтобы отключить selinux. Я попытался разрешить 2 разных параметра http в selinux (что-то вроде httpd_allow_email и http_can_connect), и это не сработало, поэтому я просто полностью отключил его и начал работать.
Ответ 8
У меня возникла проблема при отправке файлов с региональными символами в именах: VęryRęgióńął file - name.pdf
.
Решение заключалось в том, чтобы очистить имя файла, прежде чем прикреплять его к письму.
Ответ 9
Кажется, в моем случае это было просто СЕРВЕРНОЕ ОТКЛОНЕНИЕ. Проверьте доступность протокола журнала /smtp вашего почтового сервера.
Ответ 10
У меня была эта проблема, и после некоторой отладки и поиска я понял, что у SERVER (Godaddy) могут быть проблемы.
Я рекомендую вам связаться с вашим провайдером веб-хостинга и поговорить с ними о Quota Restrictions
в функции почты (они делают это, чтобы люди не делали спам-ботов или массовую электронную почту (спам)).
Они могут сообщить вам свои пределы, и если вы превысите их. Вы также можете обновить лимит, перейдя на частный сервер.
После разговора с GoDaddy в течение 15 минут техническая поддержка смогла разрешить это в течение 20 минут.
Это очень помогло мне, и я хотел бы поделиться им, поэтому, если кто-то еще сталкивается с этим, они могут попробовать этот метод, если все не удастся, или до того, как они попробуют что-нибудь еще.
Ответ 11
Справка PHPMailer docs на эта конкретная ошибка помогла мне на правильном пути.
Что мы обнаружили, так это то, что php.ini не определил путь sendmail_path, поэтому я добавил, что с sendmail_path = /usr/sbin/sendmail -t -i;
Ответ 12
Проверьте, включен ли sendmail, в основном, если ваш сервер предоставлен другой компанией.
Ответ 13
Мы хотим изменить значения "SMTP" в файле php.ini
Файл php.ini находится в
EasyPHP-DevServer-14.1VC11\binaries\php\php_runningversion\php.ini