Отправка почты через G Suite с помощью PHPMailer [дубликат]

Вы можете попробовать для цикла в обратном порядке, поэтому для some_list вы сделаете что-то вроде:

list_len = len(some_list)
for i in range(list_len):
    reverse_i = list_len - 1 - i
    cur = some_list[reverse_i]

    # some logic with cur element

    if some_condition:
        some_list.pop(reverse_i)

Таким образом, индекс выравнивается и не страдает от обновлений списка (независимо от того, поп-элемент или нет).

60
задан Mohammad Masoudian 9 May 2014 в 10:12
поделиться

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

108
ответ дан andrew-caulfield 25 August 2018 в 10:52
поделиться

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

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

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

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

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

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

  • просмотреть последние попытки использовать учетную запись и принять подозрительный доступ.
  • ссылка для отключения функции блокировки подозрительных приложений / технологий: https://www.google.com/settings/u/1/security/lesssecureapps

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

https://stackoverflow.com/a/25175234

0
ответ дан Akshay P. Raul 25 August 2018 в 10:52
поделиться
 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
0
ответ дан brandenM 25 August 2018 в 10:52
поделиться

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

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

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

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

$mail->isSMTP();

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

24
ответ дан Evan Butler 25 August 2018 в 10:52
поделиться

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

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

1
ответ дан Forgot My Login 12 25 August 2018 в 10:52
поделиться

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

5
ответ дан Pr Shadoko 25 August 2018 в 10:52
поделиться

Я думаю, что проблема с соединением вы можете получить здесь 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;
}
0
ответ дан Praxis Ashelin 25 August 2018 в 10:52
поделиться

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

$mail->isSMTP();

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

2
ответ дан Simon Ilett 25 August 2018 в 10:52
поделиться

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

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

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

7
ответ дан Tim Carr 25 August 2018 в 10:52
поделиться

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

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

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

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

0
ответ дан Tristanisginger 25 August 2018 в 10:52
поделиться

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

3
ответ дан Yasin Hassanien 25 August 2018 в 10:52
поделиться

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

    $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 25 August 2018 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: