我正在尝试在我的页面上实现检查新邮件功能。 我的意思是一个检查邮件的脚本,如果有未读邮件,它会通知用户“你有一封未读邮件”。
这可能吗?
提前致谢
只要用户的电子邮件和密码以纯文本形式存储在数据库中,我就设法让它工作。
我正在使用查询从我的数据库中检索用户的电子邮件和密码($ email)和($ password)
代码:
$ mbox = imap_open( “{imap.domain.com:143/novalidate-cert}INBOX”, “$ email”,“$ password”);
唯一的问题是我的用户的电子邮件密码存储为md5哈希。
如何使用imap_open处理此问题?
由于
答案 0 :(得分:3)
如果您在PHP脚本中实现IMAP(或POP3)客户端,则可能。当您打开页面时,PHP将连接到邮件服务器并检查新邮件。为此,PHP需要您的用户名/密码和服务器地址/端口。因此,此信息必须存储在服务器上。
http://lv.php.net/imap_mailboxmsginfo给出的示例将为您提供更多提示。
答案 1 :(得分:1)
您需要在IMAP支持中进行编码,这可以使用PHP imap functions来完成。然而,完整的解决方案并非无足轻重。
答案 2 :(得分: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]:
答案 3 :(得分:0)
即使没有任何特殊扩展名,您也可以使用Zeta Mail component轻松完成此操作。
答案 4 :(得分:0)
$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";
}
&#13;
$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;