Как исправить wp_mail() отображение HTML-тегов в электронной почте

#php #wordpress #email

#php #wordpress #Адрес электронной почты

Вопрос:

Я использую функцию wp_mail () для отправки формы бронирования, созданной на заказ в шаблоне страницы в пользовательской теме. Моя проблема в том, что у меня всегда есть HTML-теги, отображаемые в получаемых электронных письмах.

Я несколько раз пытался изменить заголовки и сообщение, ища решения в Интернете, но оно просто не отображается в нужном формате. Я пробовал разные заголовки и также модифицировал HTML.

Я хочу, чтобы электронное письмо отображалось в виде текста и не имело HTML-тегов.

функция send_email () {

 if(isset($_POST['submit'])){

  $room_selected = $_POST['room-name'];
  $checkIn = $_POST['check-in'];
  $checkOut = $_POST['check-out'];
  $firstname = $_POST['first-name'];
  $lastname = $_POST['surname'];
  $from = $_POST['email'];
  $phone = $_POST['phone'];
  $room_message = $_POST['your-message'];
  $numPeople = $_POST['people-select'];
  $dinnerSelect = $_POST['dinner-select'];
  $breakfastSelect = $_POST['breakfast-select'];
  $bedSelect = $_POST['bed-select'];
  $grandTotal = $_POST['grand-total'];

  $to = "test@email.com";
  $subject = "My subject";

  $headers = "From" . $from .  "rn";
  $headers .= "Reply-To: admin@example.com rn";
  $headers .= "MIME-Version: 1.0 rn";
  $headers .= "Content-Type: text/html; charset=UTF-8 rn";


  $message = '<html>';
  $message .= '<head>';
  $message .= '<title>Booking Request</title>';
  $message .= '</head>';
  $message .= '<body>';
  $message .= '<div class="container">';
  $message .=   '<div class="row">';
  $message .=          '<div class="card" style="width: 18rem;">';
  $message .=            '<img class="card-img-top" src="..." alt="Card image cap">';
  $message .=            '<div class="card-message">';
  $message .=              '<h5 class="card-title">' . $room_selected . '</h5>';
  $message .=              '<p class="card-text">Some quick example text</p>';
  $message .=            '</div>';
  $message .=            '<ul class="list-group list-group-flush">';
  $message .=              '<li class="list-group-item">Name: '. $firstname . ' ' . $lastname . '</li>';
  $message .=              '<li class="list-group-item">Check In Day:' . $checkIn . '</li>';
  $message .=              '<li class="list-group-item">Check Out Day:' . $checkOut . '</li>';
  $message .=              '<li class="list-group-item">Email:' . $from . '</li>';
  $message .=              '<li class="list-group-item">Phone:' . $phone . '</li>';
  $message .=              '<li class="list-group-item">Room:' . $room_selected . '</li>';
  $message .=              '<li class="list-group-item">Number of People:' . $numPeople . '</li>';
  $message .=              '<li class="list-group-item">Dinner Option:' . $dinnerSelect . '</li>';
  $message .=              '<li class="list-group-item">Breakfast Option:' . $breakfastSelect . '</li>';
  $message .=              '<li class="list-group-item">Bed Option:' . $bedSelect . '</li>';
  $message .=              '<li class="list-group-item">Message:' . $room_message . '</li>';
  $message .=            '</ul>';
  $message .=            '<div class="card-message">';
  $message .=              '<p class="card-text">Grand Total:' . $grandTotal . '</p>';
  $message .=            '</div>';
  $message .=          '</div>';
  $message .=        '</div>';
  $message .=       '</div>';
  $message .=    '</body>';
  $message .=  '</html>';




  if( wp_mail($to, $subject, $message, $headers) ) {
    echo 'sent';
  }
  else {
    echo 'there is a problem';
  }

}

   }

 }

    add_action( 'init', 'send_email' );
  

Я хочу, чтобы электронное письмо отображалось в виде текста и не имело HTML-тегов.

Комментарии:

1. ваш код работает нормально.

2. Привет, Вел, как ты это тестировал? Где может быть проблема, когда я ее тестирую? Я получаю электронное письмо со всеми значениями, за исключением того, что в электронном письме отображаются все HTML-теги в одной строке

3. удалите это условие if(isset($_POST['submit'])){ и проверьте

Ответ №1:

Тип содержимого по умолчанию — email, text/plain который не позволяет использовать HTML. Вы можете изменить это, установив headers аргумент в wp_mail() функции следующим образом:

 wp_mail(
  'to email',
  'mail subject',
  'your message',
  'Content-type: text/html'
);
  

Параметр может быть строкой или массивом.

Для получения более подробной информации https://developer.wordpress.org/reference/functions/wp_mail/#usage