0

PHPでCSVファイルを添付ファイルとして送信しようとしており、添付ファイルにメール機能を使用しています。次のコードは正常に動作します。CSV ファイルを正常に添付して受信者に送信しますが、ATTACHED 出力ファイル (電子メールで送信) はテキスト形式 (.txt) になります。どこで間違いを犯しているのか、添付された電子メールで元の CSV ファイル形式を保持するためにヘッダーで何を変更する必要があるのか​​ わかりません。

        $path ="/myhost/public_html/csv/"; 
        $file_name = $path."Test";
        $file_name.=".csv";
        $from     = "some@myemail.co.uk";
        $to       = "other@hisemail.co.uk";
        $fat=$file_name;
        $subject  = $_POST[subject];
        //   $message  = $_POST[message];
        //replace \n with <br>
        $message = str_replace("\n", "<br>",$message);
        //report
        echo "<b><font color=#8080FF> From: $from </b><br>";
        echo "<b>To: $to </b><br>";
        echo "<b>Subject: $subject</b><br><br></font>";
        // Obtain file upload variables
        $fileatt      = $_FILES[$fat]['tmp_name'];
        $fileatt_type = $_FILES[$fat]['type'];
        $fileatt_name = $_FILES[$fat]['name'];

        $headers = "From: $from  \n";


        // if($_FILES['fileatt']['size'] > 0)
        if (file_exists($fat)) {
           // Read the file to be attached ('rb' = read binary)
           $file = fopen($fat,'rb');
           $data = fread($file,filesize($fat));
           fclose($file);
           // Generate a boundary string
           $semi_rand = md5(time());
           $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
           // Add the headers for a file attachment
           $headers .= "MIME-Version: 1.0\n" .
                    "Content-Type: multipart/mixed;\n" .
                    " boundary=\"{$mime_boundary}\"";
           // Add a multipart boundary above the  message
           $message = "This is a multi-part message in MIME format.\n\n" .
           "--{$mime_boundary}\n" .
           "Content-Type: text/html; charset=\"iso-8859-1\"\n" .
           "Content-Transfer-Encoding: 7bit\n\n" .
           $message . "\n\n";

           // Base64 encode the file data
           $data = chunk_split(base64_encode($data));
           // Add file attachment to the message
           $message .= "--{$mime_boundary}\n" .
           "Content-Type: {$fileatt_type};\n" .
           " name=\"{$fileatt_name}\"\n" .
           //"Content-Disposition: attachment;\n" .
           //" filename=\"{$fileatt_name}\"\n" .
           "Content-Transfer-Encoding: base64\n\n" .
           $data . "\n\n" .
           "--{$mime_boundary}--\n";
        } else echo "File error!  ";

        //send the mail
        if(mail($to, $subject, $message,$headers))echo "<b><font color=#FF0000>Message was sent!<b></font>";
        else echo "<b><font color=#FF0000>Message error!<b></font>";

メールの添付ファイルに元のファイル形式を保持したいだけです。お願い助けて。

4

2 に答える 2

1

ライブラリを使用して電子メールの添付ファイルを処理することをお勧めします。この種のことはすぐに複雑になる可能性があり、他の誰かが、CSV ファイルが添付されたときに何が起こる必要があるかについて、すべての内外をすでに把握しています。http://swiftmailer.org/のようなものを使用します

上記のすべてのコード、またはもっと似たようなことを行うことができます...

require_once 'lib/swift_required.php';

$message = Swift_Message::newInstance()
  ->setSubject('Your subject')
  ->setFrom(array('john@doe.com' => 'John Doe'))
  ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))
  ->setBody('Here is the message itself')
  ->addPart('<q>Here is the message itself</q>', 'text/html')
  ->attach(Swift_Attachment::fromPath('my-document.csv'));

例: http://swiftmailer.org/docs/messages.html

于 2012-10-05T12:46:35.480 に答える
0
$header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
$header .= "Content-Transfer-Encoding: base64\r\n";
$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";

これは役に立ちますか?

于 2012-10-05T12:45:11.587 に答える