【问题标题】:How to save the attachments of a email in php?如何在php中保存电子邮件的附件?
【发布时间】:2011-09-08 08:51:13
【问题描述】:

我正在检索电子邮件,然后解析到数据库中。

但问题是我可以检索电子邮件,但附件部分也显示在浏览器上。我需要将此附件部分保存到某个位置。附件的格式是文本/纯文本。

这是我的代码

<?php
    $inbox=imap_open("{xyz.com:995/pop3/ssl/novalidate-cert}INBOX", "username", "password");
    $count = imap_num_msg($inbox);

    for($i = 1; $i <= 1; $i++) {
     $raw_body = imap_body($inbox, $i);
     echo $raw_body;
     imap_delete($inbox, 1);
    }
    imap_expunge ($inbox);
?>

我在这里检索了一封电子邮件

但我不知道如何保存附件。 当我使用imap_body 时,附件也会显示在电子邮件正文下方。

那么我应该如何将这两者分开..

【问题讨论】:

    标签: php email imap


    【解决方案1】:

    现在您知道如何从 Lars 回复的电子邮件源中提取附件。 我认为您可能还需要解码附件。 为此,您需要知道它是如何编码的。 1.base64_encode() 2.chunk_split()

    对文件进行编码的代码如下所示:

    <?php
    $body .= "--".$boundary1 . $this->line;
    $body .= "Content-Type: " . $file_type . "; name=\"" . $file_name . "\"" . $this->line;
    $body .= "Content-Transfer-Encoding: base64" . $this->line;
    $body .= "Content-Disposition: attachment; filename=\"" . $file_name . "\"; size=" . $file_size . ";" . $this->line;
    $body .= $this->line; // empty line
    
    $fp = fopen($file_url, 'r');
    do {
      $data = fread($fp, 8192);
      if (strlen($data) == 0) break;
      $content .= $data;
    }
    while (true);
    
    $body .= chunk_split(base64_encode($content));
    $body .= $this->line;
    $body .= $this->line;
    ?>
    

    结果是这样的:

    --ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
    Content-Type: text/plain; name="sample.txt"
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment; filename="sample.txt"; size=123;
    
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
    

    现在要对其进行解码,您需要再次反向执行 2 件事。 1.获取编码部分并剥离所有行,这样你就有一个单行字符串 2.解码 ..当然还有将文件保存到磁盘:)

    【讨论】:

      【解决方案2】:

      通过使用imap_fetchstructure() 分析邮件,您可以获得邮件不同部分的列表。使用imap_fetchstructure(),您实际上可以获取您感兴趣的部分。查看后面的文档以获取 cmets 中的示例代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2012-05-06
        • 1970-01-01
        • 2014-07-12
        • 2021-06-26
        • 2019-05-07
        相关资源
        最近更新 更多