php - 如何使用 IMAP 和 php 将邮件附件下载到特定文件夹

标签 php cron imap email-attachments

我正在开发一个网站,用户可以在其中邮寄票证并将任何类型的文件附加到特定的邮件 ID。我需要将邮件主题、内容和附件添加到数据库中。我正在使用 cron 执行此操作。除了附件外,一切都很完美。我看过一些创建下载链接的帖子。因为我使用的是 cron,所以我无法手动完成。

        $hostname = '{xxxx.net:143/novalidate-cert}INBOX';
        $username = 'yyy@xxxx.net';
        $password = 'zzzz';
        /* try to connect */
        $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to : ' . imap_last_error());
        $emails = imap_search($inbox,'ALL');

                if($emails) {
          $output = '';
          rsort($emails);
          foreach($emails as $email_number) {
            $structure = imap_fetchstructure($inbox, $email_number); 
            $name = $structure->parts[1]->dparameters[0]->value; // name of the file
            $type = $structure->parts[1]->type; //type of the file 
}}

我能够获取文件的类型和名称,但不知道如何进行下一步

请大家帮帮我。谢谢...

最佳答案

要将附件另存为文件,您需要解析消息的结构并单独取出所有属于附件的部分(内容处理)。你应该把它包装到它们自己的类中,这样你就可以轻松访问,并且随着时间的推移你可以更容易地处理错误,电子邮件解析可能很脆弱:

$savedir = __DIR__ . '/imap-dump/';

$inbox = new IMAPMailbox($hostname, $username, $password);
$emails = $inbox->search('ALL');
if ($emails) {
    rsort($emails);
    foreach ($emails as $email) {
        foreach ($email->getAttachments() as $attachment) {
            $savepath = $savedir . $attachment->getFilename();
            file_put_contents($savepath, $attachment);
        }
    }
}

这些类的代码或多或少包装了imap_... 函数,但是对于附件类,它也在做结构的解析。 You find the code on github .希望这对您有所帮助。

关于php - 如何使用 IMAP 和 php 将邮件附件下载到特定文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9974334/

相关文章:

php - Zend 从同一目录自动加载不同的命名空间?

python - 每天下午 5 点(东部标准时间)运行 cron 脚本

python - 在 docker 中运行 cron python 作业

linux - 用于本地开发/测试的 IMAP 服务器

go - 从 emersion/go-imap 获取原始消息

php - MySQL/SQL/PHP 语法错误

php - 从 Zend Framework 1 迁移到 Zend Framework 2

php - Laravel 错误 "Class ' App\Http\Controllers\DateTime' 未找到”

cron - 为什么这个 cron 条目会执行两次?

c# - MailKit 搜索 IMAP 电子邮件来自特定的 UID