【问题标题】:Generate csv file from form data on fly then email to address即时从表单数据生成 csv 文件,然后通过电子邮件发送到地址
【发布时间】:2011-03-04 11:34:36
【问题描述】:

我有一个用户可以填写的表单,并且希望能够生成一个 Excel 文件并使用表单中的数据填充它。然后我希望它通过电子邮件将包含完整数据的文件发送给我。如何做到这一点?

这正在生成电子邮件:

    $body = "You have a new member account application from the website, please see the details below:

\n
Membership Type: $group1_field\n\n

Contact Details\n
Organisation: $member_organ_field\n
Address: $member_address_field\n
Postcode: $member_post_field\n
Tel: $member_tel_field\n
Fax: $member_fax_field\n
Email address: $member_email_field\n
Website: $member_website_field\n\n
Contacts \n
Member 1 \n
Name: $member1_name1_field\n
Position: $member1_position1_field\n
Direct Email: $member1_email1_field\n
Direct Tel: $member1_tel1_field\n\n
Member 2 \n
Name: $member1_name2_field\n
Position: $member1_position2_field\n
Direct Email: $member1_email2_field\n\n
Member 3 \n
Name: $member1_name3_field\n
Position: $member1_position3_field\n
Direct Email: $member1_email3_field\n\n
Type Of Organisation: ".$checkbox1results."\n
Type Of Activity: ".$checkbox2results."$member3_other_field\n\n
Summary Description \n
$member_summary_field \n\n
Company Information \n
Total no. of employees (Welsh site): $member4_total_field\n
Turnover (from Welsh site): $member4_turnover_field\n
Date of company formation: $member4__formation\n
Do you export aborad? Where? $member4_export_field\n\n
Member consent: ".$checkbox3results."\n\n
Completed by: $member4_com_field\n
Company position: $member4_com_pos_field\n
Invoice required: $CheckboxGroup4_field\n\n

Please follow up this request asap.\n\n
";

mail($to, $subject, $body);

echo "Thank you for your account application, we will contact you shortly.";

} ?>

【问题讨论】:

    标签: php email forms


    【解决方案1】:

    最简单的方法是创建一个 Excel 可读的 csv。

    它本质上是一个逗号分隔的值列表。每行代表一行。 第一行可以是列标题,例如:

    $string = '"Organisation","Address","Postcode"' . PHP_EOL;
    $string .= "\"$member_organ_field\",\"$member_address_field\",\"$member_post_field\"" . PHP_EOL;
    
    file_put_contents('myfile.csv', $string); // write file
    

    请务必将字段名称和值引用为杂散的 unquoted ,(逗号)会弄乱您的列。

    否则,有一个PEAR library 用于写入 excel 文件。

    您可以使用built-in mail functionsee example here 将文件作为附件通过电子邮件发送

    或使用Swift Mailersee example here

    更新

    这是您需要的一般要点,代码可能不完美,请仔细阅读,不要复制和粘贴。

    <?php
    
    $random_hash = md5(date('r', time()));
    
    $csvString = "..."; // your entire csv as a string
    $attachment = chunk_split(base64_encode($csvString));
    
    $to = "to@me.com";
    $from = "from@you.com";
    $subject = "my subject";
    $body = "... what ever you want to appear in the body";
    
    $headers = "From: $from\r\nReply-To: $from";
    $headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
    
    $output = "
    --PHP-mixed-$random_hash;
    Content-Type: multipart/alternative; boundary='PHP-alt-$random_hash'
    --PHP-alt-$random_hash
    Content-Type: text/plain; charset='iso-8859-1'
    Content-Transfer-Encoding: 7bit
    
    $body
    
    --PHP-mixed-$random_hash
    Content-Type: text/csv; name=mycsv.csv
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment
    
    $attachment
    --PHP-mixed-$random_hash--";
    
    mail($to, $subject, $output, $headers);
    
    echo "Thank you for your account application, we will contact you shortly.";
    
    ?>
    

    【讨论】:

    • 是的,这正是我想要的,然后如何通过电子邮件将其发送到某个地址?
    • 使用您正在使用的任何电子邮件库,只需在将文件写入硬盘驱动器后将其作为附件添加即可。然后,您可以在发送完电子邮件后删除。
    • 使用内置的mail 函数可能会有点棘手。但可能有可能,只是谷歌它。虽然我会推荐 PEAR Mail 库或更好的 Swift Mailer,但请参阅此处的文档 (swiftmailer.org/docs/message-attachments)
    • 因此,您提供的代码加上 geekology 链接会将完成的表单数据以 csv 格式邮寄到一个地址?我现在就给它一个测试。
    • 它不仅没有附加文件,而且没有在电子邮件中输出任何内容。它是否试图从我的计算机附加文件?我希望它即时生成 csv 文件,然后附加并通过电子邮件发送。
    【解决方案2】:

    有两种选择:

    1. 根据上述数据创建 CSV 文件
    2. 根据以上数据创建 Excel 电子表格

    默认情况下,Windows 会将 CSV 文件与 Excel(如果已安装)相关联,因此大多数人会在 Excel 中打开 CSV(如果已安装)。

    对于每种情况,请在此处阅读:

    1. http://www.dreamincode.net/forums/topic/10131-working-with-excel-files-comma-delimited-or-csv/
    2. http://phpexcel.codeplex.com/

    还值得注意的是,如果您正在生成一个 .xls 文件,那么您的 PHP 将需要在安装了 Excel 副本的 Windows 上运行(我不建议这样做,如果您想使用 Excel 选项那么您可能需要考虑使用我链接到的 PHPExcel 工具创建 .xlsx 文件,这不需要安装 Excel 副本,因此可以部署在 Linux 上)

    编辑:要将文件作为附件通过电子邮件发送,您可以使用 PHPMailer(可以在 here 找到一个简单的示例,您可以下载课程 here

    【讨论】:

    • PHPExcel 还可以创建 BIFF8 .xls 文件以及较新的 Office Open Spreadsheet .xlsx 文件。
    • 是的,对不起...我的意思是最好使用 xlsx 文件扩展名,因为您不必依赖 COM 对象与 Excel 交互
    • csv 选项似乎是我想要的,它似乎将数据保存为 csv 文件并将其保存到服务器。我怎样才能将该文件通过电子邮件发送到某个地址?
    • 这篇站点文章解释了如何发送带有附件的电子邮件:articles.sitepoint.com/print/advanced-email-php(只需向下滚动到“文件附件”部分),但最好使用 PHP Mailer 等辅助类:@ 987654326@
    • 对不起,我不太擅长这些。每个人都给了我答案,这很好,但假设我对这个主题了解很多,我真的需要一些人来帮助我完成这一切以及要遵循哪些步骤。
    【解决方案3】:

    梨在这里可能很有用。我发现:Spreadsheet_Excel_Writer。它的基本文档和用法是here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 2017-01-30
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      相关资源
      最近更新 更多