не удалось создать экземпляр почтовой функции

Вырвал мне волосы на этом.

У меня есть внутренний сервер Win2008 с IIS7.0 и PHP 5.2.4. Почтовый сервер находится на отдельном сервере в той же сети.

Я могу использовать почтовую функцию php, чтобы отправлять электронные письма без проблем, но когда я использую PHPMailerLite, я получаю сообщение «не удалось создать экземпляр почтовой функции».

Я много исследовал и пробовал следующее, но все равно без радости.

  1. SetFrom - изменен на существующий адрес электронной почты на почтовом сервере.
  2. Проверенные настройки SMTP в php.ini
  3. Протестирована функция почты php напрямую, и электронные письма отправляются без проблем.
  4. Снова загрузил PHPMailer в случае повреждения.

Любая помощь будет оценена по достоинству .....

Алан

Чтобы добавить, примеры по умолчанию, включенные в PHPMailer, тоже не работают, та же ошибка. Этот код работает для меня на других тестовых серверах.

$mail             = new PHPMailerLite();
$mail->IsMail(); // telling the class to use PHP Mail to send email
$mail->SetFrom("[email protected]","CareSys");
$mail->AddReplyTo("[email protected]","CareSys");
$mail->Subject    = "Weekly Planner";
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
$mail->AddAddress($email_add, $carer_name);
$mail->AddAttachment('../../temp/carer_planner.pdf','carer_planner.pdf');      // attachment
$mail->ConfirmReadingTo = '[email protected]';
if(!$mail->Send()) { $error_count=1; }

if ($error_count<1) { echo 'Email Sent Successfully'; }

Если я помещу адрес получателя непосредственно в файл класса в строке 582 вместо $ to vairable, это сработает. Но использование $ mail-> AddAddress ($ email_add, $ carer_name) не будет, даже если я заменю переменную $ email_add адресом получателя.


person Seeds    schedule 19.04.2011    source источник
comment
¿Не могли бы вы вставить сюда часть кода с помощью PHPMailerLite?   -  person Alfabravo    schedule 19.04.2011
comment
Да, прости. Просто чтобы добавить, я не могу заставить работать включенные по умолчанию примеры, та же ошибка.   -  person Seeds    schedule 19.04.2011
comment
Между строками 576-596 есть около четырех строк: $ rt = @mail ($ val, $ this- ›EncodeHeader ($ this-› SecureHeader ($ this- ›Subject)), $ body, $ header, $ params) ; Можете ли вы удалить @ перед отправкой почты, запустить программу и сообщить о новой ошибке.   -  person Dormouse    schedule 19.04.2011
comment
Не знал, что доступна опция отладки. Ошибка теперь - ошибка 504, неверный адрес. Эта ошибка обычно указывает адрес в начальном HELO, но я ввел его в строке 152 как значение для $ hostname и все еще та же ошибка.   -  person Seeds    schedule 19.04.2011
comment
Извините, я должен был добавить, что ошибка теперь ссылается на строку 582 в class.phpmailer-lite   -  person Seeds    schedule 19.04.2011
comment
Если я помещу адрес получателя непосредственно в файл класса в строке 582 вместо $ to vairable, это сработает. Но использование $ mail- ›AddAddress ($ email_add, $ carer_name) не даст результата, даже если я заменю переменную $ email_add адресом получателя.   -  person Seeds    schedule 19.04.2011
comment
Проблема решена, и все благодаря Бену за то, что он сообщил мне о дополнительной опции отладки. Проблема была во второй части $ mail- ›AddAddress ('[email protected] ',' John Doe ') ;. Когда я удалил имя, на электронную почту отправляется штраф - $ mail- ›AddAddress ('[email protected] ');   -  person Seeds    schedule 19.04.2011
comment
переместите свой комментарий к ответу и отметьте его как правильный ответ   -  person ariefbayu    schedule 19.04.2011
comment
Нет возможности пометить комментарий как ответ.   -  person Seeds    schedule 19.04.2011
comment
Нет, но есть функция копирования + вставки.   -  person Xiong Chiamiov    schedule 06.07.2011


Ответы (3)


Этот класс пытается отправить сообщение через программу sendmail, которая не использует почтовую функцию php. Убедитесь, что вы можете выполнять программы из PHP с помощью функций exec / system и что вы можете запускать программу sendmail из PHP. Функции exec / system / passthru / popen могут быть отключены администратором вашего сервера, или ваша среда php может быть заключена в тюрьму и вообще не может получить доступ к программе sendmail.

person Geoffrey    schedule 29.05.2011

Попробуйте использовать 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';
person Mukesh Chapagain    schedule 22.08.2011

Это сработало для меня

$mail->SetFrom("[email protected]","CareSys", 0); //notice the third parameter
person Matías Cánepa    schedule 27.02.2016