在php网站上集成IMAP

时间:2015-09-02 04:48:37

标签: php email phpmyadmin imap gmail-imap

我试图在php的帮助下在我的网站上创建一个IMAP服务。它基本上没有什么步骤。

我想要的主要部分是我得到一个gmail帐户的文件夹列表,点击一个特定的文件夹,该文件夹中的邮件列表应该打开,点击任何特定的邮件,其详细信息应该是开放。

我有文件夹列表,我有一个邮件列表,我有邮件的详细信息,但它们是单独的部分,但我希望结合并创建一个如上所述的过程。

下面给出了3个步骤的代码

第1步 列出文件夹:它将列出gmail的所有文件夹。我的代码是

$folders = imap_list($imap, "{imap.gmail.com:993/imap/ssl}", "*");
echo "<ul>";
foreach ($folders as $folder) {
    $folder = str_replace("{imap.gmail.com:993/imap/ssl}", "", $folder);
     $folder = str_replace("[Gmail]/", "", $folder);
    echo '<li>' . $folder . '</li>';
}
echo "</ul>";

第1步o / p

INBOX
DRAFT
SENT
TRASH

第2步 列出电子邮件(点击文件夹邮件列表应该打开)

$numMessages = imap_num_msg($imap);

for ($i = $numMessages; $i > ($numMessages - 20); $i--)
    {
        $header = imap_header($imap, $i);
        $fromInfo = $header->from[0];
        $replyInfo = $header->reply_to[0];

        $details = array(
        "fromAddr" => (isset($fromInfo->mailbox) && isset($fromInfo->host))
            ? $fromInfo->mailbox . "@" . $fromInfo->host : "",
        "fromName" => (isset($fromInfo->personal))
            ? $fromInfo->personal : "",
        "replyAddr" => (isset($replyInfo->mailbox) && isset($replyInfo->host))
            ? $replyInfo->mailbox . "@" . $replyInfo->host : "",
        "replyName" => (isset($replyTo->personal))
            ? $replyto->personal : "",
        "subject" => (isset($header->subject))
            ? $header->subject : "",
        "udate" => (isset($header->udate))
            ? $header->udate : ""
        );

    $uid = imap_uid($imap, $i);

    $datee= gmdate("F j, Y, g:i a", $details["udate"] );

    echo "<ul>";
    echo "<li><strong>From:</strong>" . $details["fromName"];
    echo " " . $details["fromAddr"] . "</li>";
    echo "<li><strong>Subject:</strong> " . $details["subject"] . "</li>";
    echo "<li><strong>DATE:</strong> " . $datee . "</li>";

    } 

第2步的o / p(点击该邮件的特定邮件内容应该打开)

From:ABC
Subject: TOPIC
DATE: September 2, 2015, 9:00 am

第3步 查看邮件

$message_count = imap_num_msg($imap);

    for ($i = 1; $i <= $message_count; ++$i) {
        $header = imap_header($imap, $i);
        $body = trim(substr(imap_body($imap, $i), 0, 100));
        $prettydate = date("jS F Y", $header->udate);

        if (isset($header->from[0]->personal)) {
            $personal = $header->from[0]->personal;
        } else {
            $personal = $header->from[0]->mailbox;
        }

        $email = "$personal <{$header->from[0]->mailbox}@{$header->from[0]->host}>";
        echo "On $prettydate, $email said \"$body\".\n";
    }

任何人都可以告诉我如何达到上述要求

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。

一种方法是:

您可以考虑使用创建文件夹结构的超链接和消息列表中的项目,然后将javascript函数与这些超链接相关联

更改 echo '<li>' . $folder . '</li>';
echo '<li><a name="' . $folder . '" onClick="listFolder(this.name)" href="#">'. $folder . '</a></li>';将创建每个文件夹名称作为超链接,可以单击该超链接以触发javascript函数。

你必须编写javascript函数,例如。 listFolder()列出文件夹的内容。

答案 1 :(得分:0)

如果您想在每次选择后没有重新加载页面的情况下执行此操作,则必须使用AJAX请求。你需要:

1)一个普通页面,列出下拉列表中的可用文件夹。选择下拉列表中的文件夹将需要触发执行AJAX请求的Javascript函数。

2)然后,您需要处理来自步骤1)的AJAX请求,并返回包含所有可用消息的数据结构。再次使用JS在步骤1)中填充表或列表或同一页面上的任何内容。

3)最后,您需要将另一个Javascript方法附加到步骤2)中定义的消息,以向服务器发出另一个AJAX请求以返回单个消息内容,然后使用JS将其插入到消息窗格中步骤1)的页面。

如果您想轻松生成AJAX请求,我当然可以推荐JQuery - https://api.jquery.com/jquery.ajax/

其次,为了帮助PHP代码与IMAP服务器交互,我还强烈推荐Fetch库,它将帮助您避免代码中的许多陷阱和抽象复杂性。 https://github.com/tedious/Fetch