Mails mit PHP Versenden

Gepostet am 27 October 2013 in: e-mail php

Seit einiger Zeit wird für jede ausgehende E-Mail ein Spam-Score erstellt. Somit ist sieht man einfach, wie Spam-Filter die selber generierte E-Mail einstufen.

Verschickt man eine E-Mail mit der PHP-Funktion mail() ohne weitere Header anzugeben, sind folgende Angaben von Spam-Assassin in den E-Mail Headern zu lesen:

X-Spam-Status: No, score=2.5 required=5.0 tests=MISSING_DATE,MISSING_FROM,
    MISSING_MID autolearn=no version=3.3.2

Dadurch wird die E-Mail zwar noch nicht als Spam eingestuft, denn es wurde gerade mal die Hälfte der benötigten Punkte erreicht, aber dennoch wäre es schöner wenn der score null wäre.

Was fehlen denn nun genau für Angaben? Das sagt uns Spam-Assassin zum Glück direkt im Header. Zuerst sagt es MISSING_DATE, das sagt einfach nur aus, dass kein Datum im Header angegeben wurde. Des weiteren fehlt die Angabe, von wem die E-Mail versandt wurde (MISSING_FROM) und als letztes steht da noch was von MISSING_MID, das ist einfach eine eindeutige ID für die verschickte E-Mail, anhand dieser ID wird die E-Mail eindeutig identifiziert, denn der Betreff ist ja nicht immer eindeutig und manche E-Mail-Clients können die E-Mails in Threads gruppieren, dazu wird die Message-ID verwendet.

Mit folgendem PHP-Code kann eine E-Mail versendet werden, die den Spam-Score null erhält, da dort alle fehlenden Angaben mitgesendet werden:

<?php
$headers = 'From: mail@example.com' . "\r\n" .
    'Date: ' . date("r") . "\r\n" .
    'Message-Id: <' . str_replace(".","_",uniqid('', true)) . '@' . getenv("SERVER_NAME") . '>';
mail("recipient@example.com","Betreff","Nachrichten-Text", $headers)
?>

In der Variable $headers stehen die optionalen Header. Die einzelnen Header werden mit \r\n, auch als Windows-Zeilenumbruch bekannt, getrennt.

Unter From kann man entweder nur die E-Mail Adresse angeben From: mail@example.com oder optional auch einen Namen: From: Max Mustermann <mail@example.com>. Optional kann man noch mehrere Header angeben, mit Reply-To kann man z.B. angeben, an wen geantwortet werden soll.