I';我正在使用fputcsv()创建一个.csv文件,我想在PHPMailer中使用AddAttachment()自动发送它
我已经编辑了原帖,希望这更切题。我想删除由fputcsv()创建的.csv文件,并将其放入AddAttachment并发送。或者,如果您知道如何将创建的.csv文件发送到服务器上的目录,也可以。我认为最直接的问题是如何获取fputcsv()的结果并将其放入AddAttachments?我使用临时文件吗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
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';