PHP mail () не открывается в почте Mac - PullRequest
0 голосов
/ 14 сентября 2009

Я отправляю электронное письмо с помощью PHP mail (), и я могу успешно получить и открыть вложение (в данном случае PDF) почти в каждой программе, к которой у меня есть доступ. За исключением почты Mac, где мне говорят, что файл поврежден. Кто-нибудь еще сталкивался с этой проблемой раньше? Ниже приведен скрипт, который я использую:

//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 \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>"."\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.\n";

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

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

$message .= "Content-Type: application/octet-stream;\n";
$message .= " name=\"CTF-brochure.pdf\"" . "\n";
$message .= "Content-Transfer-Encoding: base64 \n";
$message .= "Content-Disposition: attachment;\n";
$message .= " filename=\"CTF_brochure.pdf\"\n";
$message .= "\n";
$message .= $fileContent;
$message .= "\n";
$message .= "--".$mime_boundary."--\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";

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 07 декабря 2010

, чтобы почта Mac не открывала вложение, убедитесь, что для его Content-Disposition установлено значение inline.

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

Понятия не имею, что там происходит, но я всегда удивляюсь, сколько людей пытаются развернуть свой собственный код построения почты.

Рассматривали ли вы просто использование библиотеки, такой как SwiftMailer или PHPMailer? Почти в любой ситуации вы получите лучшее форматирование, меньше головной боли и зачастую лучшую производительность.

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