Итак, я использую phpMailer для отправки писем через smtp gmail, вот мой код
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor\autoload.php';
define('GMailUSER', '[email protected]');
define('GMailPWD', '****************');
function smtpMailer($to, $from, $from_name, $subject, $body) {
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 1;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->Username = GMailUser;
$mail->Password = GMailPWD;
$mail->SetFrom($from, $from_name);
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AddAddress($to);
if (!$mail->Send()) {
return 'Mail error: '.$mail->ErrorInfo;
} else {
return true;
}
}
$result = smtpmailer('[email protected]', '[email protected]', 'Giga Battleboard', 'Message', 'Subject');
if (true !== $result)
{
echo $result;
}
Я создал пароль приложения в учетной записи Google, которую использую, после активации двухфакторной проверки. Но я все еще получаю ту же ошибку:
2023-01-13 14:21:05 ОШИБКА SMTP: команда пароля не выполнена: 535-5.7.8 Имя пользователя и пароль не приняты. Узнайте больше на странице 535 5.7.8 https://support.google.com/mail/?p=BadCredentials s23-20020a1cf217000000b003d1e3b1624dsm29449744wmc.2 - gsmtp Ошибка SMTP: не удалось пройти аутентификацию.
К сожалению, ссылка, выданная ошибкой, ничего убедительного мне не принесла. Как мне выбраться из этого?
Пароль приложения должен использоваться в вашем коде вместо фактического пароля Google. Если вы все еще видите Username and Password not accepted
. то вы не использовали пароль приложения в своем коде.
$mail->Username = GMailUser;
$mail->Password = AppsPassWord;
Если это не сработает, дайте мне знать, что у меня должен быть образец PHP.
Я только что запустил ваш код. Единственное, что я изменил, это исправить константу и установить значение from для константы, а не жестко кодировать ваш адрес электронной почты. Он работает нормально
<?php
// Run composer require phpmailer/phpmailer
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor\autoload.php';
const GMailUSEREmail = 'MyEmailAddress';
const GoogleAppsPassword = 'MyAppsPassword';
function smtpMailer($to, $from, $from_name, $subject, $body): bool|string
{
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 1;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->Username = GMailUSEREmail;
$mail->Password = GoogleAppsPassword;
$mail->SetFrom($from, $from_name);
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AddAddress($to);
if (!$mail->Send()) {
return 'Mail error: '.$mail->ErrorInfo;
} else {
return true;
}
}
$result = smtpmailer(GMailUSEREmail, GMailUSEREmail, 'Giga Battleboard', 'Message', 'Subject');
if (true !== $result)
{
echo $result;
}
Электронное письмо отправлено
Это то, что я сделал, я сказал это в посте, это не решает проблему.
если бы у вас это было, вы бы это исправили, вы сделали что-то не так, посмотрите мое видео, я покажу вам, как это сделать. Я могу сделать еще одно видео на php на следующей неделе, если вам действительно нужно
Я настаиваю, это именно то, что я сделал, и это не работает.
Войдите на адрес «[email protected]» и перейдите в учетную запись Google. В разделе «Безопасность» вы найдете, где вы можете создать пароль для приложений. youtube.com/shorts/IGOT3zo98Xw
Я запустил ваш код с моей электронной почтой и паролем моего приложения, он работает.
Я снова настаиваю, что я сделал это, и это не работает. youtube.com/watch?v=7nw-AYeEdOw
Для удовольствия распечатайте, что говорит GMailUSER. Это может быть ваше определение, это единственное, что я изменил. или попробуйте локально, возможно, вы не загружаете файл на свой сервер, который вы изменили, возможно, это старый файл на вашем сервере.
Итак, я переустановил phpmailer и запустил ваш код после некоторых изменений в нем, и он работает. Я понятия не имею, что заставило это работать, и почему этого не было раньше. Спасибо большое. ^^
@DalmTo опубликовал хороший ответ, но есть две другие вещи, которые не помогают: не отключайте проверку сертификата (почему см. Руководство по устранению неполадок PHPMailer) и
SMTPDebug = 1
бесполезен для отладки проблем с сервером; используйте 2 или 3. Первое место, где вы должны искать ответы, когда у вас возникают проблемы с пакетом, — это документация по пакету. На все, о чем вы здесь спрашивали, есть ответы в документации PHPMailer, что было бы гораздо быстрее для вас, чем писать этот вопрос и ждать ответов.