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

PHP: prefix 0 is removed from csv while sending in mail attachment

我正在向客户发送一封带有 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,尽管这些都不太可能解决这个问题.