Hosting gönderilen e-postalar, engelledi.

6 Cevap php

in my website i've a PHP script that automatically mails to my customers a confirmation about the order. My website's domain is registered to a company that hosts my website too. I have a lot of problems to send e-mails using mail() function to some e-mails accounts ... a lot of my users contact me saying that they have never received my automatic e-mail! So this is a very big problem!

Bana daha fazla sorun vermek hesapları, comcast.net, uol.com, mchsi.com ve diğerleri! Ben de blok listeden benim ip kaldırılması için soran bu e-posta servis sağlayıcıları destek merkezini temas ettik.

E-postanın başlık bu gibi görünüyor:

$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");

There is something that I can try to avoid this problem? Someone knows where can I look to know what is the IP address of the server used to deliver e-mails thought the PHP mail() function?

Cevaplar için şimdiden teşekkür ederiz!


Merhaba,

Hala bugün gibi Comcast bazı e-posta sağlayıcısı hizmeti, ben blok listesine çıkarılması istenen ... benim posta sunucusu spamları gönderir söyleyerek benim IP'ler adreslerini engellemeye devam, ama onların sistem onları engellemek devam ediyor! Ben sizin önerilerinizi ve bu gibi kod görünümünü takip ettik ... Ben başka ne yapabilirim bilmiyorum:

$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");

Önerileriniz?

Tekrar teşekkürler!

6 Cevap

Mesajınız başlıkları RFC2822 Internet Message Format göre geçerli değildir.

2.1 Genel Açıklama Gönderen:

Messages are divided into lines of characters. A line is a series of characters that is delimited with the two characters carriage-return and line-feed; that is, the carriage return (CR) character (ASCII value 13) followed immediately by the line feed (LF) character (ASCII value 10). (The carriage-return/line-feed pair is usually written in this document as "CRLF".)

Ben yorumlarında belirttiği gibi, e-posta en posta sunucuları ile çalışabilir nedeni zaten onlar kabul ne liberal olabilir olmasıdır. Onlar RFC2822 uymayan beri iletiler atmak olacağını, ancak, bazı mail sunucuları olabilir.

EDIT: "\ r \ n" kullanımı mail () fonksiyonu için PHP belgelerinde savunmalarına rağmen, bazı debate about whether that's really the right thing to do var.

Mail () fonksiyonu yerel sendmail(8) komutuyla (veya herneyse sendmail_path yapılandırılmış) ile iletişim kuracak, ve satır sonları transfer ajanı uygulaması kullanılır ne posta bağlı olarak farklı işlenebilir. Anladığım kadarıyla, sendmail(8) "\ r \ n" Tamam olmalı, ama qmail(7), örneğin "\ r \ n" ile "\ r \ r \ n" yerini alacak , ki bu muhtemelen mesajı kıracak.

Bu, tüm e-posta nihai hedefe teslim edilmeden önce olur, bu nedenle kolayca satır sonları kişinin kendini "\ r \ n" ile yapılmış bir e-posta mesajı göndererek ve tüm başlıkları mevcut olduğunu doğrulayarak düzgün işlenmiş olup olmadığını test edilebilir.

Ayrıca bkz: RFC2822, PHP mail() function, sendmail(8), qmail(7)

Kendinize bir e-posta göndermek ve başlıkları kontrol edebilir. Bu size bir e-posta alabilir yolun bir fikir verecektir, ancak farklı bir yol geçiyor bu diğer etki alanlarına e-postaları engelleyen bir şey gerçekten var.

Genel olarak bu büyük ISS gerçekten ağır spam filtreleri var, bu yüzden paylaşılan bir bilgisayar kendilerine posta zor olacak. Kendi IP adresini almak ve oradan posta gönderebilirsiniz eğer, muhtemelen yardımcı olacaktır. Sonra kurmak SPF records. Olabilir Hiçbir garanti, ama bu kesinlikle ticari spam biraz çukurun dışarı yükseltmek olacaktır.

Ayrıca link text ve diğer anti-spam servisleri bazı bazı kazı yapmak ve yanlış başka bir şey yapıyoruz görebiliyordu.

Onların spam beyaz listeye adresten eklemek için müşterilerine soran muhtemelen ya incitmez.

Let me explain the battle you are facing. Forget about the technical details for a minute. There are hundreds of email providers out there. The big ones are Yahoo, Gmail, AOL, Hotmail, etc. If you are blocked on anyone of these services your business could be severely affected.

Bu e-posta sağlayıcıları ile ilgili spam ve istenmeyen spam olabilecek herhangi bir mesaj engelleme aşırı gitmiş mücadele için son derece endişe duyuyorlar. Sen spam şikayetleri asla olabilir ama başka bir iş, paylaşılan barındırma planı üzerinde, spam şikayet alırsa gerçekleştirilecektir. Eğer iletiler spam klasörüne gönderilecektir adresi bir şüpheli istenmeyen IP üzerinde eğer sizin uygulamayı yapılandırmak ne kadar önemli değildir.

Kendi sunucu olsa bile hala sorunlar var olacaktır. Zamanla size e-postaları bazı alıcılar göndermek eğer istenmeyen düğmesine vuracaktır. Bu hayatın bir gerçeği olduğunu ve bunu önlemek için yapabileceğiniz bir şey yok.

The only solution is to outsource you email delivery. Companies like Aweber or iContact deal with email delivery issues for you. They have relationships with all major email providers and work hard to ensure that your messages get into the recipients inbox. You no longer have to worry about contacting Yahoo or Gmail because someone hit the spam button. You can focus on more important things.

I Return-Path, Sender ayarı, ve Errors-To başlıkları bazı durumlarda yardımcı olduğunu tespit ettik.

PHPMailer kullanın (http://phpmailer.worxware.com/) e-posta iletileri oluşturmak için. Belki IP değil, ama başka bir şey. Spamfilter (Message-ID vb eksik gibi) alerjik tepki şeylerin bir yeri vardır. Artı PHPMailer ile) (posta yoluyla postalar göndermek için fırsat var ya bunun nedeni (Gmail gibi) başka bir konak üzerinde SMTP üzerinden paylaşılan-hosting-sorunlarına işi dont't eğer.

Benim Linux sunucu barındırma, ben ekstra başlıkları ve alternatif / karma başlıklarında hem LF CRLF tüm tekrarlarını değiştirmek zorunda olduğunu fark ettik. Bu konuda PHP documentation diyor ki:

"If messages are not received, try using a LF (\n) only. Some poor quality Unix mail transfer agents replace LF by CRLF automatically (which leads to doubling CR if CRLF is used). This should be a last resort, as it does not comply with » RFC 2822."

Benim kişisel hesabına (sadece "\ n" ile) bir posta göndermek için denedim ve ben ... Her satırı, CR ile sonlandırılır ham mesajında ​​"\ r" ve "\ n" için baktım ettik ve Bir "\ n" ile başladı!

QUESTION: As the PHP mail() documentation says, I use the function wordwrap() to cut the line length to 70 characters. There is a workaround to let the mail client to display the message with its original formatting and not as a column where each line isn't longer than 70 chars?

ANSWER [SOLUTION]: Ben kurma çözdük quoted-printable Content-Transfer-Encoding olarak:

$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);

Quoted_printable_encode () işlevi sadece PHP 5.3 ile uygulama documentation page uygundur mevcuttur.