PHP中的CSV附件
我试图发送一个CSV文件作为附件在PHP和使用邮件功能的附件。下面的代码工作正常。它成功地附加CSV文件并将其发送给收件人,但附加的输出文件(通过电子邮件发送)为文本格式(.txt)。我不知道我在哪里犯了错误,我需要在标题中更改什么以保留附件电子邮件中的原始CSV文件格式PHP中的CSV附件,php,Php,我试图发送一个CSV文件作为附件在PHP和使用邮件功能的附件。下面的代码工作正常。它成功地附加CSV文件并将其发送给收件人,但附加的输出文件(通过电子邮件发送)为文本格式(.txt)。我不知道我在哪里犯了错误,我需要在标题中更改什么以保留附件电子邮件中的原始CSV文件格式 $path ="/myhost/public_html/csv/"; $file_name = $path."Test"; $file_name.=".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>";
$path=“/myhost/public_html/csv/”;
$file_name=$path.“Test”;
$file_name.=“.csv”;
$from=”some@myemail.co.uk";
$to=”other@hisemail.co.uk";
$fat=$file\u name;
$subject=$_POST[subject];
//$message=$_POST[message];
//将\n替换为
$message=str\u replace(“\n”,“
”,$message);
//报告
echo“From:$From
”;
回声“到:$To
”;
回显“主题:$Subject
”;
//获取文件上载变量
$fileatt=$_文件[$fat]['tmp_名称'];
$fileatt_type=$_文件[$fat]['type'];
$fileatt_name=$_文件[$fat]['name'];
$headers=“From:$From\n”;
//如果($_文件['fileatt']['size']>0)
如果(文件_存在($fat)){
//读取要附加的文件('rb'=读取二进制文件)
$file=fopen($fat,'rb');
$data=fread($file,filesize($fat));
fclose($文件);
//生成边界字符串
$semi_rand=md5(time());
$mime_boundary=“==Multipart_boundary_x{$semi_rand}x”;
//添加文件附件的标题
$headers.=“MIME版本:1.0\n”。
“内容类型:多部分/混合;\n”。
“边界=\”{$mime\u boundary}\”;
//在消息上方添加多部分边界
$message=“这是MIME格式的多部分消息。\n\n”。
“{$mime\U边界}\n”。
“内容类型:text/html;字符集=\”iso-8859-1\“\n”。
“内容传输编码:7bit\n\n”。
$message。“\n\n”;
//Base64对文件数据进行编码
$data=chunk_split(base64_encode($data));
//向邮件添加文件附件
$message.=“--{$mime\u boundary}\n”。
“内容类型:{$fileatt_Type};\n”。
“name=\”{$fileatt\u name}\“\n”。
//“内容处置:附件;\n”。
//“filename=\”{$fileatt\u name}\“\n”。
“内容传输编码:base64\n\n”。
$data。“\n\n”。
“{$mime\u boundary}--\n”;
}否则回显“文件错误!”;
//寄信
如果(邮件($to,$subject,$message,$headers))回显“消息已发送!”;
否则回显“消息错误!”;
我只想在电子邮件附件中保留原始文件格式。请帮帮我
$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";
?我建议使用库来处理电子邮件附件。这类事情可能会很快变得复杂,其他人已经弄清楚了附加CSV文件时需要发生的所有细节。我会用像这样的东西 你可以完成上面所有的代码,或者更像
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'));
require_once'lib/swift_required.php';
$message=Swift\u message::newInstance()
->setSubject(“您的主题”)
->setFrom(数组('john@doe.com“=>”约翰·多伊“)
->设置为(数组('receiver@domain.org', 'other@domain.org“=>”一个名字“))
->setBody('这是消息本身')
->addPart('这是消息本身','文本/html')
->附件(Swift_Attachment::fromPath('my-document.csv');
示例来源:哇,这真的很方便!对我来说,工作起来容易多了,而且也是多才多艺的。谢谢。如果您使用了其中一种解决方案,请将其标记为答案。