Ich versuche, ein Formular zu erstellen und es mit wp_mail an meine E-Mail-Adresse zu senden. Mein wp_mail () Code ist:
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 );
}
und zum ändern der von adresse habe ich die folgenden filter in meine functions.php eingefügt
/* 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;
}
und das Formular HTML ist:
<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._%+-][email protected][a-z0-9.-]+\.[a-z]{2,4}$" required /></div>
</div>
<input type="submit" value="Submit" name="submit">
</form>
Das Mailformular wird nicht an meine E-Mail gesendet. Es wird jedoch ein Formular an meine E-Mail gesendet, wenn ich die Filter wie folgt ändere:
/* 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";
}
Wie kann es also möglich sein, die E-Mail des Absenders aus dem Header zu erhalten?
Wenn ich Sie richtig verstehe, haben Sie nur Probleme, das vom Set zu bekommen? Der einfachste Weg wäre, einfach das von in die E-Mail-Header in die wp_mail -Funktion einzufügen.
Hier ist ein Beispiel für eine meiner alten einfachen E-Mail-Sendefunktionen:
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;
}
Der wp_mail_from - Hook liefert die E-Mail, die Sie bereits in Ihrer wp_mail - Funktion festgelegt haben. Sie haben keine festgelegt, so dass sie leer empfangen und eine leere Variable zurücksenden wurde ($ senderEmail wurde nicht definiert, würde also undefiniert zurückgeben). .
Für diese Filterung der E-Mail-Adresse:
add_filter( 'wp_mail_from_name', 'my_mail_from_name' );
function my_mail_from_name( $name ) {
return "My Name";
}
Fügen Sie nun einen Filter für den Namen der E-Mail-Adresse hinzu:
add_filter( 'wp_mail_from', 'my_mail_from' );
function my_mail_from( $email ) {
return "change-this-to-your-email-address";
}
in deinen function.php
.