#php #email #smtp #gmail #phpmailer
#php #Адрес электронной почты #smtp #gmail #phpmailer
Вопрос:
Я пытаюсь отправить электронное письмо с формой с помощью PHPMailer, но это работает плохо. С локальным хостом xampp он работает отлично, но при загрузке на мой сайт он вызывает ошибки, после проверки я понял, что это потому, что gmail блокирует меня (я уже включил менее безопасные приложения в gmail) Единственный способ, которым это работает, — удалить isSmtp() из кода, но я не думаю, что это очень хорошая идея. Пожалуйста, какие-либо предложения? Код ниже:
if (array_key_exists('attachment', $_FILES)) {
$img_name = $_FILES['attachment']['name'];
$upload = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['attachment']['name']));
$uploadfile = $_SERVER['DOCUMENT_ROOT'].'/'.$img_name;
if (move_uploaded_file($_FILES['attachment']['tmp_name'], $uploadfile)) {
if (!$err) {
$mail = new PHPMailer(true);
// $mail->isSMTP();
// $mail->SMTPDebug = 3;
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
// set a port
$mail->Port = 587;
$mail->SMTPAuth = true;
// set login detail for gmail account
$mail->Username = '******';
$mail->Password = '********';
$mail->CharSet = 'utf-8';
// set subject
$mail->setFrom($email, $username);
$mail->addAddress($to);
$mail->addReplyTo($email, $username);
$mail->addAttachment($uploadfile, 'My uploaded image');
$mail->IsHTML(true);
$mail->Subject = 'Contact form: Testing Feedback';
$mail->Body = $reason;
if (!$mail->send()) {
$msg .= "Mailer Error: " . $mail->ErrorInfo;
} else {
$msg .= "Message sent!";
}
}
} else {
$msg .= 'Failed to move file to ' . $uploadfile;
}
}
Получение следующих ошибок
Fatal error: Uncaught PHPMailerPHPMailerException: SMTP Error: Could not authenticate. in /storage/ssd1/218/15386218/public_html/vendor/phpmailer/phpmailer/src/PHPMailer.php:2063 Stack trace: #0 /storage/ssd1/218/15386218/public_html/vendor/phpmailer/phpmailer/src/PHPMailer.php(1878): PHPMailerPHPMailerPHPMailer->smtpConnect(Array) #1 /storage/ssd1/218/15386218/public_html/vendor/phpmailer/phpmailer/src/PHPMailer.php(1601): PHPMailerPHPMailerPHPMailer->smtpSend('Date: Thu, 12 N...', 'This is a multi...') #2 /storage/ssd1/218/15386218/public_html/vendor/phpmailer/phpmailer/src/PHPMailer.php(1437): PHPMailerPHPMailerPHPMailer->postSend() #3 /storage/ssd1/218/15386218/public_html/index.php(72): PHPMailerPHPMailerPHPMailer->send() #4 {main} thrown in /storage/ssd1/218/15386218/public_html/vendor/phpmailer/phpmailer/src/PHPMailer.php on line 2063
Комментарии:
1. Похоже, что они могут быть вашими реальными учетными данными. Пожалуйста, всегда подвергайте цензуре имена пользователей и пароли при совместном использовании кода.
2. Пожалуйста, также сообщайте о любых ошибках, которые вы получаете. Мы не знаем, что происходит, когда вы говорите, что это «не работает хорошо» или «есть проблема».
3. @RoAchterberg Спасибо, мой плохой!! добавлены ошибки в проблеме
4. Комментирование
isSMTP
только сдвинет проблему с мертвой точки, а не решит ее. Пожалуйста, прочитайте, что говорится в руководстве по устранению неполадок PHPMailer об аутентификации в gmail . В основном дело в том, что gmail делает много нестандартных вещей, которые затрудняют подключение; это gmail ломает вещи, а не клиент.5. Существует несколько причин, по которым он может работать локально, а не на вашем сервере: ваш хостинг-провайдер может перенаправлять трафик; gmail обнаруживает местоположение входа, отличное от вашего обычного, и накладывает дополнительные ограничения. Если вы установите
$mail->SMTPDebug = 2;
, вы, по крайней мере, сможете видеть, что говорит сервер, и то, что он говорит , скорее всего, будет описано в руководстве по устранению неполадок.