Garantir formulário de contato e-mail não está perdido (python)
-
22-07-2019 - |
Pergunta
Eu tenho um site com um formulário de contato. submete usuário nome, e-mail e de mensagens eo site de e-mails me os detalhes.
Muito ocasionalmente o meu servidor tem um problema com o seu sistema de e-mail e assim o usuário recebe um erro e os detalhes de contato são perdidas. (Não diga: obter um servidor melhor, qualquer servidor pode ter e-mail ir para baixo agora e depois e nós começamos uma série de apresentações).
Gostaria de implementar um sistema que pode armazenar os detalhes do usuário se o envio de email função retorna com um código de erro. Em seguida, em cada ulterior apresentação, verifique se há quaisquer submissões armazenados e tentar enviá-las para mim.
Mas como armazenar os dados?
Eu estou usando python, então eu pensei em usar prateleira (semi único arquivo -base de dados). Ou talvez alguém poderia sugerir um formato de dados melhor? (Eu acho que uma solução de banco de dados completo seria um exagero.)
O problema que vejo com uma abordagem único arquivo é raça-condições :. Dois ou mais e-mails falharam ao mesmo tempo, causaria duas edições ao arquivo de dados, resultando em corrupção de dados
Então, o que fazer? solução multi-arquivo, bloqueio de arquivos ou algo mais?
Solução
Quando implementamos e-mail enviando funcionalidade em nosso ambiente que fazê-lo de uma forma dissociada. Assim, por exemplo, um usuário poderia enviar os seus dados que ficam armazenados em um banco de dados. Temos, então, um serviço separado que é executado, consulta o banco de dados e envia e-mail. Dessa forma, se há alguma vez quaisquer problemas de servidor de e-mail, o serviço só vai tentar novamente mais tarde, os dados e a confiança do usuário nunca é perdido.
Outras dicas
sqlite . Tem padrão python ligações na biblioteca padrão e deve funcionar para um nível útil de carga (ou assim me disseram)
Você poderia, como sugerido, usar o SQLite para isso. A principal questão é: Como homem é "uma grande quantidade de envios"? I está abaixo de alguns por segundo que isso iria funcionar. Caso contrário, o arquivo de banco de dados será bloqueado todo o tempo e você tem um outro problema.
Mas você também poderia mantê-la simples, estúpido e simples: os arquivos de gravação para o disco. Para cada Submission um arquivo é gravado em um diretório temporário (se o servidor de correio está em baixo). Em seguida, você adicionar algumas linhas para o script de inicialização mailserver que lê o diretório e envia e-mails. Nenhum banco de dados, sem problemas de bloqueio e se você usar um diretório para o qual a quota é definida (ou um disco em memória com tamanho fixo) você não deve correr em quaisquer problemas.