Проверить непрочитанную почту в php - PullRequest
1 голос
/ 02 марта 2011

Я пытаюсь реализовать функцию проверки новой почты на своей странице.Под этим я подразумеваю скрипт, который проверяет почту, и если есть непрочитанные письма, он уведомляет пользователя «Вы получили одно непрочитанное письмо».

Возможно ли это?

Заранее спасибо

Мне удалось заставить его работать, пока электронные письма пользователей и пароли хранятся в виде простого текста в базе данных.

Я использую запрос для получения электронной почты и пароля пользователя из моей базы данных ($ email) и ($ password)

Код:

$ mbox = imap_open ("{imap.domain.com:143/novalidate-cert‹INBOX", "$ email", "$ пароль");

Единственная проблема заключается в том, что пароли электронной почтыдля моих пользователей хранятся как хэш md5.

Как мне справиться с этим с помощью imap_open?

Спасибо

Ответы [ 5 ]

3 голосов
/ 02 марта 2011

Это возможно, если вы внедрите IMAP (или POP3) клиент в своем скрипте PHP. Когда вы открываете свою страницу, PHP подключается к почтовому серверу и проверяет наличие новых сообщений. Для этого PHP понадобится ваше имя пользователя / пароль и адрес / порт сервера. Следовательно, эта информация должна храниться на сервере.

Пример, приведенный на http://lv.php.net/imap_mailboxmsginfo, даст вам еще несколько советов.

1 голос
/ 22 октября 2017

Если вы не можете использовать 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]:

1 голос
/ 02 марта 2011

Вам понадобится кодировать в поддержку IMAP, что можно сделать с помощью PHP imap с функциями .Полное решение не тривиально все же.

0 голосов
/ 03 марта 2017

$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;
0 голосов
/ 02 марта 2011

Вы можете удобно сделать это, используя компонент Zeta Mail , даже без какого-либо специального расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...