2011-11-13 6 views
1

mail()の機能を使用して、画像ファイルの添付ファイルを自分宛に送信しているかどうかをテストしています。 スクリプトの問題は、電子メールを見ると、画像が存在するはずの乱数、文字、記号の長い壁があることです。PHPによるメールの添付ファイルが正しく届かない

PHPmailerはお勧めできません。また、メッセージ本文に画像タグを手動で入れてください。

私が使用しているメインのPHPファイル:

<? 

include('init.php'); 

if (isset($_POST['name'], $_FILES['file'])){ 

    $body = <<<BODY 
    From: {$_POST['name']} 

    Details: 
     Name: {$_FILES['file']['name']} 
     Size: {$_FILES['file']['size']} 
     Type: {$_FILES['file']['type']} 

BODY; 

mail_file('[email protected]','[email protected]','a file upload',$body,$_FILES['file']); 
} 

?> 

<form action="" method="POST" enctype="multipart/form-data"> 
    <input type="text" name="name" id="name"> 
    <input type="file" name="file" id="file"> 
    <input type="submit" value="Email File"> 
</form> 

init.php:

<? 

$path = dirname(__FILE__); 
include("{$path}/mail.php"); 

?> 

mail.php:送信される電子メールの

<? 

function mail_file($to, $from, $subject, $body, $file){ 
    $boundary = md5(rand()); 

    $headers = array(
     'MIME-Version: 1.0', 
     "Content-Type: multipart/mixed; boundary=\"{$boundary}\"", 
     "From: {$from}" 
    ); 

    $message = array(
     "--{$boundary}", 
     'Content-Type: text/html', 
     'Content-Transfer-Encoding: 7bit', 
     '', 
     chunk_split($body), 
     "--{$boundary}", 
     "Content-Type: {$file['type']}; name=\"{$file['name']}\"", 
     "Content-Disposition: attachment; name=\"{$file['name']}\"", 
     "Content-Transfer-Encoding: base64", 
     '', 
     chunk_split(base64_encode(file_get_contents($file['tmp_name']))), 
     "--{$boundary}--" 
    ); 

    mail($to, $subject, implode('\r\n', $message), implode('\r\n', $headers)); 
} 
?> 

例:

--4f8b4f63eb5fb4f1c3cde903c7e5b306\r\nContent-Type: text/html\r\nContent-Transfer-Encoding: 7bit\r\n\r\n From: asas 

Details: 
Name: 728x90-Brink-Banner-V2.jpg 
Size: 41583 

Type: image/jpeg 

\r\n--4f8b4f63eb5fb4f1c3cde903c7e5b306\r\nContent-Type: image/jpeg; name="728x90-Brink-Banner-V2.jpg"\r\nContent-Disposition: attachment; name="728x90-Brink-Banner-V2.jpg"\r\nContent-Transfer-Encoding: base64\r\n\r\n/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAUAAA/+4ADkFkb2JlAGTAAAAAAf/b 
AIQAAgICAgICAgICAgMCAgIDBAMCAgMEBQQEBAQEBQYFBQUFBQUGBgcHCAcHBgkJCgoJCQwMDAwM 
DAwMDAwMDAwMDAEDAwMFBAUJBgYJDQsJCw0PDg4ODg8PDAwMDAwPDwwMDAwMDA8MDAwMDAwMDAwM 
DAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAWgLYAwERAAIRAQMRAf/EAOgAAAAGAwEAAAAAAAAAAAAA 
AAMEBQYHCAECCQABAAAHAQEBAAAAAAAAAAAAAAABAgMEBQYHCAkQAAEDAgUBBgMDBAsHDA0NAQEC 



... 


L81/7CT7TfOuj+7T/wCxbf6cmeeXwouVG4P5we/F/E/yvzHTHMh6q9MNzUc7m/T5X4f4h6fP+6uF 
jIJbcyh7Z0b6/h/d6fbhYSHp7D+cIXk/RYHy/RU9P+y/j6sIk9VBmYV1+H+sf9B6Dz+b7cZufPat 
RB6oyV2LP+B/6NfhD8X8X7Ph34OPJMy+so95T/RGP/NzzD+bfxuuFyeoozf1ozUXWfoz+n/jJ/Rv 
P9n8XvxTvzWktcx8eSvxxR+Gn9P6p83k7Ov72JFl4VE1T1tngUtb2/mmd+H+iu/jfyD1xZyZKqhz 
VHdz/wA4H9F/Aa6/h/oKPxP+y+GKmX4eNXtuv//Z 
\r\n--4f8b4f63eb5fb4f1c3cde903c7e5b306-- 
+0

はあなたのコンテンツタイプが正しく送信されていることを確認しています:あなたはそれを変更し、4-charater文字列\r\nとして扱われ、単一引用符と新しい行を使用している

mail($to, $subject, implode('\r\n', $message), implode('\r\n', $headers)); 

? Thatsがデータダンプの理由かもしれません。 –

+0

また、ファイルサイズを送信する必要がある場合もあります。 –

+0

サンプルのメールソースを投稿できますか?コードはOKですが、おそらく 'mail()'が何かをかじっています。 –

答えて

3

問題はここにある:

mail($to, $subject, implode("\r\n", $message), implode("\r\n", $headers)); 
+0

と書かれています!あなたは素晴らしいです! – user701510

+0

私たちの最高のことが起こります。 –

関連する問題