2013-04-16 16 views
57

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

+0

Вы можете посмотрите ответ Jorj на эту тему: http://stackoverflow.com/questions/5759419/using-gmail-smtp-to-send-email-with-php –

ответ

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

+0

Я получаю эту ошибку, когда я использую ваш код Ошибка Mailer: Не удалось выполнить следующее От адреса: [email protected]: Called Mail() без подключения –

+2

Обновленный ответ с дальнейшим предложением. В любом случае, код определенно прекрасен. Вы можете проверить эти два источника http://phpmailer.worxware.com/index.php?pg=exampleagmail и https://github.com/Synchro/PHPMailer/blob/master/examples/test_smtp_gmail_advanced.php – Anderscc

+0

Я получаю error as: CLIENT -> SMTP: EHLO localhost SMTP -> ОШИБКА: EHLO не принимается с сервера: CLIENT -> SMTP: HELO localhost Примечание: fwrite(): отправка из 16 байтов с ошибкой = 10054 Существующее соединение было принудительно закрыто удаленным хостом. в C: \ xampp \ htdocs \ program \ mailsending1 \ mailsending_v1 \ PHPMailer-master \ class.smtp.php в строке 1023 SMTP -> ОШИБКА: HELO не принимается с сервера: SMTP -> УВЕДОМЛЕНИЕ: EOF поймано при проверке, если connectedSMTP Connect() не смогли. Ошибка Mailer: Ошибка SMTP Connect(). –

5

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

3

Открыть Link и выберите следовать инструкциям сервера Google блокирует любые попытки от неизвестных серверов, так как только вы нажмете на проверку капчи каждая вещь будет хорошо

+1

Я использовал тот же код, что и в принятом ответе, но все равно получал бы ошибки SMTP_connect(). Я пробовал все в этой ссылке, и это закончилось тем, что работало, так что +1. – Ivan

+1

У меня также были проблемы с ошибками SMTP_connect(). Я выполнил вышеупомянутые шаги и все еще получал ошибку. Я дважды повторил шаги, на двух разных адресах gmail, и оба раза кажется, что мне нужно подождать ~ 1 час до того, как изменения, казалось, начнутся. Впоследствии все работало, как ожидалось. – cwal

+0

Посещение https://www.google.com/accounts/DisplayUnlockCaptcha, а затем запуск моего кода - это то, что заставило его работать на меня. +1 –

7

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

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

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

0

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

Ответы только на связь, как правило, обескуражены. Не могли бы вы расширить это на что-то отдельное? – Werner

24

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

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

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

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

$mail->isSMTP(); 

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

+4

Это решение работает, потому что оно полностью отключает SMTP. Я НЕ рекомендую этот метод. Я никогда не решал эту проблему, теперь я перехожу к использованию API Mandrill. –

+0

Просто используйте Mandrill, это намного лучше, и на самом деле есть некоторые аналитики. –

+0

Почему это работает? – ykay

1

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

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

2

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

$mail->isSMTP(); 

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

+0

Я не знаю почему, но это сработало для меня. Большое спасибо. –

+1

Выключает SMTP, который побеждает всю цель этого вопроса. – Paulo

0

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

$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

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

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

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

мне пришлось опустить свои настройки безопасности аккаунта GMAIL, чтобы избавиться от ошибок: «SMTP подключения() не работает» и «SMTP ОШИБКА: команда пароля неудачен»

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

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

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

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

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

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

https://stackoverflow.com/a/25175234

0

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

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

В:

"Password not accepted from server: 535 Incorrect authentication data" when sending with GMail and phpMailer

Смежные вопросы