3 Stimmen

Von Shared Hosting gesendete E-Mails werden blockiert. Gibt es eine Möglichkeit, dies zu vermeiden?

Ich habe auf meiner Website ein PHP-Skript, das automatisch eine Bestellbestätigung an meine Kunden schickt. Die Domain meiner Website ist bei einer Firma registriert, die auch meine Website hostet. Ich habe eine Menge Probleme, E-Mails mit der mail()-Funktion an einige E-Mail-Konten zu senden ... viele meiner Benutzer kontaktieren mich und sagen, dass sie meine automatische E-Mail nie erhalten haben! Das ist also ein sehr großes Problem!

Die Konten, die mir mehr Probleme bereiten, sind comcast.net, uol.com, mchsi.com und andere! Ich habe mich mit dem Support-Center dieser E-Mail-Anbieter in Verbindung gesetzt und darum gebeten, meine IP-Adresse ebenfalls aus der Blockierliste zu entfernen.

Die Kopfzeile der E-Mail sieht wie folgt aus:

$header = "Sender: $from_mail\n";
$header .= "From: Account <$from_mail>\n";
$header .= "Reply-To: Account <$from_mail >\n";
$header .= "Content-Type: multipart/mixed; boundary=$mixed_boundary\n";
$header .= "Mime-Version: 1.0\n";
$header .= "X-Mailer: PHP/".phpversion()."\n";

$body = "\n--$mixed_boundary\n";
.
.
.
.
$body .= "\n\n--$mixed_boundary--";

mail($to, $subject, $body, utf8_encode($header), "-f$from_mail");

Gibt es etwas, das ich versuchen kann, um dieses Problem zu vermeiden? Weiß jemand, wo ich nachsehen kann, welche IP-Adresse der Server hat, der für die Zustellung von E-Mails verwendet wird, wenn ich an die PHP-Funktion mail() denke?

Vielen Dank im Voraus für Ihre Antworten!!!


Hallo,

noch heute blockieren einige E-Mail-Provider wie Comcast meine IP-Adressen mit der Begründung, dass mein Mailserver Spams versendet ... Ich habe die Entfernung von der Blockliste beantragt, aber ihr System blockiert sie weiterhin! Ich weiß nicht, was ich noch tun kann ... Ich habe Ihre Vorschläge befolgt und der Code sieht wie folgt aus:

$md5 = md5(date('r', time()));
$mixed_boundary = "PHP-Mixed-$md5";
$alt_boundary = "PHP-Alt-$md5";

$header = "Sender: $from_mail\r\n";
$header .= "Errors-To: $from_mail\r\n";
$header .= "From: account <$from_mail>\r\n";
$header .= "Reply-To: $from_mail\r\n";
$header .= "Content-Type: multipart/mixed; boundary=$mixed_boundary\r\n";
$header .= "Mime-Version: 1.0\r\n";
$header .= "X-Mailer: PHP/".phpversion()."\r\n";

$body = "\n--$mixed_boundary\n";
$body .= "Content-Type: multipart/alternative; boundary=$alt_boundary\n";
.
.
.
.
$body .= "--$mixed_boundary\n";
$body .= "Content-Disposition: attachment filename=\"...\"\n";
$body .= "Content-Type: application/octet-stream; x-unix-mode=0644; name=\"...\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
.
.
.
.
$body .= "\n\n--$mixed_boundary--";

mail($to, $subject, $body, utf8_encode($header), "-f$from_mail");

Vorschläge?

Nochmals vielen Dank!

0 Stimmen

Ein Blick in die PHP-Dokumentation für die mail()-Funktion zeigt, dass die Kopfzeilen mit " \r\n ", nicht nur mit " \n " wie in Ihrem Beispiel. Könnte sein, dass " \r\n "von der Spezifikation verlangt wird, aber dass Ihr Ansatz trotzdem funktioniert, da einige Mailserver liberal sind, was die Akzeptanz angeht.

0 Stimmen

In der PHP-Dokumentation heißt es, dass nur " \n "nicht mit RFC 2822 (Internet Message Format) übereinstimmt

0 Stimmen

Sondern " \r\n Sind die "Trennzeichen" für Asp Server? Oder nicht? Ich dachte, der PHP-Server verwendet " \n " als neue Zeile char!

4voto

codingguy3000 Punkte 2887

Lassen Sie mich Ihnen den Kampf erklären, den Sie vor sich haben. Vergessen Sie die technischen Details für eine Minute. Es gibt Hunderte von E-Mail-Anbietern auf dem Markt. Die großen sind Yahoo, Gmail, AOL, Hotmail usw. Wenn Sie bei einem dieser Dienste blockiert sind, kann das Ihr Geschäft stark beeinträchtigen.

Diese E-Mail-Anbieter sind äußerst besorgt über Spam und gehen bei der Bekämpfung von Spam bis zum Äußersten, indem sie alle Nachrichten blockieren, die Spam sein könnten. Vielleicht bekommen Sie nie Spam-Beschwerden, aber wenn ein anderes Unternehmen, das Ihr gemeinsames Hosting-Angebot nutzt, Spam-Beschwerden bekommt, sind Sie davon betroffen. Es spielt keine Rolle, wie Sie Ihre Anwendung konfigurieren, wenn Sie sich an einer IP-Adresse befinden, bei der Spam vermutet wird, werden Ihre Nachrichten an den Spam-Ordner geschickt.

Selbst wenn Sie einen eigenen Server haben, werden Sie immer noch Probleme haben. Mit der Zeit werden einige der Empfänger beim Versenden von E-Mails die Spam-Taste drücken. Das ist eine Tatsache des Lebens und Sie können nichts dagegen tun.

Die einzige Lösung besteht darin, den E-Mail-Versand auszulagern. Unternehmen wie Aweber oder iContact kümmern sich für Sie um die Zustellung von E-Mails. Sie arbeiten mit allen großen E-Mail-Anbietern zusammen und sorgen dafür, dass Ihre Nachrichten im Posteingang des Empfängers landen. Sie müssen sich nicht mehr darum kümmern, Yahoo oder Gmail zu kontaktieren, weil jemand die Spam-Taste gedrückt hat. Sie können sich auf wichtigere Dinge konzentrieren.

0 Stimmen

Wow, so viele Jahre nach diesem Beitrag ist es immer noch dasselbe.

3voto

easel Punkte 3912

Sie könnten sich selbst eine E-Mail schicken und die Kopfzeilen überprüfen. Das gibt Ihnen eine Vorstellung davon, welchen Weg eine E-Mail nehmen könnte, aber es gibt wirklich nichts, was E-Mails an diese anderen Domänen daran hindert, einen anderen Weg zu nehmen.

In der Regel haben diese großen ISPs sehr leistungsfähige Spam-Filter, so dass es schwierig sein wird, von einem gemeinsam genutzten Host aus an sie zu mailen. Wenn Sie sich eine eigene IP-Adresse zulegen und von dort aus Mails verschicken können, wird das wahrscheinlich helfen. Dann können Sie Folgendes einrichten SPF-Einträge . Es gibt keine Garantien, aber das wird Sie auf jeden Fall ein wenig aus dem Dunstkreis der kommerziellen Spammer herausheben.

Du könntest auch etwas graben mit Linktext und einige der anderen Anti-Spam-Dienste und sehen Sie nach, ob Sie noch etwas falsch machen.

Kunden zu bitten, Ihre Absenderadresse in ihre Spam-Whitelist aufzunehmen, kann wahrscheinlich auch nicht schaden.

0 Stimmen

Danke! Ja, ich habe versucht, mir viele E-Mails zu schicken, und ich kann nicht herausfinden, wie ich meine Kopfzeilen verbessern kann ... bei mir funktioniert alles gut! Was die Spam-Filter bei Shared Hosts angeht, haben Sie wirklich Recht! Ihren Vorschlag, die Kunden zu bitten, meine Domain zu ihrer Liste sicherer Absender" hinzuzufügen, habe ich auf meiner Website geschrieben ... aber kein einziger Nutzer scheint diesem Vorschlag zu folgen! :-(

3voto

Inshallah Punkte 4686

Die Kopfzeilen Ihrer Nachricht sind nicht gültig gemäß RFC2822 Internet-Nachrichtenformat .

Ab 2.1 Allgemeine Beschreibung:

Nachrichten sind in Zeilen von Zeichen unterteilt. Eine Zeile ist eine Reihe von Zeichen, die durch die beiden Zeichen carriage-return und Zeilenvorschub begrenzt wird, d. h. das Wagenrücklaufzeichen (CR) (ASCII Wert 13), unmittelbar gefolgt von dem Zeilenvorschubzeichen (LF) (ASCII Wert 10). (Das Paar Carriage-Return/Zeilenvorschub wird normalerweise in diesem Dokument als "CRLF" geschrieben.)

Wie ich in meinen Kommentaren dargelegt habe, kann Ihre E-Mail bei den meisten Mailservern trotzdem funktionieren, weil sie bei der Annahme von E-Mails liberal sein können. Es kann jedoch einige Mailserver geben, die Ihre Nachrichten verwerfen, da sie nicht mit RFC2822 übereinstimmen.

EDIT: Obwohl die Verwendung von " \r\n " in der PHP-Dokumentation für die Funktion mail() empfohlen wird, gibt es einige Debatte darüber, ob das wirklich das Richtige ist .

Die Funktion mail() kommuniziert mit dem lokalen sendmail(8) Befehl (oder was auch immer in sendmail_path konfiguriert ist), und die Zeilenenden können unterschiedlich verarbeitet werden, je nachdem, welche Mail Transfer Agent-Implementierung verwendet wird. Soweit ich das verstanden habe, sendmail(8) sollte mit " OK sein \r\n "aber qmail(7) ersetzt zum Beispiel " \r\n " mit " \r\r\n ", was die Nachricht wahrscheinlich unterbrechen wird.

Dies alles geschieht, bevor die E-Mail an ihr endgültiges Ziel zugestellt wird. Man kann also leicht testen, ob die Zeilenenden richtig verarbeitet werden, indem man sich selbst eine E-Mail-Nachricht schickt, die mit " \r\n " und durch Überprüfung, ob alle Kopfzeilen vorhanden sind.

Siehe auch: RFC2822 , PHP-Funktion mail() , sendmail(8) , qmail(7)

0 Stimmen

Ich habe viel Erfolg beim Versenden von E-Mails mit einem korrekten SPF-Eintrag und mit PHP Mailer.

2voto

ceejayoz Punkte 170567

Ich habe festgestellt, dass die Einstellung Return-Path , Sender y Errors-To Kopfzeilen helfen in einigen Fällen.

0 Stimmen

Der Return-Path und der Sender sind eingerichtet! Aber ich hatte nicht daran gedacht, auch den Errors-to-Header zu setzen, also danke! ;-)

0voto

BitDrink Punkte 1175

Mir ist aufgefallen, dass ich bei meinem Linux-Hosting-Server sowohl in den zusätzlichen Headern als auch in den gemischten/alternativen Headern alle Vorkommen von CRLF durch LF ersetzen muss. Darüber hinaus ist die PHP-Dokumentation sagt:

"Wenn die Nachrichten nicht empfangen werden, versuchen Sie es mit einem LF ( \n ) nur. Einige minderwertige Unix-Mail-Transfer-Agents ersetzen LF automatisch durch CRLF (was zu einer Verdoppelung von CR führt, wenn CRLF verwendet wird). Dies sollte der letzte Ausweg sein, da es nicht mit "RFC 2822" übereinstimmt.

Ich habe versucht, eine Mail zu senden (nur mit " \n ") auf mein persönliches Konto und ich habe nach " \r " und " \n "in der Rohnachricht ... jede Zeile wird mit einem CR abgeschlossen und beginnt mit einem " \n "!

QUESTION: Wie in der PHP mail()-Dokumentation beschrieben, verwende ich die Funktion wordwrap(), um die Zeilenlänge auf 70 Zeichen zu reduzieren. Gibt es einen Workaround, damit der Mail-Client die Nachricht mit ihrer ursprünglichen Formatierung anzeigt und nicht als Spalte, in der jede Zeile nicht länger als 70 Zeichen ist?

ANTWORT [LÖSUNG]: Ich habe das Problem gelöst, indem ich quoted-printable als Content-Transfer-Encoding eingestellt habe:

$body .= "Content-Transfer-Encoding: quoted-printable\n";
$body .= "Content-Type: text/plain;\n\tcharset=utf-8;\n\tformat=flowed;\n\tdelsp=yes\n";

$body .= "\n" . quoted_printable_encode($message);

Die Funktion quoted_printable_encode() ist nur mit PHP 5.3 verfügbar, die Implementierung ist in der Dokumentationsseite .

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