I';我正在使用fputcsv()创建一个.csv文件,我想在PHPMailer中使用AddAttachment()自动发送它

I';我正在使用fputcsv()创建一个.csv文件,我想在PHPMailer中使用AddAttachment()自动发送它,php,csv,phpmailer,Php,Csv,Phpmailer,我已经编辑了原帖,希望这更切题。我想删除由fputcsv()创建的.csv文件,并将其放入AddAttachment并发送。或者,如果您知道如何将创建的.csv文件发送到服务器上的目录,也可以。我认为最直接的问题是如何获取fputcsv()的结果并将其放入AddAttachments?我使用临时文件吗 header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="file.csv

我已经编辑了原帖,希望这更切题。我想删除由fputcsv()创建的.csv文件,并将其放入AddAttachment并发送。或者,如果您知道如何将创建的.csv文件发送到服务器上的目录,也可以。我认为最直接的问题是如何获取fputcsv()的结果并将其放入AddAttachments?我使用临时文件吗

header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="file.csv"');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');

        $csvoutput = fopen('php://output', 'w');
        $row = getRow($result3);
        $headers = array_keys($row);
        fputcsv($csvoutput, $headers);
            
               while ($row = getRow($result3)) {
    
                    fputcsv($csvoutput, $row);
    
                }

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host       = "smtp.website.com";
$mail->Port       = 587;
$mail->SMTPAuth   = true;
$mail->SMTPSecure = "tls";
$mail->Username   = $email_user;
$mail->Password   = $email_pass;
$mail->SetFrom("example@example.com", "Ex");
$mail->AddAddress("example@example.com", "Ex");
$mail->isHTML(true);
$mail->WordWrap = 50;
$mail->Subject    = "Example";
$mail->Body       = "Example";
$result = $mail->Send();



fclose($csvoutput);
exit;
如果我没有下载到页面,是否需要headers()

header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="file.csv"');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
此外,我知道这需要改变:

$csvoutput = fopen('php://output', 'w');

请尽可能详细,我不熟悉使用文件,我找不到具体的教程。

如果您希望合并所有三段代码,并使用PHP邮件发送附件,您可以使用以下代码:

if ($db->connect_error) {
    $error = $db->connect_error;
} else {
    $sql = "SELECT pick_city, pick_state, delivery_city, delivery_state, trailer_type, pick_date, load_type, length, weight, offering, special_instructions, contact_name, contact_phone FROM exampleTable WHERE urgency <> 'Booked' AND urgency <> 'Quote' AND urgency <> 'Hold'";
    $result3 = $db->query($sql);
    if ($db->error) {
        $error = $db->error;
    }
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment;filename=filename.csv');
    header('Cache-Control: no-cache, no-store, must-revalidate');
    header('Pragma: no-cache');
    header('Expires: 0');
    $csvoutput = fopen('php://output', 'w');
    $row = getRow($result3);
    $headers = array_keys($row);
    fputcsv($csvoutput, $headers);
    fputcsv($csvoutput, $row);
    while ($row = getRow($result3)) {
        fputcsv($csvoutput, $row);
    }
    if (!empty($_POST['submit_email'])){
        $message = $_POST['email'];
        $active_unique = $_POST['active_unique'];
        $hid_id = $_POST['hid_id'];
        $hid_email = $_POST['hid_email'];

        $mail = new PHPMailer();
        $mail->IsSMTP();
        $mail->Host       = "smtp.website.com";
        $mail->Port       = 587;
        $mail->SMTPAuth   = true;
        $mail->SMTPSecure = "tls";
        $mail->Username   = $email_user;
        $mail->Password   = $email_pass;
        $mail->SetFrom($email_user, ucfirst($company) . " Quote System");
        $mail->AddReplyTo($userEmail, $userSesh);
        $mail->AddAddress("example@example.com", "Name");
        $mail->AddBCC("example@example.com", "Name");
        $mail->AddStringAttachment(file_get_contents('php://output'));
        $mail->isHTML(true);
        $mail->WordWrap = 50;
        $mail->Subject    = "Please Review the Following Load";
        $mail->Body       = $message;

        $result = $mail->Send();
    }
    function getRow($result3) {
        return $result3->fetch_assoc();
    }
}
致:


你不能从我的书里读回来php://output. 将CSV保存到临时文件:

$filename = tempnam(sys_get_temp_dir(), 'my_script_');
$csvoutput = fopen($filename, 'w');
然后在AddAttachment()调用中引用该文件的路径:

或者,如果您不想弄乱临时文件,可以使用输出缓冲来捕获标准输出。(因为fputcsv()不能直接输出到字符串。)

更新:

你可能在做这样的事情:

$filename = tempnam(sys_get_temp_dir(), 'my_script.csv');
$filename = tempnam(sys_get_temp_dir(), 'my_script_') . '.csv';
这将为您提供
/tmp/my_script.csvPFj1Lw

您希望执行以下操作:

$filename = tempnam(sys_get_temp_dir(), 'my_script.csv');
$filename = tempnam(sys_get_temp_dir(), 'my_script_') . '.csv';
这将为您提供
/tmp/my_script\u H5GVJp.csv


您希望随机字符出现的原因是为了避免冲突,以防同时运行多个脚本实例。

我编辑了我的帖子,试图实现您所说的内容。这行不通<代码>添加附件仅适用于文件路径。如果要传入字符串,则需要使用
addStringAttachment
。我要将创建的excel.csv文件添加到附件中。我是否需要先将.csv文件发送到服务器,然后将其取出并使用AddAttachments?如果您想知道为什么有些东西不起作用,您的第一步应该是,而不是在此处发布。你会得到即时、准确的回答。这可能会引导您找到您应该使用的功能。我认为,从您的第一个建议来看,它已经接近正常工作了。它确实在.csv文件的末尾添加了一些奇怪的字符串,比如file.csvA2M5sS。我如何去掉A2M5sS部分?这很好,谢谢!我的情况是,我需要向另一家处理.csv文件的公司发送一个严格的文件名。例如,我需要将其作为file.csv而不是fileLZNuGN.csv发送。我会使用trim()还是str_replace来去除这些随机字符?不,只需调用
tempnam()
,然后使用类似
$filename=sys\u get\u temp\u dir()的内容即可/csv文件注意:但是,当多人同时请求文件时,这可能会导致出现问题。谢谢!很好!
$filename = tempnam(sys_get_temp_dir(), 'my_script.csv');
$filename = tempnam(sys_get_temp_dir(), 'my_script_') . '.csv';