PHP:发送邮件附件时,csv中删除了前缀0

问题描述

我正在向带有csv附件的客户端发送电子邮件。虽然我的实际文件中的前缀为0的数字很少。但是在邮件获取附件时,这些前缀将被删除。我不希望删除这些前缀。附件必须保持原样。

例如:
实际csv中的数字:002569854745
附加的csv中的数字:2569854745

这是我的代码

$myfile         = __DIR__."/$filename";
$file_size      = filesize($myfile);
$handle         = fopen($myfile,"r");
$content        = fread($handle,$file_size);
fclose($handle);
$multipartSep = '-----'.md5(time()).'-----';
$headers = array(
  "From: from@gmail.com","BCC: bcc@wcities.com","Content-Type: multipart/mixed; boundary=\"$multipartSep\""
);

$attachment = chunk_split(base64_encode($content));
$txt     = "test mail";
$body = "--$multipartSep\r\n"
. "Content-Type: text/plain; charset=ISO-8859-1; format=flowed\r\n"
. "Content-transfer-encoding: 7bit\r\n"
. "\r\n"
. "$txt\r\n"
. "--$multipartSep\r\n"
. "Content-Type: text/csv\r\n"
. "Content-transfer-encoding: base64\r\n"
. "Content-disposition: attachment; filename=\"$filename\"\r\n"
. "\r\n"
. "$attachment\r\n"
. "--$multipartSep--";

//mail function

解决方法

我怀疑您的CSV是否已被修改。我敢打赌,如果您检查了接收到的原始文件,则零都将正确存在。

问题将出在接下来发生的事情上。

如果在类似Excel的文件中打开带有前导零的CSV,它将把数字视为数字并删除前导零。如果要保留它们,则需要格式化每个值,例如"=""002569854745"""。参见this answer

Excel中的另一种选择是确保在导入CSV时,更改导入配置,以便将每个字段都视为文本,而不是使用其默认的“常规”格式,这种格式会应用这种自动转换。

如果您不使用Excel,而是使用其他工具,则需要了解如何覆盖这些解释为数字的字段。

您是否考虑过使用PHPMailer标记了这个问题?

我没有看到您检查文件内容的编码,也没有迹象表明您实际上正在执行实现format=flowed的必要步骤,尽管其中的一些可能与该问题有关。 / p>