как задать адрес в соответствии с формой ввода адреса электронной почты для wp mail()?
Я пытаюсь создать форму и отправить ее на свой адрес электронной почты с помощью wp_mail. мой код wp_mail():
if($_POST["submit"]) {
$to="my email";
$subject ="My subject";
$sender=$_POST["sendername"];
$senderEmail=$_POST["senderEmail"];
$message=$_POST["message"];
$name_title=$_POST["name_title"];
$mailBody = "<b><span style='color: red;'>Name:</span></b> $name_title $sender\n<br/>
<b>Email:</span></b> $senderEmail\n\n<br/><br/>
<b>Message:</b> $message";
$mail_sent = wp_mail( $to, $subject, $mailBody );
}
И для изменения адреса отправителя я добавил следующие фильтры в свой functions.php
/* adding support for html emails*/
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
function wpse27856_set_content_type(){
return "text/html";
}
/* from address */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
return $senderEmail;
}
/* from name*/
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
return $sender;
}
И форма HTML такова:
<form id="" name="" action="<?php echo get_permalink(); ?>" method="post">
<div class="form-input">
<select name="name_title" class="name-title-input">
<option value="" selected="selected">Select Title</option>
<option value="Mr">Mr</option>
</div>
<div class="label-input-wrapper">
<div class="form-label">Name</div><div class="form-input"><input type="text" name="sendername"/></div>
</div>
<div class="label-input-wrapper">
<div class="form-label">E-Mail</div><div class="form-input"><input type="email" name="senderEmail" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" required /></div>
</div>
<input type="submit" value="Submit" name="submit">
</form>
Он не отправляет почтовую форму на мою электронную почту. но он отправляет форму на мою электронную почту, если я изменю фильтры следующим образом:
/* from address */
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email )
{
return "[email protected]";
}
/* from name*/
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name )
{
return "my name";
}
Итак, как можно сделать возможным получение электронной почты отправителей из заголовка?
2 answers
Если я правильно вас понимаю, у вас просто проблемы с получением от набора? Самым простым способом было бы просто добавить из в заголовки электронной почты в функцию wp_mail.
Вот пример одной из моих старых простых функций отправки электронной почты, которая работает:
function contact_send() {
$title = 'New message Received';
$headers = array('From: '.$_POST['full_name'].' <'.$_POST['email_address'].'>');
$message = '<h1>My message</h1>';
//Send the email
add_filter('wp_mail_content_type', create_function('', 'return "text/html"; '));
$email = wp_mail('[email protected]', $title, $message, $headers);
remove_filter('wp_mail_content_type', 'set_html_content_type');
return $email;
}
Крючок wp_mail_from предоставляет адрес электронной почты, который вы уже установили в своей функции wp_mail, вы его не установили, поэтому он получал пустой и отправлял обратно пустая переменная ($senderemail не была определена, поэтому будет возвращена неопределенной).
Для этой фильтрации адрес электронной почты:
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name ) {
return "My Name";
}
Теперь добавьте фильтр для имени адреса электронной почты:
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email ) {
return "change-this-to-your-email-address";
}
В ваш function.php
.