Не работает $mail->send() в PHPMailer

112
23 ноября 2021, 19:10

Пытаюсь написать учебный проект на php. Нужно создать форму для отправки письма на email, обработать адрес получателя в js скрипте и сделать запрос к php скрипту на отправку письма.

Вот моя форма и js скрипт:

function processForm() { 
    let emailRecipient = document.getElementsByName('EmailRecipient')[0].value; 
    let emailMessage = document.getElementsByName('Message')[0].value; 
 
    if (checkEmail(emailRecipient) && emailMessage) { 
        let form = document.getElementById('emailForm'); 
        let formData = new FormData(form); 
 
        postRequest('emailSender.php', formData); 
        return false; 
    } 
    else { 
        showMessage('You have entered an invalid email address!'); 
        return false; 
    } 
} 
 
function postRequest(url, data) { 
    fetch(url, { 
        method: 'POST', 
        body: data 
    }) 
        .then(handleErrors) 
        .then(response => showMessage(response.text())) 
        .catch(error => showMessage(error)); 
} 
 
function handleErrors(response) { 
    if (!response.ok) { 
        throw Error(response.statusText); 
    } 
 
    return response; 
} 
 
function showMessage(responseText) { 
    console.log(responseText); 
} 
 
function checkEmail(email) { 
    let regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; 
    return regex.test(email); 
}
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
</head> 
<body> 
    <div> 
        <form id="emailForm"> 
            <div> 
                <p>To:</p> 
                <input type="text" name="EmailRecipient"> 
            </div> 
            <div> 
                <p>Message:</p> 
                <textarea name="Message"></textarea> 
            </div> 
            <div> 
                <input type="submit" name="SendEmail" onclick="return processForm();"> 
            </div> 
        </form> 
    </div> 
</body> 
 
<script src="formHandler.js"></script> 
 
</html>

А вот код на php:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$emailRecipient = '';
$message = '';
if (isset($_POST["EmailRecipient"]) && isset($_POST["Message"])) {
    $emailRecipient = $_POST["EmailRecipient"];
    $message = $_POST["Message"];
}
$mail = new PHPMailer();
$mail->isSMTP();
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
$mail->IsHTML(true);
$mail->Username = "username@gmail.com";
$mail->Password = "password";
$mail->setFrom("username@gmail.com");
$mail->Subject = "Test";
$mail->Body = $message;
$mail->AddAddress($emailRecipient);
if(!$mail->send()) {
    echo "Error!";
} else {
    echo "Successful!";
}

Проблема заключается в том, что когда выполнение php скрипта доходит до $mail->send(), я получаю ошибку 502 bad gateway. После этого php скрипт вообще перестает реагировать на любые запросы. Даже при измении кода и в том случае, если я оставляю просто echo "hello!" - вообще ничего не происходит, просто висит бесконечный pending как на картинке ниже. И так до тех пор, пока не перезапустится сервер.

В чем может быть проблема такого поведения? Что я делаю не так? Как это исправить?

Answer 1

Не очень разобрался с настройкой сервера и phpstorm. Я думал, что он автоматически подтягивает сервер и его конфигурацию при установке. Всё-таки выполнял же он на localhost простые скрипты без запросов нормально. Но оказалось, что phpstorm нуждается в ручной конфигурации. Для себя пока нашел выход: работать с проектом с корневой папки сервера. В моем случае это XAMPP и путь C:\xampp\htdocs. Если запускать проект оттуда, то запросы идут корректно. Вроде еще можно настроить mapping из произвольной директории.

READ ALSO
Как получить через функции или содержимое файла его тип php

Как получить через функции или содержимое файла его тип php

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

217
Подскажите, почему не находит запись?

Подскажите, почему не находит запись?

Пытаясь вывести из таблицы базы данных столбец на страницу, не выводится ничего! Как с этим быть?

207
Как модернизировать данный код php?

Как модернизировать данный код php?

Суть в том что каждые 10 пунктов создают новую структуру ul куда выводится все пунктыИ все отлично работает , но у меня не ровное количество...

127