PHP字符串附件-附加CSV从字符串到电子邮件


php string attachement - attach csv from a string to an email

我想重写下面的代码来生成一个字符串。我想把这个字符串附加到一封电子邮件上。它应该以csv文件的形式出现。

$fh = fopen($file,'w');
    function __outputCSV(&$vals, $key, $filehandler) {
        fputcsv($filehandler, $vals, ';', '"');
    }
   array_walk($aData, '__outputCSV', $fh);
   fclose($fh);

知道的吗?

最明显的偷懒方法是不重写它,而是简单地创建一个临时文件,然后在它上面调用file_get_contents()

然而,这会很无聊,所以我将建议一个有争议的过于复杂的方法,但它应该工作得很好,并且将完全在内存中完成:

使用PHP手册中提供的这个类作为如何编写自定义协议处理程序的示例,以及以下示例代码:

function __outputCSV(&$vals, $key, $filehandler) {
    fputcsv($filehandler, $vals, ';', '"');
}
stream_wrapper_register("var", "VariableStream");
$myCSVdata = "";
$fh = fopen('var://myCSVdata', 'w');
array_walk($aData, '__outputCSV', $fh);
fclose($fh);
echo $myCSVdata; // Ta Da!

最好的办法是获得一个MIME兼容的电子邮件类,它可以发送带有附件的电子邮件。我记得我以前用过RMail或者phpimemail,你需要谷歌一下。

否则,您将需要学习如何自己构建MIME邮件。但是,尽管这么多麻烦是值得的,我还是建议你去上一个已经为你做过的课程。

编辑:

我一开始没有理解你的问题,也许你应该完全重新格式化并更改标题。以下是我的建议:

$data = '';
foreach($aData as $aDataLine) {
    foreach($aDataLine as $aDataKey => $aDataField) {
        $aDataLine[$aDataKey] = '"'.str_replace('"', '''"', $aDataField).'"';
    }
    $data .= implode(',', $aDataLine)."'n";
}
//$data contains your CSV

我想我没有忘记任何东西,它应该是开箱运行的…