2009-09-14 3 views
0

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

//define the receiver of the email 
$to = '[email protected]'; 
//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: [email protected] <[email protected]>"."\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"; 

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

+0

Я замечаю, что теперь вы отделяете свои сообщения электронной почты и mime только одним «\ n», который был другим в вашем последнем вопросе. Вы пытались сделать один «\ n» для заголовков электронной почты, но «\ r \ n» для заголовков mime? – Inshallah

+0

спасибо за предложение, но он просто ломается, если я это сделаю. – Drew

ответ

-1

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

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

+0

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

0

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