отправка электронной почты с помощью 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 = '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

12 60

12 ответов:

$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 connection failure", и я хотел опубликовать решение на всякий случай, если это поможет кому-то еще.

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

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

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

$mail->isSMTP();

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

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

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

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

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

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

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

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

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

$mail->isSMTP();

и вы будете в порядке!

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

    $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() failed" и " SMTP ERROR: Password command failed "

решение: Эта проблема может быть вызвана либо "менее безопасными" приложениями, пытающимися использовать учетную запись электронной почты (это согласно справке 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

 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );

Я думаю, что это проблема подключения вы можете получить код здесь 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;
}