2016-03-23 21 views
0

Bir pdf dosyası göndermek için basit bir işlevle bazı sorun yaşıyorum - e-posta gönderir ama açmaya çalıştığımda ek bozuk, bu yüzden benim fonksiyonum yapıyor Ters giden birşey mi var.PHP pdf eklentisi bozuk olmadan nasıl gönderilir

Herhangi bir yardım büyük memnuniyetle karşılanacaktır.

function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) { 

$file = $path.$filename; 

$file_size = filesize($file); 

$handle = fopen($file, "r"); 

$content = fread($handle, $file_size); 

fclose($handle); 

$content = chunk_split(base64_encode($content)); 

$uid = md5(uniqid(time())); 

$header = "From: ".$from_name." <".$from_mail.">\r\n"; 

$header .= "Reply-To: ".$replyto."\r\n"; 

$header .= "MIME-Version: 1.0\r\n"; 

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

$header .= "--".$uid."\r\n"; 

$header .= "Content-Type: application/octet-stream; name=\"attachment.pdf\"\r\n"; 

$header .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 

$header .= $message."\r\n\r\n"; 

$header .= "--".$uid."\r\n"; 

$header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; 

$header .= "Content-Transfer-Encoding: base64\r\n"; 

$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"; 

$header .= $content."\r\n\r\n"; 

$header .= "--".$uid."--"; 






wp_mail($mailto, $subject, $message, $header); 


} 
+0

yok kendi mime e-postalarınızı oluşturun. phpmailer ve swiftmailer gibi uygun bir posta paketi kullanın. Bu kodun tamamını TÜM tek bir '$ mail-> AddAttachment (...)' -type çağrısına indirgeyecek. ve bu soruyu phpmailer ile etiketlediğinizden - neden kullanmıyorsunuz? –

cevap

1

E-posta başlıklarınız biraz kapalı.

Content-Transfer-Encoding: binary 
Content-Type: multipart/mixed; boundary="_----------=_1458761739257530" 
MIME-Version: 1.0 
Date: xxxxx 
From: xxxxx 
To: xxxxx 
Reply-To: xxxx 
Subject: xxxx 

This is a multi-part message in MIME format. 

--_----------=_1458761739257530 
Content-Disposition: inline 
Content-Transfer-Encoding: 8bit 
Content-Type: text/plain 

This is the plain-text part of my message 
That's all. 

--_----------=_1458761739257530 
Content-Disposition: attachment; filename="myfile.pdf" 
Content-Transfer-Encoding: base64 
Content-Type: application/octet-stream; name="myfile.pdf" 

<base64 content here> 

--_----------=_1458761739257530-- 

Ama gerçekten, sen üreten edilmemelidir başlıklar bir gibi kendi senin - karışıklık o kadar için birçok yol vardır: Uygun bir çok parçalı mesajı şöyle görünürdü. Bunun yerine, MIME başlıklarını oluşturacak, kodlamayı yapacak ve e-postayı sizin için halledebilecek mevcut PHP kitaplıklarını kullanın. Örneğin

, dağıtım çok muhtemeldir ARMUT modüllerini "Posta" ve "Mail_Mime" içerir, yoksa

Sonra böyle bir şey yapmak pear install Mail Mail_Mime ile kolayca yükleyebilirsiniz:

function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) { 

    require_once('Mail.php'); 
    require_once('Mail/mime.php'); 

    $file = $path.$filename; 

    $headers = array (
     'From'  => $from_mail, 
     'To'  => $mailto, 
     'Reply-To' => $replyto, 
     'Subject' => $subject, 
    ); 

    $mime = new Mail_mime(array('eol' => "\n")); 

    $mime->SetTXTBody($message); 
    $mime->addAttachment($file, 'application/octet-stream'); 

    $mime_body = $mime->get(); 
    $mime_headers = $mime->headers($headers); 

    $mail =& Mail::factory('mail'); 
    $mail->send($mailto, $mime_headers, $mime_body); 

    if (PEAR::isError($mail)) { 
     echo("<p>ERROR:" . $mail->getMessage() . "</p>\n"); 
    } else { 
     echo("<p>Message successfully sent!</p>\n"); 
    } 
} 
İlgili konular