Page 1 of 1

Mail mit Name und E-Mail-Adresse

Posted: Wed Apr 29, 2015 8:06 am
by Klausemann
Hallo Christopher,
ich bin als Einsteiger auf dieser Seite fündig geworden und begeistert von dem spamfreien Formular.

Gibt es eine Möglichkeit, dass der Empfänger der Nachricht im Header der zugestellen E-Mail nicht nur die E-Mail-Adresse ($absender), sondern auch dessen Name ($name) angezeigt bekommt?
Z.B. Max Mustermann <max@mustermann.de>
Ich habe den Code wie nachfolgend mit dem Feld .$Name. ergänzt, doch der Name aus dem Kontaktformular wird nicht übertragen:

Code: Select all

// Mail schicken
   @mail($empfaenger,$betreff,$nachricht,'From: '.$name.' '.$absender)
Danke für eine Rückmeldung.
Grüße
Klaus-Peter

Re: Mail mit Name und E-Mail-Adresse

Posted: Wed Apr 29, 2015 2:36 pm
by Christopher
Hallo Klaus-Peter,

zunächst musst du die E-mail-Adresse in spitze Klammern stellen:

Code: Select all

@mail($empfaenger,$betreff,$nachricht,'From: '.$name.' <'.$absender.'>')
Dieser Code ist allerdings in dieser Form gefährlich, da er Spam über BCC und CC-Header ermöglicht.
Angenommen ein Abender gibt als Namen folgendes an:
und als Absender-Adresse "service@paypal.com"

Dann wird daraus dieser Mail-Header:
Also eine Mail, die nicht nur an dich, (du stehst in To) sondern auch an user1@example.com, user2@example.com und user3@example.com (im BCC) und service@paypal.com (im CC) geht und service@paypal.com als Absender-Adresse hat. So ermöglichst du es, Angreifern über deinen Server Spam bzw. Phishing zu senden.

Du musst also sicher gehen, das $name keine Kontrollzeichen enthält, welche es ermöglichen weitere Header einzuschleusen. Bei Mails bedeutet das, dass der Name keine Zeilenumbrüche enthalten darf, was ein normaler Name auch nicht tut.
Daher reicht es, die Verarbeitung abzubrechen, wenn ein Zeilenumbruch erkannt wird:

Code: Select all

if (strpos($name,"\n")!==false || strpos($from,"\r"!==false)) die("Error");
@mail($empfaenger,$betreff,$nachricht,'From: '.$name.' <'.$absender.'>')
Viele Grüße,
Christopher