簡體   English   中英

在PHP中使用IMAP()來獲取最近未讀的電子郵件數量

[英]Using IMAP () in PHP to get recent unread emails count

我想要不。 來自gmail帳戶的最近未讀郵件。為此,我在我的Ubuntu系統中安裝了IMAP並嘗試了一些PHP iMAP功能。 這是我到現在為止所嘗試的。

/* connect to gmail */
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'user@gmail.com';
$password = 'user_password';

/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' .    imap_last_error());

現在我說明我的所有嘗試。 注意 - 我已經通過向測試電子郵件ID發送新郵件嘗試了每次嘗試

Attempt_1:使用imap_search()

$recent_emails = imap_search($inbox,'RECENT');
if ($recent_emails)
   echo count($recent_emails);
else
   echo "false return";
imap_close($inbox);

現在Attempt_1的輸出是“錯誤返回”;

嘗試_2:使用imap_mailboxmsginfo()

$check = imap_mailboxmsginfo($inbox);
if ($check)
    echo "Recent: "   . $check->Recent  . "<br />\n" ;
else
    echo "imap_check() failed: " . imap_last_error() . "<br />\n";
imap_close($inbox);

這里的輸出是Recent:0,而我已經向這個id發送了2封新郵件

Attempt_3:使用imap_status()

$status = imap_status($inbox, $hostname, SA_ALL);
if ($status)
  echo "Recent:     " . $status->recent      . "<br />\n";
else
  echo "imap_status failed: " . imap_last_error() . "\n";

//輸出最近:0

Attempt_4:使用imap_search()再次使用參數NEW

$recent_emails = imap_search($inbox,'NEW');
if ($recent_emails)
   echo count($recent_emails);
else
   echo "false return";
imap_close($inbox);

輸出 - 錯誤返回

那我在哪里錯了? 如何獲取最近未讀的電子郵件?

這個功能似乎有效:

function CountUnreadMail($host, $login, $passwd) {
    $mbox = imap_open($host, $login, $passwd);
    $count = 0;
    if (!$mbox) {
        echo "Error";
    } else {
        $headers = imap_headers($mbox);
        foreach ($headers as $mail) {
            $flags = substr($mail, 0, 4);
            $isunr = (strpos($flags, "U") !== false);
            if ($isunr)
            $count++;
        }
    }

    imap_close($mbox);
    return $count;
}

用法:

$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'user@gmail.com';
$password = 'user_password';

$count = CountUnreadMail($hostname, $username, $password);

我無法為此功能申請全部功勞。 這是sdolgy對PHP的回答的略微編輯版本顯示未讀郵件數量 他的版本承擔了POP郵件。 此版本需要完整的$hostname 我使用自己的Gmail帳戶對其進行了測試,並正確報告了我收件箱中未讀郵件的數量。

PHP顯示未讀郵件數量有一些非常好的閱讀材料。 看看這個。

希望這可以幫助。

UPDATE

發件人: Gmail是否支持所有IMAP功能?

Gmail IMAP1是一個相當完整的IMAP實現,但目前不支持以下功能:

 \\Recent flags on messages. 

Verfied: Gmail的Buggy IMAP實施

Gmail無法處理標准IMAP標記,例如“\\ Deleted”,“\\已回答”和“\\ Recent”。

另請參閱: Jyoti Ranjan的答案 (如下)可能的解決方案。

我用數據庫解決了它,這就是我做到的。

1.我在users表中創建了一個列,例如'email_max_uid'INT(11)NOT NULL默認值為0

2.當用戶首先加載此頁面時,使用我的sql查詢我檢索到該特定用戶的'email_max_uid'的值3.自動連接到他的gmail帳戶並獲得未讀郵件和總郵件

$inbox = imap_open('{imap.gmail.com:993/imap/ssl}INBOX','user's email id','user's password') or die('Cannot connect to Gmail: ' . imap_last_error());
        $unread_emails = imap_search($inbox,'UNSEEN');
        $emails = imap_search($inbox,'ALL', SE_UID);

4.然后

if ('email_max_uid') = 0
        $recent_mails_count = count($unread_emails);
    else
        $recent_mails_count = max($emails) - Array['email_max_uid'];

5.顯示最近的郵件數量

echo count($recent_mails_count);

6.我已經設置了一個鏈接,使用戶登錄到他的Gmail帳戶而不詢問他的電子郵件ID和密碼當用戶登錄到他的帳戶時, email_max_uid is updated with count($emails)

  1. 現在再次當用戶訪問該頁面時,它遵循上述過程和他的號碼。 最近的電子郵件將顯示在頁面上。

*我的解決方案是用戶只能通過此應用程序登錄到他的Gmail帳戶,如果他從外部登錄他的帳戶,數據庫將不會更新,以便錯誤的不。 將顯示郵件計數。在我的問題情況下,用戶甚至不知道他公司提供的gmail id和密碼只看他們的郵件。 所以他無法從外面登錄他的帳戶。 這就是這個解決方案有效的原因。

這是我3天前解決的問題。請遲到回復

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM