Как реализовать сервер IMAP поверх хранилища данных couchdb / NoSQL? - PullRequest
3 голосов
/ 26 ноября 2011

Подводя итог моей цели, я просто ищу простой метод с открытым исходным кодом, который позволяет мне создавать и поддерживать (предпочтительно noSQL db) резервное копирование / архивирование одной / нескольких удаленных учетных записей электронной почты IMAP для каждого пользователя исинхронизируйте учетные записи электронной почты каждого отдельного пользователя, используя простое и недорогое решение, которое легко масштабируется, эффективно использует ресурсы сервера с ДОБАВЛЕННОЙ СПОСОБНОСТЬЮ, которую каждый пользователь должен иметь возможность подключить к своему центральному архиву электронной почты, просто добавив новую учетную запись imap вего существующий почтовый клиент, использующий сервер imap, имя пользователя и пароль, предоставленные этим архивным сервером / установкой.

Более конкретно:

Я искал какой-то тип масштабируемого решения с открытым исходным кодом, которое может бытьзапустить (и, следовательно, легко масштабировать) в облаке, что позволяет следующее:

1) позволяет мне указывать различные серверы IMAP с информацией для входа в систему, которые используются для доступа к этим учетным записям электронной почты и загрузки / синхронизации всехэлектронные письма жВ каждой учетной записи (надеюсь, включая папки / метки)

2) в отношении базы данных, используемой для хранения всех электронных писем для каждой учетной записи, я искал масштабируемые решения, такие как couchdb или mongodb, которые, вероятно, будут поддерживатьпростой индекс каждого письма.Этот индекс будет содержать основную информацию для каждого электронного письма, такую ​​как столбцы для заголовков, включая: от, до, отметки времени данных, строку темы, связанные папки / метки, дату первой синхронизации, время даты последней синхронизации, состояние для чтения / непрочитанного, количествовложения, имена файлов / размеры / типы вложений и связанная учетная запись imap, к которой он принадлежит ....)

3) с точки зрения хранения всех оригинальных писем, включая их вложения. Я думал, что каждое отдельное письмо должнозагружаться в виде отдельного файла с уникальным именем файла / идентификатором сообщения, на который будет ссылаться основной индекс электронной почты, и, следовательно, все эти оригинальные электронные письма могут храниться с использованием решения для хранения Amazons S3 для практически неограниченной масштабируемости.

ДоНа данный момент я считаю, что существует решение Opensource, которое можно использовать или настраивать для достижения этих целей ... В первую очередь кажется, что «offlineIMAP» предоставляет все эти возможности + больше, но если вы знаете о другой альтернативе, пожалуйста,дайте мне знать.

Хорошо, теперь к элементу, в котором я не уверен ...

5) здесь мне нужен способ использовать любой тип почтового клиента, который изначально поддерживает доступ к электронной почтечерез соединение IMAP и теперь дает мне возможность подключаться к моей настраиваемой базе данных электронной почты, как если бы это был обычный почтовый сервер imap.Как таковой, мне нужен какой-то тип коннектора, который, я думаю, соединяет протокол imap с действиями, предварительно выполненными на couchdb (или с любым другим хранилищем данных).Естественно, любые стандартные функции iMac, такие как поиск / копирование / перемещение / удаление / ..., также должны быть возможны, в то время как получение сведений об отдельном электронном письме выполняется путем извлечения связанного электронного письма из системы хранения Amazon S3.(Я просто предполагаю, что этот метод наиболее эффективен, учитывая снижение затрат, делая это таким образом.

Предполагая, что моя логика и подход обоснованы с точки зрения использования couchdb / mongodb в этом методе, мне кажется,что эта настройка действительно должна позволить мне легко масштабировать ее для нескольких пользователей, и доступ к архивам должен быть довольно быстрым ...

Есть ли у кого-нибудь опыт, предложения или советы / сценарии, связанные с достижением этих целей?

Единственный негативный побочный эффект, который я мог бы придумать в отношении этого типа, если при настройке архива электронной почты и использовании Amazon S3 для хранения фактических сообщений электронной почты является то, что пользователи не смогут осуществлять поиск содержимого (тела) своего архива с помощьюключевое слово. Думаю, это можно решить, просто добавив еще один столбец в индекс электронной почты couchdb, в котором можно будет извлечь весь фактический текст сообщения из электронного письма (исключая содержимое из любого предыдущего содержимого ответа / пересылки).

Ответы [ 3 ]

2 голосов
/ 27 ноября 2011

Относительно 5): вы можете захотеть взглянуть на Apache James, поскольку на нем много механизмов хранения, вы можете использовать / адаптировать один из них.Таким образом, он может предоставить интерфейс IMAP для вашей базы данных.Конечно, он не синхронизируется с другими серверами, вы должны сделать это, используя другие методы, которые уже были упомянуты.

1 голос
/ 28 ноября 2011

Это напомнило мне о проекте GSOC, реализованном поверх Hadoop HDFS.Я собрал больше деталей здесь , но я не уверен, что требования точно такие же.

1 голос
/ 27 ноября 2011

Что вы пытаетесь сделать с помощью этого?

  • резервных копий сервера IMAP?
  • веб-доступ к электронной почте?
  • архив электронной почты, просматриваемый пользователем?
  • ...?

Являетесь ли вы администратором IMAP?

Если нет, вам следует быть очень осторожным с этим, поскольку это имеет юридические последствия длякопировать электронные письма других людей в другое хранилище / базу данных.

Вы можете использовать Ruby on Rails следующим образом:

создать приложение Rails, которое подключается к базе данных по вашему выбору (например, MongoDB), и используйте библиотеку Ruby Net :: Imap для подключения к серверу IMAP, затем прочитайте данные и сохраните их в нужном формате в своей базе данных.

Убедитесь, что все части сообщений сохранены,например, также идентификатор сообщения, метки времени и заголовки.

http://www.ruby -doc.org / stdlib-1.9.2 / libdoc / net / imap / rdoc / Net / IMAP.html

Если вы просто хотите создать резервную копию:

Если у вас есть прямой доступ с диска кIMAP-сервер, возможно, лучший способ сделать это - использовать Rsync для создания копии того раздела диска, где хранятся электронные письма (без необходимости разбирать все электронные письма и помещать их в базу данных).

http://en.wikipedia.org/wiki/Rsync

Примечание:

Я думаю, что в целом не очень хорошая идея пытаться хранить эти электронные письма в отдельномбаза данных.Вы в основном обходите модель безопасности IMAP. Есть клиенты IMAP, доступные с веб-интерфейсом электронной почты, если вы просто хотите, чтобы пользователь имел возможность просматривать свои электронные письма через Интернет.

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