<?php
require('connect_db.php');
set_time_limit(0);
chdir(__DIR__);
// debug
if (file_exists('mailbox')) unlink('mailbox');
$user_mail = '********@yahoo.co.uk';
$pass_mail = '********';
$mailbox = "{pop.mail.yahoo.co.uk:110/pop3/novalidate-cert}INBOX";
echo "\r\n";
$round = 0; // debug
while (1) {
echo 'main loop '. $round++ ."\r\n";
// коннектимся к меилу
$mbox = imap_open($mailbox, $user_mail, $pass_mail) or die("imap_open failed: ".imap_last_error()."\r\n");
$num = imap_num_msg($mbox);
echo 'inbox has '.$num." messages\r\n";
if ($num) {
// headers
$headers = imap_headers($mbox);
$emails_text = ''; // debug
if (empty($headers)) {
echo "Headers call failed\r\n";
}
else {
foreach ($headers as $key => $header) {
// debug
$emails_text .= "\r\n+---------------- Header $key+\r\n$header\r\n";
// проверяем если это хедер конфирма
$body = imap_body($mbox, $key + 1);
// debug
$emails_text .= "\r\n+---------------- Body $key+\r\n$body\r\n";
// ищем конфирм код и мыло с которого форвардим
preg_match('|can send the confirmation code\r\n(\d+) to ([^@]+)@|', $body, $match);
$confirm_code = $match[1]; $login = $match[2];
// проверяем если акк уже не верифицирован (старое письмо пришедшее после верификации)
$query = mysql_query("select stage from accounts where login = '$login'");
if (!mysql_num_rows($query)) {
echo "login: $login ; confirm code: $confirm_code ; isn't in the db\r\n";
//mark this email for deletion
imap_delete($mbox, $key + 1);
continue;
}
$row = mysql_fetch_row($query);
// если stage больше 1, то акк уже прошел стадию письма верификации
if ($row[0] > 1) {
echo "login: $login ; confirm code: $confirm_code ; already verified\r\n";
// mark this email for deletion
imap_delete($mbox, $key + 1);
continue;
}
echo "login: $login ; confirm code: $confirm_code\r\n";
// записываем конфирм код в мускуль, заодно переводим stage на 2
mysql_query("update accounts set stage = '2', verificatioin_resend = '0', verification_code = '$confirm_code' where login = '$login'");
// mark this email for deletion
imap_delete($mbox, $key + 1);
}
}
// debug
file_put_contents('mailbox', $emails_text, FILE_APPEND);
// delete all mail from mailbox
imap_expunge($mbox);
}
// close connection
imap_close($mbox);
// проверяем если есть еще акки которыe не получили конфирм код (state < 2), если нет, скрипт завершил работу
$query = mysql_query("select id from accounts where stage < '2' limit 1");
if (!mysql_num_rows($query)) break;
// пауза перед следующим коннектом к ящику
sleep(300);
}
?>