【问题标题】:Check for unread mail in php在php中检查未读邮件
【发布时间】:2011-07-07 13:30:07
【问题描述】:

我正在尝试对我的页面实施检查新邮件功能。 我的意思是一个检查邮件的脚本,如果存在未读邮件,它将通知用户“您收到一封未读邮件”。

这可能吗?

提前致谢

只要用户的电子邮件和密码以纯文本形式存储在数据库中,我就设法让它工作。

我正在使用查询从我的数据库 ($email) 和 ($password) 中检索用户的电子邮件和密码

代码:

$mbox = imap_open("{imap.domain.com:143/novalidate-cert}INBOX", "$email", "$password");

唯一的问题是我的用户的电子邮件密码存储为 md5 哈希。

如何使用 imap_open 处理这个问题?

谢谢

【问题讨论】:

  • 什么类型的邮件账户?地图?流行音乐?交换?笔记?本地 unix mbox?
  • 用什么? POP3 服务器?地图?其他系统?这是一个非常广泛的问题;你应该对 PHP 的邮件功能做一些研究,等你试一试后再回来。
  • 账号是我的虚拟主机提供的,我有 imap 和 pop 设置。

标签: php email


【解决方案1】:

如果你不能使用imap_open(比如没有安装扩展),你可以使用curl(用gmail测试的例子):

// https://support.google.com/mail/answer/7126229 [2017-10-22]
define('URL', 'imaps://imap.gmail.com');
define('PORT', 993);
define('USER', 'your.user@gmail.com');
define('PASS', 'your_Secret_Password');

if ($ch = curl_init()) {
    curl_setopt($ch, CURLOPT_URL, URL);
    curl_setopt($ch, CURLOPT_PORT, PORT);

    curl_setopt($ch, CURLOPT_USE_SSL, CURLUSESSL_ALL);

    curl_setopt($ch, CURLOPT_USERNAME, USER);
    curl_setopt($ch, CURLOPT_PASSWORD, PASS);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);

    // set IMAP command
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'STATUS INBOX (MESSAGES UNSEEN)');

    $res = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'CURL ERROR: ' . curl_error($ch);
    } else {
        echo trim($res);
    }
    echo PHP_EOL;

    curl_close($ch);
} else {
    die('Curl initialization failed.');
}

脚本将返回如下内容:

* STATUS "INBOX" (MESSAGES 2 UNSEEN 1)

有关 IMAP 命令的更多信息 (https://www.google.com/search?q=imap+protocol+commands) [2017-10-22]:

【讨论】:

    【解决方案2】:

    $hostname='{imap.gmail.com:993/imap/ssl}INBOX';
    $username = 'mygmail@gmail.com';
    $password = 'mypass';
    
    $mbox = imap_open($hostname,$username,$password) or die('Cannot connect to Tiriyo: ' . imap_last_error());
    $status=imap_status($mbox,$hostname,SA_ALL);
    if ($status) {
      echo "Messages:   " . $status->messages    . "<br />\n";
      echo "Recent:     " . $status->recent      . "<br />\n";
      echo "Unseen:     " . $status->unseen      . "<br />\n";
      echo "UIDnext:    " . $status->uidnext     . "<br />\n";
      echo "UIDvalidity:" . $status->uidvalidity . "<br />\n";
    } 
    else {
      echo "imap_status failed: " . imap_last_error() . "\n";
    }
    $hostname='{imap.gmail.com:993/imap/ssl}INBOX';
    $username = 'mygmail@gmail.com';
    $password = 'mypass';
    
    /* try to connect */
    $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Tiriyo: ' . imap_last_error());
    $MB = imap_search($inbox,'UNSEEN');
    $xcount($MB);
    echo $x;
    

    【讨论】:

      【解决方案3】:

      您可以使用 Zeta Mail component 轻松地做到这一点,即使没有任何特殊的扩展可用。

      【讨论】:

        【解决方案4】:

        如果您在 PHP 脚本中实现 IMAP(或 POP3)客户端,这是可能的。当您打开页面时,PHP 将连接到邮件服务器并检查新邮件。为此,PHP 需要您的用户名/密码和服务器地址/端口。因此,这些信息必须存储在服务器上。

        http://lv.php.net/imap_mailboxmsginfo 给出的示例将为您提供更多提示。

        【讨论】:

        • 我该怎么做,有什么例子吗?谢谢
        猜你喜欢
        • 2011-04-29
        • 1970-01-01
        • 2010-10-31
        • 2011-09-16
        • 2011-10-06
        • 1970-01-01
        • 2017-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多