Мы создали веб-службу, которая должна постоянно проверять сообщения электронной почты. По сути, пользователь отправляет нам электронное письмо, и сервер должен выполнять действия на основе этого письма. Мы могли бы использовать PHP-скрипт crontab, который каждую минуту проверяет наличие новых сообщений с помощью POP. Но это оскорбительно для поп-сервера и не очень эффективно (1 минута - это слишком долго).
Но я читал о PUSH-электронной почте с использованием IMAP на мобильных устройствах. В моем случае это не мобильное устройство, а веб-сервер.
Могу ли я отправить электронное письмо на свой веб-сервер и заставить его выполнить сценарий PHP? Мы используем GMail в качестве сервера POP / SMTP / IMAP.
ИЗМЕНИТЬ 1 из ответов мы разобрались:
на моем веб-сервере должен быть запущен процесс (демон) 24/7, проверяющий электронную почту
этот демон может взаимодействовать с Gmail, используя: i) POP с NOOP или ii) IMAP с IDLE
Что лучше? POP или IMAP? Google, кажется, предлагает больше использовать IMAP.
Я не хочу злоупотреблять Gmail (каково их «добросовестное использование» для проверки электронной почты? Каждые 10 секунд?
Спасибо!
Если вы используете POP3 и сохраняете соединение открытым, вы можете не получать новые сообщения - я не помню, входит ли это в спецификацию или нет, но серверы POP3, с которыми я имел дело, по существу блокируют почтовый ящик на время POP3-сеанс, поэтому новая почта не будет приходить (кажется), пока сеанс POP3 открыт (STAT, UIDL, LIST и LAST - всегда - возвращали тот же ответ, пока вы не ВЫЙТИ и не повторно войдете в систему).
Если вы используете IMAP, у вас должна быть возможность поддерживать соединение IMAP открытым и просто периодически опрашивать его для получения новой почты. Это намного дешевле, чем вход в систему, проверка и отключение, если вы хотите делать это каждые (скажем) 10 секунд.
Я бы не стал запускать опросчик на внешнем веб-сервере. У меня был бы бэкэнд-долго работающий процесс (демон), который опрашивает изменения и взаимодействует через некоторую систему передачи сообщений с приложением PHP на внешнем веб-сервере. («система передачи сообщений» может быть такой же простой, как запись запроса и информации о состоянии в таблицу в общей базе данных).
Вы можете написать демон опроса на PHP, если хотите. Вы можете получить дополнительные возможности с этим процессом и адаптировать его к изменяющимся почтовым ящикам: если почтовый ящик пользователя постоянно меняется, оставайтесь на связи и часто опрашивайте. Если почтовый ящик не меняется, отключите соединение IMAP и проверьте его снова через 5 минут.
Джеймс
Если вы управляете своим веб-сервером: Вы можете использовать gmail для пересылки писем на веб-сервер, а затем использовать канал в файле / etc / aliases для передачи писем в php-скрипт, который может читать их из стандартного in. (Или эквивалентный механизм для передачи писем в скрипт на любом почтовом сервере (MTA), который вы выберете, я лично использую exim.) В принципе, ваш файл псевдонимов будет выглядеть как
username: |/var/www/myphpscript.php
а myphpscript.php прочитает письмо на STDIN и будет действовать в соответствии с ним.
Если вы не контролируете свой веб-сервер: IMAP поддерживает команду IDLE, которая позволяет клиенту открывать соединение с сервером в ожидании получения электронного письма. (Это чем-то похоже на PUSH-уведомление, за исключением того, что клиент должен установить и поддерживать открытое соединение с сервером). Вы можете написать сценарий, который откроет соединение с IMAP-сервером Gmail и будет использовать команду IDLE для ожидания нового электронного письма. . Для этого потребуется возможность запускать постоянный процесс на сервере. Для этого может быть способ использовать что-то вроде fetchmail, а затем передать электронное письмо в php-скрипт.
Надеюсь, это поможет!
Если у вас есть права администратора на почтовом сервере, почему бы не написать скрипт daemon / perl / shell / php для проверки существования файла, затем засыпать 5 секунд (или какой бы короткий интервал вы ни выбрали), а затем проверить очередной раз. Это все, что будет делать ваш почтовый сервер «push», и вы устраните слой сложности.
РЕДАКТИРОВАТЬ
Извините, я неправильно понял. Я думал, ты контролируешь поп-сервер.
Вы знаете, какое программное обеспечение работает на поп-сервере? Это будет иметь большое значение для изучения того, поддерживает ли он какой-то механизм push.
РЕДАКТИРОВАТЬ 2
Проверь это: http://www.phpclasses.org/browse/package/2.html
Он поддерживает «NOOP», чтобы предотвратить тайм-аут простоя соединения. Похоже, именно то, что вам нужно для реализации клиента PHP POP3.
Если бы у вас был собственный почтовый сервер, вы могли бы использовать что-то вроде procmail. Я не думаю, что есть возможность автоматизировать обработку электронной почты.
Вы не можете нажимать POP, это строго протокол "пришел и получил".
Можете ли вы использовать собственный почтовый сервер вместо GMail? Допускает ли GMail автоматическую пересылку электронной почты в противном случае? В любом случае вы можете настроить почтовый сервер, который будет запускать действия на основе входящей почты.
Мой ответ, вероятно, больше связан с программированием, чем с системным администратором ...
Я считаю, что с помощью API Google можно написать сценарий, который запускает долгоживущий HTTP-запрос, который в основном будет просто ждать, пока не станет доступным электронное письмо.
Большинство «push» электронных писем инициируется клиентом. Клиент сделает HTTP-запрос с просьбой о новой почте, и сервер отправит ему ответ, когда он будет.
Я подозреваю, что если время ожидания в 60 секунд для вас слишком велико, вы можете пересмотреть свое решение использовать Gmail. Gmail довольно хорош для обычного использования, но немедленная доставка сообщений, похоже, не является тем, на чем они фокусируют свою систему. Google не предлагает много гарантий относительно быстрой доставки сообщений.
Если вы запускаете свой собственный сервер, то существует множество вариантов настройки почтового сервера для доставки сообщения процессам. Проверьте документацию для этого почтового сервера.