2010-01-12 90 views
0

我得到的形式接受一個附件,發送附件,但如果它是一個文檔是空白:PHP郵件附件是空白

 
    $fileatt = $_FILES['file']['tmp_name']; 
    $fileattType = $_FILES['file']['type']; 
    $fileattName = $_FILES['file']['name']; 
    $file = fopen($fileatt,'rb'); 
    $data = fread($file,filesize($fileatt)); 
    fclose($file); 

    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

    $headers = "from: $email"; 

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

    $content = "Info about user"; 

    $content = "This is a multi-part message in MIME format.\n\n" . 
     "--{$mime_boundary}\n" . 
     "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
     "Content-Transfer-Encoding: 7bit\n\n" . 
     $content . "\n\n"; 

    $data = chunk_split(base64_encode($data)); 

    $content .= "--{$mime_boundary}\n" . 
     "Content-Type: {$fileattType};\n" . 
     " name=\"{$fileattName}\"\n" . 
     "Content-Disposition: attachment;\n" . 
     " filename=\"{$fileattName}\"\n" . 
     "Content-Transfer-Encoding: base64\n\n" . 
     $data . "\n\n" . 
     "--{$mime_boundary}--\n"; 

    $send = mail("[email protected]", "Form", $content, $headers); 
     if($send) 
      header('Location: success page'); 
     else 
      header('Location: fail page'); 

電子郵件正確地發送,沒有用正確的名稱,文件附件類型和文件大小。當它打開時它是空的。

我教程從sitepoint:http://articles.sitep ......郵件PHP/5

我測試了它們所提供的文件和同樣的事情發生。任何想法都會很棒。感謝大家!

+0

這不是PHPBB .....不要使用'[代碼]'標籤。 – 2010-01-12 22:15:54

+0

我在離線服務器上嘗試了我的代碼。我保持文件完全一樣我甚至離開了ini_set調用: ini_set(「SMTP」,「smtp.server.com」); ini_set(「smtp_port」,「25」); ini_set(「sendmail_from」,「$ email」); 導致我相信這個問題是PHP所在的Web服務器。有任何想法嗎? – dcp3450 2010-01-13 17:21:10

回答

2

歡迎來到SO。

這不是直接回答你的問題,但我會建議你使用現成的郵件類,如PHPMailer。它具有已經內置的所有怪癖,編碼和附加功能,這比手工更容易出錯。如果你想這樣,PHPMailer上的this collection of tutorial links可以幫助你開始。

+0

同意,只使用PHPMailer! – Eduardo 2010-01-12 22:21:18

+0

我在其他論壇上看到過有關郵件處理的多次提示。我會檢查出來的。 – dcp3450 2010-01-12 23:07:23

2

爲什麼不使用體面的圖書館來發送電子郵件?

我強烈建議您開始使用庫來發送電子郵件,它簡化了編寫電子郵件的過程,並使代碼更加短暫。

我可以爲Swiftmailer擔保,這是一個積極開發的具有卓越功能的圖書館。

特別複雜的任務,如附件,內聯圖像和多個收件人很容易實現。

+0

Swiftmailer的網站包含優秀的文檔,既實用又深入。圖書館的快速參考向您展示瞭如何創建消息:http://swiftmailer.org/docs/message-quickref 祝你好運! – 2010-01-12 22:26:21

+0

我需要將附件上傳到我的網絡服務器才能發送它? – dcp3450 2010-01-13 15:38:32

+0

是的,你永遠都是。 – 2010-01-13 19:47:17

2

我會強烈建議使用預先存在的工具發送電子郵件,如Swift。有很多警告,它會照顧你,它很容易使用。

1

也許你可以使用\r\n,而不是那些\n\n

+1

+1第一個DIRCET答案。這還不夠,但這是一個很好的起點,您必須使用「\ r \ n」而不是「\ n \ n」。 – 2010-08-16 11:57:55