Как отправить электронное письмо с помощью wp_mail(), используя адрес отправителя из контактной формы вместо адреса хоста?

Вопрос или проблема

Я настроил SMTL так:

add_action( "phpmailer_init", "send_smtp_email" );
function send_smtp_email( $phpmailer ) {
ini_set("sendmail_from","[email protected]");
ini_set("sendmail_path","[email protected]");
    // Определяем, что мы отправляем через SMTP
    $phpmailer->isSMTP();
    // Имя хоста почтового сервера
    $phpmailer->Host = "localhost";
    // Использовать SMTP-аутентификацию (true|false)
    $phpmailer->SMTPAuth = false;
    // Номер порта SMTP - вероятно, 25, 465 или 587
    $phpmailer->Port = "25";
    // Система шифрования для использования - ssl или tls
    $phpmailer->SMTPSecure = "tls";

    $phpmailer->From = "[email protected]";
    $phpmailer->FromName = "XYZ";
}

И добавил следующий код для моей контактной формы, чтобы отправлять email.

$headers = array('MIME-Version: 1.0'.'From: '.$_POST['namee'].'<'.$_POST['email'].'>'.'Reply-To: '.$_POST['email']);
$comment = $comment . "\r\n" . "\r\nIP адрес: " . $id . "\r\nUser Agent: " . $browser . "\r\nИсточник: " . $referrer;
wp_mail($to,$website,$comment,$headers);

Но он не устанавливает заголовки должным образом и не отправляет email с адресом “От”, взятым из контактной формы.

Я получаю письма, но адрес “От” в этих письмах – это адрес хост-сервера.

Я хочу, чтобы адрес электронной почты, взятый из контактной формы, устанавливался как адрес “От” в email.

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

Как я могу это сделать? Кто-нибудь знает об этом?

Вам не нужно передавать имя и email отправителя в PHPMailer в вашем коде, так как он возьмет это из $headers, так что попробуйте следующее:

add_action( "phpmailer_init", "send_smtp_email" );
function send_smtp_email( $phpmailer ) {
// ini_set("sendmail_from","[email protected]");
// ini_set("sendmail_path","[email protected]");
    // Определяем, что мы отправляем через SMTP
    $phpmailer->isSMTP();
    // Имя хоста почтового сервера
    $phpmailer->Host = "localhost";
    // Использовать SMTP-аутентификацию (true|false)
    $phpmailer->SMTPAuth = false;
    // Номер порта SMTP - вероятно, 25, 465 или 587
    $phpmailer->Port = "25";
    // Система шифрования для использования - ssl или tls
    $phpmailer->SMTPSecure = "tls";

    // $phpmailer->From = "[email protected]";
    // $phpmailer->FromName = "XYZ";
}

Также дважды проверьте имя поля формы для: $_POST['namee']

Ответ или решение

Чтобы отправить электронное письмо с использованием функции wp_mail() с адресом "От" (From), полученным из формы обратной связи, вместо использования адреса сервера, вам необходимо правильно установить заголовки для wp_mail() и настроить PHPMailer. Давайте разберем необходимые шаги.

Шаг 1: Настройка функции phpmailer_init

Ваша функция send_smtp_email должна быть настроена так, чтобы она не изменяла адрес отправителя, если вы хотите использовать адрес из формы. Обратите внимание на то, что вам не нужно устанавливать значение для $phpmailer->From и $phpmailer->FromName, так как вы будете передавать эти данные в заголовках.

Вот пример кода:

add_action("phpmailer_init", "send_smtp_email");
function send_smtp_email($phpmailer) {
    // Установка SMTP
    $phpmailer->isSMTP();
    $phpmailer->Host = "localhost";
    $phpmailer->SMTPAuth = false;
    $phpmailer->Port = 25;
    $phpmailer->SMTPSecure = "tls";
}

Шаг 2: Отправка письма с использованием wp_mail()

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

Пример кода для отправки письма:

$to = '<recipient@example.com>'; // Замените на адрес получателя
$subject = 'Тема вашего письма'; // Замените на нужную тему
$message = 'Сообщение от пользователя'; // Замените на текст вашего сообщения

// Убедитесь, что 'namee' и 'email' - правильные названия полей из вашей формы
$headers = array(
    'MIME-Version: 1.0',
    'From: ' . sanitize_text_field($_POST['namee']) . ' <' . sanitize_email($_POST['email']) . '>',
    'Reply-To: ' . sanitize_email($_POST['email']),
);

wp_mail($to, $subject, $message, $headers);

Важные моменты:

  1. Санитаризация входных данных: Используйте функции sanitize_text_field() и sanitize_email() для обеспечения безопасности данных, введенных пользователем.

  2. Проверка данных формы: Убедитесь, что поля namee и email существуют в форме и заполняются корректно.

  3. SMTP настройки: Обратите внимание, что ваша конфигурация SMTP может отличаться в зависимости от вашего сервера и его настроек. Убедитесь, что вы используете правильные параметры (например, хост, порт) для вашего SMTP-сервера.

Заключение

Теперь, когда вы настроили отправку почты с использованием wp_mail() и правильно передали заголовки, адрес отправителя будет автоматически использовать адрес, введенный пользователем в форме. Пожалуйста, протестируйте вашу форму, чтобы убедиться, что все работает правильно.

Оцените материал
Добавить комментарий

Капча загружается...