2011-07-11 59 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

引数リストに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 I'vテストいくつかのコードと '境界'ヘッダがそんなに重要なことに気づきました。


私の最初の境界は何もありませんでした。

Content-Type: multipart/mixed; boundary=; 

私は2つの添付ファイルとそのヘッダーで電子メールを送信しました。

does.keとnaver.comのメールはうまく見えました。

しかし、それはgmail.comにはありませんでした。私は'noname'ファイルを見ましたが、それは2007年以来私が知る限り解決されていない問題です。


私の第2の境界は、PHPの)(ユニークで作られた、 "---- = part56d7fa8d7a369" でした。

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

ヘッダーを除いて同じファイルでメールを送信しました。

does.jpとgmail.comで電子メールが正常に見えました。

しかし、それはnaver.comにはありませんでした。私はnaver.comのタイトル以外何も見ませんでした。


唯一の違いは「境界」であり、その結果は全く異なっていました。

私は電子メールアドレスに応じて異なる '境界'を作るためにコードを分けなければなりませんでした。

これは素晴らしい結果でした。

関連する問題