Измените контактную форму, чтобы использовать введенную пользователем тему в качестве темы электронной почты. - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть контактная форма PHP, которая использует внешний SMTP-сервер и Recaptcha и прекрасно работает.

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

Вот мой PHP-код:

<?php
require './PHPMailer-master/PHPMailerAutoload.php';
require './recaptcha-master/src/autoload.php';
$fromEmail       = 'no-reply@domain.com';
$fromName        = 'Domain Contact';
$sendToEmail     = 'support@domain.com';
$sendToName      = 'Domain Support';
$subject         = 'Domain Query';
$recaptchaSecret = 'secret_here';
$fields          = array(
    'firstname' => 'Firstname',
    'lastname' => 'Lastname',
    'subject' => 'Subject',
    'email' => 'Email',
    'message' => 'Message'
);
$okMessage       = 'Thank you for getting in touch! We will get back to you with your query shortly';
$errorMessage    = 'There was an error while submitting the form. Please try again later';
error_reporting(E_ALL & ~E_NOTICE);
try {
    if (!empty($_POST)) {
        if (!isset($_POST['g-recaptcha-response'])) {
            throw new \Exception('ReCaptcha is not set.');
        }
        $recaptcha = new \ReCaptcha\ReCaptcha($recaptchaSecret, new \ReCaptcha\RequestMethod\CurlPost());
        $response  = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
        if (!$response->isSuccess()) {
            throw new \Exception('ReCaptcha was not validated.');
        }
        $emailTextHtml .= "<table>";
        foreach ($_POST as $key => $value) {
            if (isset($fields[$key])) {
                $emailTextHtml .= "<tr><th>$fields[$key]</th><td>$value</td></tr>";
            }
        }
        $emailTextHtml .= "</table>";
        $mail = new PHPMailer;
        $mail->setFrom($fromEmail, $fromName);
        $mail->addAddress($sendToEmail, $sendToName);
        $mail->addReplyTo($from);
        $mail->isHTML(true);
        $mail->Subject = $subject;
        $mail->Body    = $emailTextHtml;
        $mail->msgHTML($emailTextHtml);
        $mail->isSMTP();
        $mail->SMTPDebug   = 0;
        $mail->Debugoutput = 'html';
        $mail->SMTPOptions = array(
            'ssl' => array(
                'verify_peer' => false,
                'verify_peer_name' => false,
                'allow_self_signed' => true
            )
        );
        $mail->Host        = 'email-smtp.eu-west-1.amazonaws.com';
        $mail->Port        = 587;
        $mail->SMTPSecure  = 'tls';
        $mail->SMTPAuth    = true;
        $mail->Username    = 'username';
        $mail->Password    = 'password';
        if (!$mail->send()) {
            throw new \Exception('There was a problem sending your message. Please try again later' . $mail->ErrorInfo);
        }
        $responseArray = array(
            'type' => 'success',
            'message' => $okMessage
        );
    }
}
catch (\Exception $e) {
    $responseArray = array(
        'type' => 'danger',
        'message' => $e->getMessage()
    );
}
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $encoded = json_encode($responseArray);
    header('Content-Type: application/json');
    echo $encoded;
} else {
    echo $responseArray['message'];
}

А вот мой JavaScript:

$(function() {
    window.verifyRecaptchaCallback = function(response) {
        $('input[data-recaptcha]').val(response).trigger('change')
    }
    window.expiredRecaptchaCallback = function() {
        $('input[data-recaptcha]').val("").trigger('change')
    }
    $('#domain-contact').validator();
    $('#domain-contact').on('submit', function(e) {
        if (!e.isDefaultPrevented()) {
            var url = "contact.php";
            $.ajax({
                type: "POST",
                url: url,
                data: $(this).serialize(),
                success: function(data) {
                    var messageAlert = 'alert-' + data.type;
                    var messageText = data.message;
                    var alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' + messageText + '</div>';
                    if (messageAlert && messageText) {
                        $('#domain-contact').find('.messages-contact').html(alertBox);
                        $('#domain-contact')[0].reset();
                        grecaptcha.reset()
                    }
                }
            });
            return !1
        }
    })
});

Любые идеикак это можно сделать?

PS Я не включаю HTML, так как он должен быть читаемым в PHP, что отправляет форма, но я знаю, если это необходимо.

1 Ответ

0 голосов
/ 28 февраля 2019

Вам просто нужно заменить

$subject         = 'Domain Query';

на

$subject         = $_POST['input-name'];

Заменить "input-name" на имя вашего ввода в HTML-форме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...