Вопрос или проблема
Я настроил 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);
Важные моменты:
-
Санитаризация входных данных: Используйте функции
sanitize_text_field()
иsanitize_email()
для обеспечения безопасности данных, введенных пользователем. -
Проверка данных формы: Убедитесь, что поля
namee
иemail
существуют в форме и заполняются корректно. -
SMTP настройки: Обратите внимание, что ваша конфигурация SMTP может отличаться в зависимости от вашего сервера и его настроек. Убедитесь, что вы используете правильные параметры (например, хост, порт) для вашего SMTP-сервера.
Заключение
Теперь, когда вы настроили отправку почты с использованием wp_mail()
и правильно передали заголовки, адрес отправителя будет автоматически использовать адрес, введенный пользователем в форме. Пожалуйста, протестируйте вашу форму, чтобы убедиться, что все работает правильно.