отправлять электронную почту с помощью SMTP-сервера Gmail через PHP Mailer

Я хотел бы отправить электронное письмо с помощью SMTP- сервера Gmail через PHP Mailer .

это мой код

<?php require_once('class.phpmailer.php'); $mail = new PHPMailer(); $mail->IsSMTP(); $mail->CharSet="UTF-8"; $mail->SMTPSecure = 'tls'; $mail->Host = 'smtp.gmail.com'; $mail->Port = 587; $mail->Username = 'MyUsername@gmail.com'; $mail->Password = 'valid password'; $mail->SMTPAuth = true; $mail->From = 'MyUsername@gmail.com'; $mail->FromName = 'Mohammad Masoudian'; $mail->AddAddress('anotherValidGmail@gmail.com'); $mail->AddReplyTo('phoenixd110@gmail.com', 'Information'); $mail->IsHTML(true); $mail->Subject = "PHPMailer Test Subject via Sendmail, basic"; $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; $mail->Body = "Hello"; if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!"; } ?> 

но я получаю следующую ошибку

 Mailer Error: SMTP Error: The following recipients failed: anotherValidGmail@gmail.com SMTP server error: SMTP AUTH is required for message submission on port 587 

мой домен – vatandesign.ir

Solutions Collecting From Web of "отправлять электронную почту с помощью SMTP-сервера Gmail через PHP Mailer"

 $mail = new PHPMailer(); // create a new object $mail->IsSMTP(); // enable SMTP $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only $mail->SMTPAuth = true; // authentication enabled $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail $mail->Host = "smtp.gmail.com"; $mail->Port = 465; // or 587 $mail->IsHTML(true); $mail->Username = "email@gmail.com"; $mail->Password = "password"; $mail->SetFrom("example@gmail.com"); $mail->Subject = "Test"; $mail->Body = "hello"; $mail->AddAddress("email@gmail.com"); if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message has been sent"; } 

Этот код выше был протестирован и работал для меня.

Возможно, вам понадобилось $mail->SMTPSecure = 'ssl';

Также убедитесь, что у вас нет двухэтапной аутентификации для этой учетной записи, так как это может вызвать проблемы.

ОБНОВЛЕНО

Вы можете попробовать изменить $ mail-> SMTP на:

 $mail->SMTPSecure = 'tls'; 

Стоит отметить, что некоторые SMTP-серверы блокируют соединения. Некоторые SMTP-серверы не поддерживают соединения SSL (или TLS ).

Поэтому я просто решил свою ошибку «Ошибка SMTP-соединения», и я хотел опубликовать решение на всякий случай, если это поможет кому-то еще.

Я использовал ТОЧНЫЙ код, указанный в файле gmail.phps примера PHPMailer. Он работал просто, когда я использовал MAMP, а затем я получил ошибку подключения SMTP, как только я переместил его на свой персональный сервер.

Все ответы на переполнение стека я читал, и вся документация по устранению неполадок PHPMailer говорила, что это не проблема с PHPMailer. Это проблема с настройками на стороне сервера. Я пробовал разные порты (587, 465, 25), я пробовал шифрование «SSL» и «TLS». Я проверил, что openssl включен в моем файле php.ini. Я проверил, что проблема брандмауэра не была. Все проверено, и все равно ничего.

Решение состояло в том, что мне пришлось удалить эту строку:

 $mail->isSMTP(); 

Теперь все работает. Я не знаю почему, но это работает. Остальная часть моего кода копируется и вставляется из файла примера PHPMailer.

Также стоит отметить, что если вы включили двухфакторную аутентификацию, вам необходимо настроить пароль для конкретного приложения, чтобы использовать его вместо пароля вашей учетной записи электронной почты.

Вы можете создать пароль для конкретного приложения, выполнив следующие инструкции: https://support.google.com/accounts/answer/185833

Затем установите $mail->Password для вашего конкретного пароля.

Кажется, что ваш сервер не смог установить соединение с SMTP-сервером Gmail. Вот несколько советов по устранению этого: 1) проверьте правильность настройки SSL на вашем PHP (модуль, который его обрабатывает, по умолчанию не установлен на PHP. Вам нужно проверить свою конфигурацию в phph.ini). 2) проверьте, позволяет ли ваш брандмауэр отправлять исходящие вызовы на требуемый порт (здесь 465 или 587). Используйте telnet для этого. Если порт не открывается, вам потребуется некоторая поддержка sysdmin для настройки конфигурации. Надеюсь, вы быстро разобрались!

Не могу прокомментировать, но да, удалить

 $mail->isSMTP(); 

и все будет хорошо!

Откройте эту ссылку и выберите следовать инструкциям, на которых серверы Google блокируют любые попытки с неизвестных серверов, поэтому, как только вы нажмете на кнопку «captcha check», все будет хорошо

Google обрабатывает учетные записи Gmail по-разному в зависимости от доступной информации о пользователе, возможно, для ограничения спамеров.

Я не мог использовать SMTP, пока не проверил телефон. Сделал другую учетную запись для двойной проверки, и я смог ее подтвердить.

Я думаю, что проблема с подключением вы можете получить здесь. http://skillrow.com/sending-mail-using-smtp-and-php/

 include(“smtpfile.php“); include(“saslfile.php“); // for SASL authentication $from=”my@website.com“; //from mail id $smtp=new smtp_class; $smtp->host_name=”www.abc.com“; // name of host $smtp->host_port=25;//port of host $smtp->timeout=10; $smtp->data_timeout=0; $smtp->debug=1; $smtp->html_debug=1; $smtp->pop3_auth_host=””; $smtp->ssl=0; $smtp->start_tls=0; $smtp->localhost=”localhost“; $smtp->direct_delivery=0; $smtp->user=”smtp username”; $smtp->realm=””; $smtp->password=”smtp password“; $smtp->workstation=””; $smtp->authentication_mechanism=””; $mail=$smtp->SendMessage($from,array($to),array(“From:$from”,”To: $to”,”Subject: $subject”,”Date: ”.strftime(“%a, %d %b %Y %H:%M:%S %Z”)),”$message”); if($mail){ echo “Mail sent“; }else{ echo $smtp->error; } в include(“smtpfile.php“); include(“saslfile.php“); // for SASL authentication $from=”my@website.com“; //from mail id $smtp=new smtp_class; $smtp->host_name=”www.abc.com“; // name of host $smtp->host_port=25;//port of host $smtp->timeout=10; $smtp->data_timeout=0; $smtp->debug=1; $smtp->html_debug=1; $smtp->pop3_auth_host=””; $smtp->ssl=0; $smtp->start_tls=0; $smtp->localhost=”localhost“; $smtp->direct_delivery=0; $smtp->user=”smtp username”; $smtp->realm=””; $smtp->password=”smtp password“; $smtp->workstation=””; $smtp->authentication_mechanism=””; $mail=$smtp->SendMessage($from,array($to),array(“From:$from”,”To: $to”,”Subject: $subject”,”Date: ”.strftime(“%a, %d %b %Y %H:%M:%S %Z”)),”$message”); if($mail){ echo “Mail sent“; }else{ echo $smtp->error; } в include(“smtpfile.php“); include(“saslfile.php“); // for SASL authentication $from=”my@website.com“; //from mail id $smtp=new smtp_class; $smtp->host_name=”www.abc.com“; // name of host $smtp->host_port=25;//port of host $smtp->timeout=10; $smtp->data_timeout=0; $smtp->debug=1; $smtp->html_debug=1; $smtp->pop3_auth_host=””; $smtp->ssl=0; $smtp->start_tls=0; $smtp->localhost=”localhost“; $smtp->direct_delivery=0; $smtp->user=”smtp username”; $smtp->realm=””; $smtp->password=”smtp password“; $smtp->workstation=””; $smtp->authentication_mechanism=””; $mail=$smtp->SendMessage($from,array($to),array(“From:$from”,”To: $to”,”Subject: $subject”,”Date: ”.strftime(“%a, %d %b %Y %H:%M:%S %Z”)),”$message”); if($mail){ echo “Mail sent“; }else{ echo $smtp->error; } - include(“smtpfile.php“); include(“saslfile.php“); // for SASL authentication $from=”my@website.com“; //from mail id $smtp=new smtp_class; $smtp->host_name=”www.abc.com“; // name of host $smtp->host_port=25;//port of host $smtp->timeout=10; $smtp->data_timeout=0; $smtp->debug=1; $smtp->html_debug=1; $smtp->pop3_auth_host=””; $smtp->ssl=0; $smtp->start_tls=0; $smtp->localhost=”localhost“; $smtp->direct_delivery=0; $smtp->user=”smtp username”; $smtp->realm=””; $smtp->password=”smtp password“; $smtp->workstation=””; $smtp->authentication_mechanism=””; $mail=$smtp->SendMessage($from,array($to),array(“From:$from”,”To: $to”,”Subject: $subject”,”Date: ”.strftime(“%a, %d %b %Y %H:%M:%S %Z”)),”$message”); if($mail){ echo “Mail sent“; }else{ echo $smtp->error; } 

этот код работает отлично для меня

  $mail = new PHPMailer; //Enable SMTP debugging. $mail->SMTPDebug = 0; //Set PHPMailer to use SMTP. $mail->isSMTP(); //Set SMTP host name $mail->Host = $hostname; //Set this to true if SMTP host requires authentication to send email $mail->SMTPAuth = true; //Provide username and password $mail->Username = $sender; $mail->Password = $mail_password; //If SMTP requires TLS encryption then set it $mail->SMTPSecure = "ssl"; //Set TCP port to connect to $mail->Port = 465; $mail->From = $sender; $mail->FromName = $sender_name; $mail->addAddress($to); $mail->isHTML(true); $mail->Subject = $Subject; $mail->Body = $Body; $mail->AltBody = "This is the plain text version of the email content"; if (!$mail->send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo 'Mail Sent Successfully'; } 

У Anderscc есть все правильно. Благодарю. Это работало для меня, но не на 100%.

Мне пришлось установить

$ mail-> SMTPDebug = 0; Установка его в 1 может вызвать ошибки, особенно если вы передаете некоторые данные как json на следующую страницу. Пример. Выполнение проверки, если почта отправлена, используя json для передачи данных через ajax.

Мне пришлось понизить настройки безопасности учетной записи gmail, чтобы избавиться от ошибок: «Ошибка SMTP connect ()» и «Ошибка SMTP: команда пароля»

Решение. Эта проблема может быть вызвана либо «менее защищенными» приложениями, использующими учетную запись электронной почты (это зависит от помощи Google, но и не знает, как они оценивают, что является безопасным, а что нет). ИЛИ если вы пытаетесь войти в систему несколько раз в строке ИЛИ, если вы меняете страны (например, используйте VPN, переместите код на другой сервер или попробуйте войти в систему из разных уголков мира).

Ссылки, которые устраняют проблему (вы должны войти в учетную запись google):

  • просмотреть недавние попытки использовать учетную запись и принять подозрительный доступ.

  • ссылка для отключения функции блокировки подозрительных приложений / технологий:

    https://www.google.com/settings/u/1/security/lesssecureapps

Примечание. Для более подробной справки вы можете перейти к следующей ссылке ответа stackoverflow.

https://stackoverflow.com/a/25175234

Если вы используете cPanel, вы должны просто щелкнуть поле wee, которое позволяет отправлять на внешние серверы SMTP.

Войдите в CPanel> Настройки настройки> Все> "Ограничьте исходящий SMTP на root, exim и mailman (FKA SMTP Tweak)"

Как ответили здесь:

«Пароль не принимается с сервера: 535 Неверные данные аутентификации» при отправке с помощью GMail и phpMailer