Обеспечение того, чтобы электронная почта контактной формы не была потеряна (python)

StackOverflow https://stackoverflow.com/questions/436003

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

Другие советы

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

Как было предложено, вы можете использовать для этого sqlite.Главный вопрос:Насколько это «много представлений»?Если это меньше нескольких в секунду, это сработает.В противном случае файл базы данных будет постоянно заблокирован, и у вас возникнет еще одна проблема.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top