Mailform: From vs ReplyTo

derocco

Lt. Junior Grade
Registriert
Nov. 2015
Beiträge
321
Ich habe ein Formular auf meiner WP Seite, bei dem ein absenden ein Mail an meine Inbox generiert.

Nun wenn ich dann reply mache, dann geht per default die Mail an mich selber.... Ich hätte aber die Email des Kunden.

Kann ich hier irgendwie ein Reply to definieren und da die Kunden email addresse ja eigentlich habe.


Code:
$(document).on('click', '.next-btn', function(){
        var customer_email = $('input[name="email"]').val();

        if(customer_email == "") {
            toastr.warning('Bitte Email Addresse eingeben.');
        } else if(customer_email.search("@") === -1) {
            toastr.warning('Email Addresse ungültig.');
        } else {
            var email = 'me@myemail.ch';
            var content = getContent();
            var subject = '<?php echo $username; ?> ' + '<?php echo $lic_no; ?> : ' + 'Mail from Customer';
            var attatch = $("#attatch_file_path").val();
       
            showLoader();
            jQuery.ajax({
                url : '<?php echo esc_html(admin_url('admin-ajax.php')); ?>',
                type : 'post',
                data : {
                    action : 'send_email',
                    email : email,
                    subject : subject,
                    content: content,
                    attatch: attatch
                },
                success : function( response ) {
                    hideLoader();

                    if(response == "success"){
                        window.location = '<?php echo $home_url."/confirm/?vio=".$_GET['vio'];?>';
                        // toastr.success("Nachricht erfolgreich gesendet.");
                    }
                    else {
                        toastr.warning('Senden fehlgeschlagen, bitte erneut versuchen.');
                    }
                },
                error: function (error) {
                    hideLoader()
                    toastr.warning('Verarbeitung fehlgeschlagen, bitte erneut versuchen.');
                    console.log(error);
                }
            });
        }
    });

Ich hätte den korrekten wert ja in customer_email
 
Absender der E-Mail ist halt das Formular und nicht die E-Mail des Absenders des Formulars. Das heißt dein E-Mail-Client wird hier richtigerweise die Absender-E-Mail-Adresse nutzen.

Alternative wäre ein Ticketsystem: Sprich, dass Formular geht direkt in ein Ticketsystem und aus dem Ticketsystem antwortet man dann auch direkt den Absender ;)
 
  • Gefällt mir
Reaktionen: netzgestaltung
ist das so ein ungwöhnliches konstrukt mit dem
jQuery.ajax für mail senden?

ich dachte das ist ein 0815 Problem aber ich finde googelnd nichts dazu
 
Ist auch ein 0815 Problem. Du musst doch die Funktion für die AJAX action (wp_ajax[_nopriv]_send_email) gemacht haben, also hau da halt einfach noch ein "Reply-To: usermail" in den Mailheader.

Edit: Beispiel für eigene Headereinträge
PHP:
$header = "From: " . $from . "\r\nReply-To: " . $reply;
wp_mail($destination, $subject, $message, $header);

Wenn du den "From" Header auch auf die eigegebene Mail vom Formular setzt dann zeigt dir das Mailprogramm die auch direkt als Absender an.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: derocco und GTrash81
also ich habe folgendes gemacht im call:

Code:
jQuery.ajax({
                url : '<?php echo esc_html(admin_url('admin-ajax.php')); ?>',
                type : 'post',
                data : {
                    action : 'send_email',
                    email : email,
                    replay-to : customer_email,
                    subject : subject,
                    content: content,
                    attatch: attatch
                },
                success : function( response ) {

Das reply- to element eingefüht.

Das ist die Function send_email

Code:
<?php
// upload appeal attatch file
add_action('wp_ajax_send_email', 'send_email');
add_action('wp_ajax_nopriv_send_email', 'send_email');

function send_email() {
    $mail_address = $_POST['email'];
    $mail_replay-to = $_POST['replay-to'];
    $mail_content = $_POST['content'];
    $mail_subject = $_POST['subject'];
    $attatch_path = $_POST['attatch'];
    $tmp_dir = WP_CONTENT_DIR . '/themes/twentytwenty/images/tmp/';

    $to = $mail_address;
    $subject = $mail_subject;
    $body = $mail_content;
    $headers = "Content-Type: text/html; charset=UTF-8"."From: " . $mail_address . "\r\nReply-To: " . $mail_replay-to;


    if($attatch_path == '') {
        wp_mail( $to, $subject, $body, $headers);
    } else {
        wp_mail( $to, $subject, $body, $headers, array($tmp_dir . $attatch_path));     
        unlink($tmp_dir . $attatch_path);
    }

    echo "success";
}
?>

-> $mail_replay-to = $_POST['replay-to']; da hole ich das ab und dann im $headers wieder verwendet.

Müsste so klappen aber die page lädt nicht mehr so ;-)
Komisch, habs auskommentiert, nochmals rein, dann den Bindestrich raus und nun gehts.
Ergänzung ()

Vielen Dank @coolmodi
Gerade wieder viel gelernt.
 
Zuletzt bearbeitet:
Nimm es mir nicht übel, aber du scheinst einfach Dinge zu kopieren ohne sie zu verstehen und hast hier einfach mal eine Möglichkeit geschaffen mit der JEDER Mails an beliebige Leute über deinen Server senden könnte!

Um mal über den Code zu gehen:

PHP:
add_action('wp_ajax_nopriv_send_email', 'send_email');
Sollen wirklich auch nicht eingeloggte Nutzer Mails senden können?

PHP:
    $mail_address = $_POST['email'];
    $mail_replay-to = $_POST['replay-to'];
    $mail_content = $_POST['content'];
    $mail_subject = $_POST['subject'];
    $attatch_path = $_POST['attatch'];
    $tmp_dir = WP_CONTENT_DIR . '/themes/twentytwenty/images/tmp/';

    $to = $mail_address;
    $subject = $mail_subject;
    $body = $mail_content;
    $headers = "Content-Type: text/html; charset=UTF-8"."From: " . $mail_address . "\r\nReply-To: " . $mail_replay-to;
  • Warum legst du die Variablen noch mal neu an? (to, subject und body)
  • Wenn ich das richtig verstehe ist der attatch_path einfach der vom Client, wieso sollte die Datei dann plötzlich auf dem Server sein? Findet ein Upload vorher statt?
  • "mail_replay-to" als Variablenbezeichnung geht nicht, da "-" dort nicht erlaubt ist. Das wirft dann natürlich einen Fehler.
  • Headereinträge müssen korrekt getrennt sein, siehe https://tools.ietf.org/html/rfc5322#section-2.2: "[...]field name, followed by a colon (":"), followed by a field body, and terminated by CRLF."
    Du kannst das nicht einfach so zusammenkopieren.
Aber vor allem: Warum sendet der Client die "to", also DEINE Mailadresse?? Die könnte man einfach austauschen und dann Mails an beliebige Adressen schicken. Und dafür braucht man nicht mal einen Account auf der Seite.

Wenn du mit Nutzereingaben arbeiten willst, dann solltest du wirklich verstehen was du tust, sonst kommen am Ende Sicherheitslücken oder eben potentielle Spambots bei raus. Ich meine jeder Programmierer kopiert fleisig von Stackoverflow, aber man sollte dennoch erst mal verstehen was der Code macht.
 
Zuletzt bearbeitet:
Hi der Teil mit add_action('wp_ajax_nopriv_send_email', 'send_email'); wird wohl nicht benötigt.
WIe gesagt ich habe die Seite nicht gemacht, sondern geerbt und nun versucht das Reply to issue zu lösen.

Also das ganze ist nur benutzbar für eingeloggte User.

Ja es findet vorger ein upload für das attachement statt.

Variabeln hier neu erzeugen ist doppelt gemoppelt. Danke ich mache das schlanker.
Das TO sendet nciht der client, das wird auf dem server gesetzt. Plus es ist noch ein WP Plugin aktiviert das alle Wp_mail actions an meine Mail Forced.
 
Zuletzt bearbeitet:
derocco schrieb:
WIe gesagt ich habe die Seite nicht gemacht, sondern geerbt und nun versucht das Reply to issue zu lösen.
Achso.

derocco schrieb:
Das TO sendet nciht der client, das wird auf dem server gesetzt. Plus es ist noch ein WP Plugin aktiviert das alle Wp_mail actions an meine Mail Forced.
Das wird hier eindeutig aus dem post body übernommen. (Mal nur die relevanten Zeilen)
Code:
<?php
function send_email() {
    $mail_address = $_POST['email'];
    $to = $mail_address;
    wp_mail( $to, $subject, $body, $headers);
}
?>
Siehe auch im JS code:
Javascript:
var email = 'me@myemail.ch';
Dann über ein Plugin die Adressen immer auf eine andere zu setzen löst das Problem natürlich, aber ist trotzdem echt fragwürdig gelöst.
 
Zurück
Oben