我正在检索电子邮件,然后解析到数据库中。
但问题是我能够检索电子邮件,但附件部分也会显示在浏览器上。我需要将此附件部分保存到某个位置。附件的格式为text / plain。
这是我的代码
<?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
时,附件也显示在电子邮件正文下方。
那么我应该如何分开这两个......
答案 0 :(得分: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==
现在解码它你需要反过来做两件事。 1.获取编码部分并去除所有行,这样就有一个单行字符串 解码它 ..当然将文件保存到磁盘:)
答案 1 :(得分:0)
通过使用imap_fetchstructure()分析邮件,您可以获得邮件不同部分的列表。使用imap_fetchstructure(),您实际上会对您感兴趣。在评论中查看后面的文档以获取示例代码。