2011-07-11 755 views
4

我有一個非常簡單的網站表單,可以帶附件。它使用Gmail的smtp發送到Gmail地址。除非文件以「noname」形式出現 - 沒有文件名或擴展名,所有工作都很好。如果您下載附件並使用正確的文件名重命名該文件,該文件就會打開。使用Mail_Mime發送附件到GMail,收到「noname」附件

我試着給addAttachment()添加更多參數,比如文件類型和文件名,但是它們沒有出現在電子郵件中。當我在Gmail中點擊「顯示原始」,這是我在附件部分中看到(他們根本沒有改變,不管我用什麼樣的參數):

Content-Transfer-Encoding: base64 
Content-Type: application/octet-stream 
Content-Disposition: attachment 

下面是相關的部分我的代碼:

require_once 'Mail.php'; 
require_once 'mime.php'; 

$ToEmail = '***@***.com'; 
$EmailSubject = '*** contact form'; 
$Filename = basename($_FILES['uploaded_file']['name']); 

$host = "ssl://smtp.gmail.com"; 
$port = "465"; 
$username = "***@***.com"; 
$password = "***"; 

$MESSAGE_BODY = "Blah blah blah"; 

$Uploads_folder = "../uploads/"; 
$Filepath = $Uploads_folder.$Filename; 
$tmp_path = $_FILES["uploaded_file"]["tmp_name"]; 

if(is_uploaded_file($tmp_path)) { 
    if(!copy($tmp_path, $Filepath)) { 
     echo 'Sorry, there was an error in uploading the file. Please go back and try again.'; 
     exit(); 
    } 
} 

$headers = array ('From' => $username, 
    'To' => $ToEmail, 
    'Subject' => $EmailSubject); 

$mime = new Mail_mime(); 
$mime->setHTMLBody($MESSAGE_BODY); 
$mime->addAttachment($Filepath); 

$body = $mime->get(); 
$headers = $mime->headers($headers); 

$smtp = Mail::factory('smtp', 
    array ('host' => $host, 
     'port' => $port, 
     'auth' => true, 
     'username' => $username, 
     'password' => $password)); 

$mail = $smtp->send($ToEmail, $headers, $body); 

任何幫助,非常感謝!

回答

0

您是否試過在addAttachment()參數列表中添加Content-Type變量?例如,如果你知道用戶在上傳.pdf文檔,你會做以下幾點:

$Filepath = $Uploads_folder.$Filename; 
$content_type = "Application/pdf"; 
$mime->addAttachment($Filepath, $content_type); 
0

最近,我不得不實施的是通過我的一個Apache服務器從Android應用程序發送電子郵件的服務。

此服務器運行sendmail服務。

我測試了3個域。

  1. @ naver.com
  2. @ gmail.com
  3. @ does.kr

心中已經試了代碼,並意識到'邊界'頭事項這麼多。


我的第一個界限是什麼都沒有。

Content-Type: multipart/mixed; boundary=; 

我發送了帶有2個附加文件和標題的電子郵件。

電子郵件在did.kr和naver.com看起來很好。

但它沒有在gmail.com中。據我所知,我看到'noname'文件,這是自2007年以來尚未解決的問題。


我的第二個邊界是「---- = part56d7fa8d7a369」,由php的unique()構成。

Content-Type: multipart/mixed; boundary=----=part56d7fa8d7a369; 

我發送的電子郵件中除了標題以外都有相同的文件。

該電子郵件在did.kr和gmail.com中看起來很好。

但它沒有在naver.com。我在naver.com上只看到了標題。


唯一的區別是'邊界'和結果是完全不同的。

所以,我不得不分析我的代碼,根據電子郵件地址製作不同的「邊界」。

而且效果很好。