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

Ошибка 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!";
    }
?>
4b9b3361

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