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

  1. 发送至hi@hi.com
  2. 管道到mail.php
  3. mail.php读取主题和.txt附件
  4. 主题和.txt附件的内容存储在数据库中
  5. 有没有办法用直接的PHP做到这一点?

有帮助吗?

解决方案

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

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

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

  3. 使用像PEAR :: Mail :: Mime :: Decode这样的东西来解码邮件到部分,或者我认为有一个方便的Zend Framework组件。

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

  5. 在结尾处退出(0)告诉CLI它是一个干净的退出 - 任何其他退出()状态都可能导致退回电子邮件。

其他提示

存在一个名为 php-mime-mail的PHP库-parser 本身取决于 PECL mailparse库。安装完毕后,实现目标的代码非常简单:

<?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 来读取文件。请参阅图书馆文档

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top