#email #smtp #imap #gmail-api #gmail-imap
#Адрес электронной почты #smtp #imap #gmail-api #gmail-imap
Вопрос:
Я хочу создать CRM, и мне нужно синхронизировать электронные письма нескольких пользователей. Итак, мой вопрос в том, как я могу управлять несколькими подключениями. Я вижу, что мы можем использовать IMAP IDLE для одного пользователя, чтобы получать уведомления при поступлении электронного письма, но мне нужно будет иметь сотни подключений, будет ли работать просто наличие сотен подключений в разных потоках? Кроме того, я сомневаюсь, что почтовые серверы разрешат такое количество подключений с одного IP-адреса. Кроме того, что касается GMAIL, они предоставляют REST API, но у них тоже есть ограничение на максимальное количество разрешенных подключений. Итак, как я могу синхронизировать электронные письма для всех моих пользователей?
Было бы здорово, если бы вы могли указать мне правильное направление. Спасибо.
Ответ №1:
Сотни подключений по протоколу IMAP с одного IP-адреса не редкость; есть много офисов, где исходящий шлюз для всей офисной сети выглядит (и действительно является) одним IP-адресом извне.
Задача в основном заключается в отслеживании такого количества подключений из вашего кода.
Здесь, вероятно, хорошей идеей является бездействие, но для того, чтобы ваш код был устойчив к сбоям в сети, вы должны быть готовы к тому, что сеанс ожидания также будет периодически отключаться. Поэтому просто создайте свою программу для повторного подключения в случае необходимости. Затем, если вы обнаружите, что у вас больше подключений, чем может обработать ваш сервер, изменение кода на всегда или периодически отключать их будет относительно простым изменением.
Для сравнения подумайте о количестве подключений, которыми должен управлять загруженный веб-сервер. И это занятые подключения; большую часть времени ваши будут находиться в режиме ожидания. (Тем не менее, вам, вероятно, следует быть осторожным, если вы ожидаете масштабирования до десятков тысяч одновременных подключений; в ОС есть ограничение, которое, вероятно, можно увеличить, но не бесконечно.)
Комментарии:
1. Хм, немного погуглив, я полагаю, вы могли бы поддерживать сотни тысяч исходящих TCP-подключений на одном сервере, если они не все подключены к одному и тому же пульту и у вас достаточно памяти.
2. Спасибо за ваш ответ. Итак, в принципе, нет проблем с таким количеством подключений, но мне нужно убедиться, что система может обрабатывать такое количество подключений и повторно подключаться, если какое-либо соединение отключается. Ну, вы знаете о каком-нибудь проекте с открытым исходным кодом, который делает это, чтобы у меня была ссылка?
3. Существует несколько решений для работы с Python IMAP IDLE, но у меня не было времени поиграть с ними. Увы, стандарту
imaplib
по-прежнему не хватает поддержки. Это должно быть тем, в чем Twisted преуспевает, хотя кривая обучения предположительно существенна.4. Я просматривал twisted.mail, но, похоже, он не поддерживает IDLE.
5. Twisted теперь немного менее привлекателен, чем сам Python
async
, но это зрелый пакет со многими хорошо протестированными дополнениями. Вот одна попытка простоя в Twisted, но мне она кажется очень старой: jdb.github.io/imap_idle/twisted_imap.html