Обеспечение того, чтобы контактная форма электронной почты не терялась (python) - PullRequest
2 голосов
/ 12 января 2009

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

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

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

Но как хранить данные?

Я использую Python, поэтому я подумал об использовании shelve (полу-база данных в одном файле). Или, может быть, кто-то может предложить лучший формат данных? (Я думаю, что полное решение для базы данных было бы излишним.)

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

Так что же делать? Многофайловое решение, блокировка файлов или что-то еще?

Ответы [ 3 ]

8 голосов
/ 12 января 2009

Когда мы реализуем функцию отправки электронной почты в нашей среде, мы делаем это в отрыве. Так, например, пользователь будет отправлять свои данные, которые будут храниться в базе данных. Затем у нас есть отдельный сервис, который запускает, запрашивает базу данных и отправляет электронную почту. Таким образом, если возникнут какие-либо проблемы с почтовым сервером, служба просто попытается позже, данные и доверие пользователей никогда не будут потеряны.

4 голосов
/ 12 января 2009

попробуй sqlite . Он имеет по умолчанию привязки Python в стандартной библиотеке и должен работать для полезного уровня нагрузки (или, как мне сказали)

2 голосов
/ 12 января 2009

Вы можете, как и предполагалось, использовать sqlite для этого. Главный вопрос: как у человека "много представлений"? Я ниже нескольких в секунду, это будет работать. В противном случае файл базы данных будет заблокирован все время, и у вас возникнет другая проблема.

Но вы также можете сделать это простым, глупым и простым: записывать файлы на диск. Для каждого разрешения файл записывается во временный каталог (если почтовый сервер не работает). Затем вы добавляете несколько строк в скрипт запуска почтового сервера, который читает каталог и отправляет письма. Нет баз данных, нет проблем с блокировкой, и если вы используете каталог, для которого установлена ​​квота (или виртуальный диск с фиксированным размером), вы не должны столкнуться с какими-либо проблемами.

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