0

次のようにその場で作成しているファイルがあります。

// Create and save the string on the file system
$str = "Business Plan: \nSome more text";
$fp = fopen("alex.txt", 'w+');
fwrite($fp, $str);

// email with the attachment
$to = 'alex.genadinik@gmail.com'; 
$subject = 'Your business plan attached';

//create a boundary string. It must be unique 
//so we use the MD5 algorithm to generate a random hash 
$random_hash = md5(date('r', time())); 
//define the headers we want passed. Note that they are separated with \r\n 
$headers = "From: BusinessPlanApp@example.com"; 
//add boundary string and mime type specification 
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\""; 
//read the atachment file contents into a string,
//encode it with MIME base64,
//and split it into smaller chunks
$attachment = chunk_split(base64_encode(file_get_contents('alex.txt')));

$contents = "some contents of the email";                   

mail($to, $subject, $contents, $headers);

ファイルはファイル システムに保存され、正しい本文​​と件名でメールが送信されます。

唯一の問題は、添付ファイルがゼロバイトの名前のないファイルであることです。なぜそれが起こるのでしょうか?権限の問題ですか?それとも私のメールに何か?

ありがとう!

4

2 に答える 2

3

MIME データを に入れています$attachmentが、その変数をどこにも使用しないので、実際には何も添付していません。

これを行うには、 PHPMailerSwiftmailerなどのライブラリを使用する方がよいでしょう。はるかに手間がかからず、トラブルが発生した場合にはるかに優れた診断を提供します.

于 2012-05-19T18:40:23.577 に答える
2

メール コードにいくつか不足しているようです。直し始めましたが、最初からやり直したほうがいいかもしれません。ライブラリをお勧めしますが、そうでない場合は、次のコードで目的が達成されるはずです。

// Create and save the string on the file system
$str = "Business Plan: \nSome more text";
$fp = fopen("alex.txt", 'w+');
fwrite($fp, $str);
fclose($fp);

// email fields: to, from, subject, and so on
$from = "BusinessPlanApp@example.com";
$to = 'alex.genadinik@gmail.com';
$subject = 'Your business plan attached';
$headers = "From: $from";

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

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

// message text
$contents = "This is the email content";

// multipart boundary
$message = "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
    "Content-Transfer-Encoding: 7bit\n\n" . $contents. "\n\n";

// preparing attachments
$message .= "--{$mime_boundary}\n";
$fp =    fopen('alex.txt',"rb");
$data =    fread($fp,filesize('alex.txt'));
fclose($fp);
$data = chunk_split(base64_encode($data));
$message .= "Content-Type: application/octet-stream; name=\"".basename('alex.txt')."\"\n" .
    "Content-Description: ".basename('alex.txt')."\n" .
    "Content-Disposition: attachment;\n" . " filename=\"".basename('alex.txt')."\"; size=".filesize('alex.txt').";\n" .
    "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
$message .= "--{$mime_boundary}--";
mail($to, $subject, $message, $headers);
于 2012-05-19T18:49:11.873 に答える