В PHP mail () источник сообщения отображается в виде основного текста. - PullRequest
0 голосов
/ 14 сентября 2009

Я продолжаю бороться с этой настройкой электронной почты.Приведенный ниже код работает на моем сервере, но на сервере клиента он отображает источник сообщения (из ответа на) в качестве тела сообщения.Сервер, на котором он находится, является сервером plesk.Кто-нибудь может мне с этим помочь?Я уверен, что это проблема с заголовком, потому что если я уберу ответ на заголовок, он будет отображаться правильно в hotmail и googlemail, но не в обычных учетных записях электронной почты.Заранее благодарен за вашу помощь.

ОБНОВЛЕНИЕ

Он хорошо отображается в моей учетной записи электронной почты, используя thunderbird, но мой босс, использующий macmail, по-прежнему получает только строки исходного кода.мы оба используем один и тот же сервер для наших электронных писем.

ВТОРОЕ ОБНОВЛЕНИЕ

Теперь он работает во всем, к чему у меня есть доступ, кроме macmail.Файл просто не открывается, говоря, что он поврежден или не распознан.Есть идеи?

//define the receiver of the email
$to = 'bionic.comms@hotmail.com';
//define the subject of the email
$subject = 'Email with Attachment';
//create a boundary string. It must be unique
//so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time()));
//define the headers we want passed. Note that they are separated with \r\n
$mime_boundary = "<<<--==+X[".md5(time())."]";

$path = $_SERVER['DOCUMENT_ROOT'].'/two/php/';
$fileContent =  chunk_split(base64_encode(file_get_contents($path.'CTF_brochure.pdf')));


$headers .= "From: info@poundsandpennies.org.uk <info@poundsandpennies.org.uk>"."\r\n";

$headers .= "MIME-Version: 1.0\n" .
            "Content-Type: multipart/mixed;\n" .
            " boundary=\"{$mime_boundary}\"";   

$message = "This is a multi-part message in MIME format.\r\n";

$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";

$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n";
$message .= "\r\n";
$message .= "Email content and what not: \r\n";
$message .= "This is the file you asked for! \r\n";
$message .= "--".$mime_boundary."" . "\r\n";

$message .= "Content-Type: application/octet-stream;\r\n";
$message .= " name=\"CTF-brochure.pdf\"" . "\r\n";
$message .= "Content-Transfer-Encoding: base64 \r\n";
$message .= "Content-Disposition: attachment;\r\n";
$message .= " filename=\"CTF_brochure.pdf\"\r\n";
$message .= "\r\n";
$message .= $fileContent;
$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";

//send the email
$mail_sent = mail($to, $subject, $message, $headers);
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed";

1 Ответ

2 голосов
/ 14 сентября 2009

У них, вероятно, есть почтовый сервер, который ожидает "\ n" как конец строки. Ужасно, но это случается!

Вы также пропускаете "-" из конечной границы MIME:

$message .= "--".$mime_boundary."--\r\n";

//send the email
$mail_sent = mail($to, $subject, $message, $headers);

Обычное примечание об использовании библиотеки вместо написания вашей собственной ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...