it-swarm.com.ru

отправлять электронную почту, используя SMTP-сервер Gmail через PHP рассылка

Я хочу отправить электронное письмо с помощью сервера 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

62
Mohammad Masoudian
$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) соединения.

118
andrew-caulfield

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

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

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

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

$mail->isSMTP();

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

26
Evan Butler

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

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

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

8
Tim Carr

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

5
Pr Shadoko

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

3
Yasin Hassanien

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

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

1
Forgot My Login 12
 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
0
brandenM

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

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

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

Я должен был установить

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

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

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

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

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

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

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

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

https://stackoverflow.com/a/25175234

0
Akshay P. Raul

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

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

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

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

0
Tristanisginger