【问题标题】:Extract attachments when piping mails to PHP将邮件传送到 PHP 时提取附件
【发布时间】:2009-10-26 10:40:29
【问题描述】:

我知道通过我的 cPanel 托管,我可以将电子邮件收件箱通过管道传输到脚本,但我想做的是:

  1. 发送至hi@hi.com
  2. 到 mail.php 的管道
  3. mail.php 读取主题,以及一个 .txt 附件
  4. 主题和.txt附件的内容存储在数据库中

有没有办法用简单的 PHP 做到这一点?

【问题讨论】:

    标签: php email piping


    【解决方案1】:

    存在一个名为php-mime-mail-parser 的PHP 库,它本身依赖于PECL mailparse library。当你安装了这些之后,实现你想要的代码就很简单了:

    <?php
    require_once 'MimeMailParser.class.php';
    
    $parser = new MimeMailParser();
    $parser->setStream(STDIN);
    
    $subject = $parser->getHeader('subject');
    
    $attachment_content = false;
    foreach ($parser->getAttachments() as $attachment) {
        $extension = pathinfo($attachment->filename, PATHINFO_EXTENSION);
        if ($extension == "txt") {
            $attachment_content = $attachment->content;
            break;
        }
    }
    
    // adapt to what ever database you are using
    $sth = $mysqli->prepare("INSERT INTO mails (subject, attachment) VALUES (:subject, :attachment)");
    $sth->bindParam(':subject', $subject, PDO::PARAM_STR);
    $sth->bindParam(':attachment', $attachment_content, PDO::PARAM_STR);
    $sth->execute();
    

    您可以将邮件通过管道传输到脚本中,因为它从STDIN 读取。您还可以通过将setStream 更改为setPath 来读取文件。请参阅documentation of the library

    【讨论】:

    • 保存和存储 pdf 文件需要进行哪些更改?是否需要处理任何类型的加密或编码,或者只是将 txt 更改为 pdf?
    • 我不建议将 PDF 文件的内容存储在数据库字段中。最好将其存储到文件系统并仅存储路径。
    • 这就是我的意思,我想将附件保存为文件并存储位置。但是我不确定如何处理它,因为我读过的其他“教程”或答案指的是某种 base64 解码。
    【解决方案2】:

    您可能需要执行以下操作:

    1. 编写一个可在 CLI 中执行的 PHP 脚本(通过在指向 PHP 二进制文件的脚本顶部添加 #! 声明,然后设置其可执行权限)。

    2. 获取该脚本以从 php://stdin 读取原始电子邮件(file_get_contents 最简单)

    3. 使用 PEAR::Mail::Mime::Decode 之类的工具获取该脚本以将邮件解码为多个部分,或者我认为有一个方便的 Zend Framework 组件。

    4. 从解码后的邮件中读取附件和主题,并正常存储

    5. exit(0) 最后告诉 CLI 这是一个干净的退出 - 任何其他 exit() 状态都可能导致退回电子邮件。

    【讨论】:

    • 谢谢!我是可执行文件的新手,所以需要研究一下,你知道任何可能对我有用的链接吗:)
    猜你喜欢
    • 1970-01-01
    • 2012-09-28
    • 2011-03-24
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多