我知道我的cPanel托管我可以将电子邮件收件箱发送到脚本,但我想要做的是:
有没有办法用直接的PHP做到这一点?
存在一个PHP库,调用php-mime-mail-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();
Run Code Online (Sandbox Code Playgroud)
您可以将邮件通过管道传输到脚本中STDIN.您还可以通过更改setStream为从文件中读取setPath.请参阅库的文档.
您可能需要执行以下操作:
编写一个可在CLI上执行的PHP脚本(在脚本顶部添加一个#!声明,指向PHP二进制文件,然后设置其可执行权限).
获取该脚本以从php:// stdin读取原始电子邮件(file_get_contents最简单)
获取该脚本以使用像PEAR :: Mail :: Mime :: Decode之类的东西解码邮件到部件,或者我认为有一个方便的Zend Framework组件.
从解码的消息中读取附件和主题,并正常存储
最后退出(0)告诉CLI它是一个干净的退出 - 任何其他退出()状态可能会导致退回电子邮件.
| 归档时间: |
|
| 查看次数: |
1807 次 |
| 最近记录: |