Обеспечение того, чтобы контактная форма электронной почты не терялась (python)
У меня есть сайт с контактной формой. Пользователь отправляет имя, адрес электронной почты и сообщение, а сайт присылает мне подробности.
Очень редко у моего сервера возникают проблемы с электронной почтой, поэтому пользователь получает сообщение об ошибке, и эти контактные данные теряются. (Не говорите: получите лучший сервер, на любом сервере может быть время от времени отключена электронная почта, и мы получаем много заявок).
Я хотел бы реализовать систему, которая могла бы хранить данные пользователя, если функция отправки почты возвращается с кодом ошибки. Затем при каждой последующей отправке проверяйте наличие сохраненных отправлений и попробуйте отправить их мне.
Но как хранить данные?
Я использую python, поэтому я подумал об использовании shelve ( однофайловой полу-базы данных). Или, может быть, кто-то может предложить лучший формат данных? (Я думаю, что полное решение для базы данных было бы излишним.)
Проблема, которую я вижу при использовании одного файла, заключается в состязании: два или более сбойных электронных письма одновременно вызовут два изменения файла данных, что приведет к повреждению данных.
Так что делать? Многофайловое решение, блокировка файлов или что-то еще?
3 ответа
Когда мы реализуем функциональность отправки электронной почты в нашей среде, мы делаем это изолированно. Так, например, пользователь будет отправлять свои данные, которые будут храниться в базе данных. Затем у нас есть отдельный сервис, который работает, запрашивает базу данных и отправляет электронную почту. Таким образом, если возникнут какие-либо проблемы с почтовым сервером, служба просто попытается позже, данные и доверие пользователей никогда не будут потеряны.
Попробуй sqlite. Он имеет привязки Python по умолчанию в стандартной библиотеке и должен работать для полезного уровня нагрузки (или мне так сказали)
Вы можете, как и предполагалось, использовать sqlite для этого. Главный вопрос: как у человека "много представлений"? Я ниже нескольких в секунду, это будет работать. В противном случае файл базы данных будет заблокирован все время, и у вас возникнет другая проблема.
Но вы также можете сделать это простым, глупым и простым: записывать файлы на диск. Для каждого разрешения файл записывается во временный каталог (если почтовый сервер не работает). Затем вы добавляете несколько строк в скрипт запуска почтового сервера, который читает каталог и отправляет письма. Нет базы данных, нет проблем с блокировкой, и если вы используете каталог, для которого установлена квота (или виртуальный диск с фиксированным размером), вы не должны столкнуться с какими-либо проблемами.