Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将邮件传送到PHP时提取附件_Php_Email_Piping - Fatal编程技术网

将邮件传送到PHP时提取附件

将邮件传送到PHP时提取附件,php,email,piping,Php,Email,Piping,我知道通过我的cPanel主机,我可以通过管道将电子邮件收件箱发送到脚本,但我想做的是: 寄往hi@hi.com 管道到mail.php php读取主题和.txt附件 主题和.txt附件的内容存储在数据库中 有没有一种方法可以直接使用PHP实现这一点?您可能需要执行以下操作: 编写一个可在CLI上执行的PHP脚本(通过在脚本顶部添加指向PHP二进制文件的#!声明,然后设置其可执行权限) 获取用于读取原始电子邮件的脚本php://stdin (文件获取内容最简单) 使用PEAR::mail::Mi

我知道通过我的cPanel主机,我可以通过管道将电子邮件收件箱发送到脚本,但我想做的是:

  • 寄往hi@hi.com
  • 管道到mail.php
  • php读取主题和.txt附件
  • 主题和.txt附件的内容存储在数据库中

  • 有没有一种方法可以直接使用PHP实现这一点?

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

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

  • 获取用于读取原始电子邮件的脚本php://stdin (文件获取内容最简单)

  • 使用PEAR::mail::Mime::decode或我认为有一个方便的Zend框架组件)将邮件解码成部分

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

  • 结束时退出(0),告诉CLI这是一个干净的退出-任何其他exit()状态都可能导致电子邮件被退回


  • 存在一个名为的PHP库,它本身取决于。安装了这些软件后,实现所需功能的代码非常简单:

    <?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();
    

    谢谢!我不熟悉可执行文件,所以需要研究它,你知道对我有用的链接吗:)保存和存储pdf文件需要什么样的更改?是否需要处理任何类型的加密或编码,或者只是将txt更改为pdf?我不建议将pdf文件的内容存储在数据库字段中。最好将它存储到文件系统,只存储路径。这就是我的意思,我想将附件保存为文件并存储位置。然而,我不确定如何处理它,因为我读过的其他“教程”或答案涉及某种base64解码。