Я использую localhost WAMP server (Windows) для веб-хостинга. Я получаю следующую ошибку.
phpmailer ERROR: Не удалось создать почтовую функцию.
Я пробовал много решений, но ничего не работало для меня.
$mailer = new PHPMailer(); $mailer->IsMAIL(); $mailer->CharSet = 'utf-8'; $mailer->AddAddress($formvars['email'],$formvars['name']); $mailer->Subject = "Your registration with ".$this->sitename; $mailer->From = $this->GetFromAddress(); $confirmcode = $formvars['confirmcode']; $confirm_url = $this->GetAbsoluteURLFolder().'/confirmreg.php?code='.$confirmcode; $mailer->Body ="Hello ".$formvars['name']."\r\n\r\n". "Thanks for your registration with ".$this->sitename."\r\n". "Please click the link below to confirm your registration.\r\n". "$confirm_url\r\n". "\r\n". "Regards,\r\n". "Webmaster\r\n". $this->sitename; if(!$mailer->Send()) { $this->HandleError("Failed sending registration confirmation email.".$mailer->ErrorInfo); //echo "Mailer Error: " . $mailer->ErrorInfo; return false; } return true;
Как мне диагностировать эту ошибку?
$mailer->IsMAIL();
сообщает PHPMailer
использовать функцию PHP mail()
для доставки электронной почты. Он работает из коробки в Unix-подобных ОС, но не в Windows, потому что настольные версии Windows не устанавливают SMTP-сервер (он доступен на установочном диске).
Чтобы заставить его работать в Windows, вам нужно изменить конфигурацию PHP. Либо вы редактируете php.ini
(настройка будет применяться глобально), либо вы можете использовать функцию ini_set()
чтобы изменить ее только для текущего выполнения текущего скрипта.
Лучший способ – изменить php.ini
. Вы можете найти его в каталоге установки PHP или в каталоге Windows. Проверьте выход функции PHP phpinfo()
чтобы узнать точное местоположение.
Откройте php.ini
в текстовом редакторе (тот, который вы используете для написания кода, является лучшим) и найдите раздел, который выглядит так:
[mail function] ; For Win32 only. ; http://php.net/smtp SMTP = localhost ; http://php.net/smtp-port smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from ;sendmail_from = me@example.com
Для SMTP
используйте имя или IP-адрес почтового сервера вашей компании. Или ваш почтовый сервер вашего интернет-провайдера, если вы дома. Или проверьте конфигурацию своего почтового клиента.
smtp_port
имеет значение 25
для стандартного SMTP
или 587
если сервер использует SSL
для шифрования его связи.
Также раскомментируйте параметр sendmail_from
если он закомментирован (удалите из начала строки) и разместите там свой адрес электронной почты.
Подробнее о настройке PHP для отправки электронной почты в Windows на странице документации .
Другой вариант – установить SMTP-сервер на компьютер. Вы можете найти его на установочном диске Windows или использовать стороннее решение.
Если вы решите не устанавливать SMTP-сервер на компьютер, вам даже не нужно изменять php.ini
. Вы можете изменить код сценария для использования SMTP-сервера:
$mailer = new PHPMailer(); $mailer->IsSMTP(); $mailer->Host = "mail.example.com"; $mailer->Port = 25;
Проверьте этот пример PHPmailer для всех параметров и их значения.
Если SMTP-сервер использует SMTP-аутентификацию (провайдеры веб-почты делают это, ваш интернет-провайдер или ваша компания может это сделать или, возможно, не сделает этого), вы должны также добавить:
$mail->SMTPAuth = true; $mail->Username = "yourname@example.com"; $mail->Password = "yourpassword";
Например, если вы используете SMTP-сервер Gmail, используйте адрес электронной почты и пароль Gmail. Замените «Gmail» на «Hotmail» или «Yahoo!», или ваш поставщик веб-почты или ваша компания в приведенном выше предложении.
Настройка рабочего почтового клиента из localhost всегда является миссией и часто «ненужной», поскольку это просто песочница. Хотя некоторые разработчики хотят решить загадку (я один из них), некоторые ищут более легкую альтернативу.
Я бы посоветовал вам установить HMailServer
Я видел много людей, которым повезло очень быстро, используя hmail.
Проверьте это сообщение для пошагового: как отправить письмо с локального сервера WAMP для отправки электронной почты Gmail Hotmail или так далее?