Я использую простой пример 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("reply@domain.com","my name"); $mail->SetFrom('from@domain.com', 'my name'); $address = "to@domain.com"; $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!"; } ?>
Попробуйте использовать 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';
$mail->AddAddress($address, "her name");
следует изменить на
$mail->AddAddress($address);
Это сработало для моего дела.
Если вы отправляете вложения файлов, а ваш код работает для небольших вложений, но не подходит для больших вложений:
Если вы получите сообщение об ошибке «Не удалось создать почтовую функцию» при попытке отправить большие сообщения электронной почты, и ваш журнал ошибок 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 = "yourname@yourdomain"; // SMTP account username $mail->Password = "yourpassword"; // SMTP account password
PHPMailer по умолчанию использует функцию PHP mail()
которая использует настройки из php.ini
которые обычно по умолчанию используют sendmail (или что-то подобное). В приведенном выше примере мы переопределяем поведение по умолчанию.
Это сработало для меня
$mail->SetFrom("from@domain.co","my name", 0); //notice the third parameter
Вы должны убедиться, что ваш адрес – это действительная настройка учетной записи электронной почты на этом сервере.
Старая нить, но это может помочь кому-то вроде меня. Я решил проблему, установив значение SMTP-сервера в законное значение в PHP.ini
У меня тоже был этот вопрос. Мое решение состояло в том, чтобы отключить selinux. Я попытался разрешить использование двух разных настроек http в selinux (что-то вроде httpd_allow_email и http_can_connect), и это не сработало, поэтому я просто полностью отключил его и начал работать.
У меня была эта проблема при отправке файлов с региональными символами в их именах, например: VęryRęgióńął file - name.pdf
.
Решение состояло в том, чтобы очистить имя файла, прежде чем присоединять его к электронной почте.
Кажется, в моем случае это было просто СЕРВЕРНОЕ ОТКЛОНЕНИЕ. Проверьте доступность протокола журнала / smtp.
У меня была эта проблема, и после некоторой отладки и поиска я понял, что у SERVER (Godaddy) могут быть проблемы.
Я рекомендую вам связаться с вашим провайдером веб-хостинга и поговорить с ними о Quota Restrictions
на почтовую функцию (они делают это, чтобы люди не делали спам-ботов или массовую электронную почту (спам)).
Они могут сообщить вам свои пределы, и если вы их превысите. Вы также можете обновить лимит, перейдя на частный сервер.
После разговора с GoDaddy в течение 15 минут техническая поддержка смогла разрешить это в течение 20 минут.
Это очень помогло мне, и я хотел бы поделиться им, поэтому, если кто-то еще сталкивается с этим, они могут попробовать этот метод, если все не удастся, или прежде, чем они попробуют что-нибудь еще.
PHPMailer помогает документам по этой конкретной ошибке, помогая мне найти правильный путь.
Мы обнаружили, что php.ini не определил параметр sendmail_path, поэтому я добавил, что с sendmail_path = /usr/sbin/sendmail -t -i;
Проверьте, включен ли sendmail, в основном, если ваш сервер предоставлен другой компанией.
Нам нужно изменить значения «SMTP» в файле php.ini. Файл php.ini находится в
EasyPHP-DevServer-14.1VC11\binaries\php\php_runningversion\php.ini