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

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

Я хотел бы отправить электронное письмо с помощью сервера Gmail SMTP через 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 = '[email protected]';
$mail->Password = 'valid password';
$mail->SMTPAuth = true;

$mail->From = '[email protected]';
$mail->FromName = 'Mohammad Masoudian';
$mail->AddAddress('[email protected]');
$mail->AddReplyTo('[email protected]', '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: [email protected]

SMTP server error: SMTP AUTH is required for message submission on port 587

мой домен vatandesign.ir

4b9b3361

Ответ 1

$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 protected]";
$mail->Password = "password";
$mail->SetFrom("[email protected]");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("[email protected]");

 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).

Ответ 2

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

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

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

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

$mail->isSMTP();

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

Ответ 3

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

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

Затем установите $mail->Password на свой специальный пароль.

Ответ 4

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

Ответ 5

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

$mail->isSMTP();

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

include("smtpfile.php");
include("saslfile.php"); // for SASL authentication $from="[email protected]"; //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;
}

Ответ 9

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

    $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';
    }

Ответ 10

У 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 для более подробной справки.

fooobar.com/questions/99310/...

Ответ 11

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

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

Как указано здесь:

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