6 Stimmen

Wie validiere (oder escapen) ich das Namensfeld eines Benutzers, damit es meine E-Mail-Versandsoftware nicht kaputt macht?

Beim Senden einer Nachricht kann ich folgendes verwenden, um das Feld "An" zu setzen: (in Perl)

An: "$name" <$email>

In Perl kann ich den $email Teil mit Email::Valid validieren, aber wie kann ich sicherstellen, dass der $name Teil Unicode-Zeichen akzeptiert, aber nicht dazu gebracht werden kann, an mehrere Adressen zu senden oder etwas anderes Böses zu tun? z.B. Dies

$email = 'bar@me.com';
$name = 'Foo" <foo@other.com>, "Bar';

scheint ein An-Feld wie dieses zu erstellen:

An: "Foo" <foo@other.com>, "Bar" <bar@me.com>

sendet E-Mails an zwei Adressen.

8voto

daxim Punkte 38607
Verwenden Sie Email::Address qw();
Verwenden Sie Encode qw(encode);

s{\R}{}g für $email, $name; # Zeilenumbrüche verschwinden
my $to = Email::Address->new($name => $email)->format;
print encode 'MIME-Header', $to;

2voto

d135-1r43 Punkte 2471

Es gibt möglicherweise keine einfache Lösung dafür. Ich würde eine konservative Lösung per Hand empfehlen.

/\p{L}/

entspricht jedem Unicode-Buchstaben in jeder Sprache. Fühlen Sie sich frei, Punkte oder Bindestriche hinzuzufügen, abhängig von kulturellem Hintergrund Ihrer Software.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X