PHP "mail()" - GMX verweigert die Annahme

ClausVB

Registered User
Ich habe folgendes Problem. GMX verweigert die Annahme der folgenden Mail:

PHP:
<?php
	error_reporting(E_ALL);

// const SENDER, RECIPIENT
	define('SENDER', 'claus.meinname (at) clausvb.de'); // mail_from
	define('SENDER_NAME', 'CVB'); // FROM: Voller Name
	define('RECIPIENT', 'clausvb1974 (at) gmx.de'); // mail_to
	define('CC', 'clausvb1974 (at) gmail.com'); // mail_cc
	define('CC_NAME', 'Claus'); // CC: Voller Name

// execute "mail()"
	$date_and_time = date('l, d. F Y - H:i:s');

	if (mail(RECIPIENT,
		'Mail per PHP von ' . SENDER_NAME . ': ' . $date_and_time,
		'Dies ist nur eine Testnachricht.',
		'From: "' . SENDER_NAME . '" <' . SENDER . '>' . "\r\n" . 'Cc: "' . CC_NAME . '" <' . CC . '>')
	)
	{
		echo 'E-Mail wurde erfolgreich versendet: ' . $date_and_time;
	}
	else
	{
		echo 'E-Mail konnte NICHT versendet werden: ' . $date_and_time;
	}
?>

Ich habe für diesen Post das "@" Zeichen extra durch " (at) " ersetzt. Die Mails kommen bei GMail und anderen Providern übrigens an (siehe CC).

Ich habe schon folgendes Dokument gelesen
http://faq.gmx.net/messages/email/optionen/antispam/1.html
bin mir aber nicht sicher, ob die Mail-Funktion von PHP wirklich die RFCs beachtet.

Ich habe auch mit den Worten "Probleme GMX" und "GMX verweigert Annahme" über Google hier im Forum gesucht. Habe aber noch nicht alle Suchvarianten und alle Posts dazu gelesen.

Kennt jemand das Problem?

Danke und Gruß
Claus
 
Ja, mit einer Mailer-Klasse wie SWIFTmailer und Co geht es, aber darum geht es nicht, sondern warum nur GMX das ablehnt bzw. was am PHP falsch ist.

Fehler im Log habe ich nachgesehen:

Jan 26 11:48:28 SERVERNAME postfix/smtp[9420]: 24A4640375: to=<clausvb1974 (at) gmx.de>, relay=mx1.gmx.net[213.165.64.102], delay=0, status=bounced (host mx1.gmx.net[213.165.64.102] said: 550 5.1.8 Cannot resolve your domain {mx075} (in reply to MAIL FROM command))

Ich schaue jetzt mal nach, woher "mx075" kommt. So heißt der Server auf keinen Fall und meines Wissens nach auch nicht in irgendeiner Datei hinterlegt.

Aber vllt. könnt ihr schon was mit der Fehlermeldung anfangen.

Danke für alle Antworten und Gruß
Claus
 
Stell sicher, dass in myhostname in der main.cf der selbe FQDN steht, der aufgelöst die IP deines Servers ergibt.
Ebenfalls sollte die IP aufgelöst wieder diesen FQDN liefern.
 
Danke Elias! (Du hast mir früher schon mal geholfen :)

"main.cf" und FQDN sind richtig eingestellt. Ich bin über
diesen Post vom ServerSupportForum
und Google an die Lösung gekommen. Dieser Post erwähnt den "Return-Path".

Über die Suche bin ich auf
wikipedia: Envelope_Sender
gestoßen.

In PHP muss ein Schalter gesetzt werden also nicht

PHP:
if (mail(RECIPIENT,
        'Mail per PHP von ' . SENDER_NAME . ': ' . $date_and_time,
        'Dies ist nur eine Testnachricht.',
        'From: "' . SENDER_NAME . '" <' . SENDER . '>' . "\r\n" . 'Cc: "' . CC_NAME . '" <' . CC . '>')
)

sondern

PHP:
if (mail(RECIPIENT,
    'Mail per PHP von ' . SENDER_NAME . ': ' . $date_and_time,
    'Dies ist nur eine Testnachricht.',
    'From: "' . SENDER_NAME . '" <' . SENDER . '>' . "\r\n" . 'Cc: "' . CC_NAME . '" <' . CC . '>',
    '-f ' . SENDER)
)

Für GMX bringt also "'-f ' . SENDER)" den Erfolg.

Dadurch wird dann auch der RETURN PATH und der "envelope sender" richtig gesetzt:

Delivered-To: clausvb1974 (at) gmail.com
Received: by 10.236.103.178 with SMTP id f38cs126138yhg;
Wed, 26 Jan 2011 02:48:29 -0800 (PST)
Received: by 10.103.214.9 with SMTP id r9mr3044450muq.135.1296038908944;
Wed, 26 Jan 2011 02:48:28 -0800 (PST)
Return-Path: <wwwrun (at) SERVERNAME.clausvb.de>

im Gegensatz zu

Delivered-To: clausvb1974 (at) gmail.com
Received: by 10.236.103.178 with SMTP id f38cs127046yhg;
Wed, 26 Jan 2011 03:18:08 -0800 (PST)
Received: by 10.103.214.5 with SMTP id r5mr3066525muq.134.1296040687708;
Wed, 26 Jan 2011 03:18:07 -0800 (PST)
Return-Path: <claus.meinname (at) clausvb.de>

Damit kommen die Mails dann bei GMX an.

Problem gelöst! Danke an alle!

Den Unterschied zwischen "Return-Path" und "envelope sender" verstehe ich nicht. Gibt es einen Unterschied? (Nicht dringend die Frage, weil Problem ist gelöst.)
 
Den Unterschied zwischen "Return-Path" und "envelope sender" verstehe ich nicht. Gibt es einen Unterschied? (Nicht dringend die Frage, weil Problem ist gelöst.)

Der From in der Mail ist einfach nur ein Header, der da drin steht. Da kann z.B. auch drinstehen user@anderedomain.tld. Header sind ebenfalls Teil des Payload. Übertragen auf die analoge Schneckenpost ist der From-Header also der Absender, der auf dem Schreiben steht, das im Umschlag steckt.
Der Envelope ist der "Umschlag" - also ist der Envelope From der Absender, der gegenüber dem MTA angegeben wird. Das kann z.B. webuser@webserver.tld sein. Analog ist hier der Absender auf dem Umschlag.
Dieser wird dann IIRC auch (sofern nicht anders angegeben) als Return-Path genutzt. Da ja der Absender aus dem Inhalt nicht der Absender aus dem Envelope ist und bei einer Nichtzustellbarkeit der echte Absender (also der Envelope-Sender) davon erfahren muss.

Der Envelope-From geht beim Ablegen der Mail in die Mailbox des Empfängers verloren, da er nicht Teil der Mail ist. Manche MTAs setzen den als X-Original-From oder ähnliches in den Header der Mail. So ein bisschen als würde der Briefträger beim Post Bringen den Umschlag aufreißen, dir nur den Inhalt in den Briefkasten werden und den Umschlag dann entsorgen.

Der Envelope wird natürlich bei den MTAs gegen diverse Checks geprüft um z.B. Mails gar nicht erst anzunehmen, die von nicht-existierenden Domains stammen oder deren Absender behauptet, zur eigenen Domain zu gehören ohne SASL-Authentifiziert zu sein u.s.w. - mache ich als Spamabwehr auf unserem eigenen MX auch.

Edit: Es müsste auch mit wwwrun@servername.domain.tld klappen. Aber nur, wenn für servername.domain.tld die DNS-Records entsprechend gesetzt sind.
 
Last edited by a moderator:
Edit: Es müsste auch mit wwwrun@servername.domain.tld klappen. Aber nur, wenn für servername.domain.tld die DNS-Records entsprechend gesetzt sind.

Ich nehme stark an, dass nur "domain.tld" und nicht "servername.domain.tld" gesetzt ist. Ich checke das aber mal und werde die DNS-Konfiguration vllt. ändern.

Vielen, vielen Dank für die ausführliche Erklärung!
Claus
 
Back
Top