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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top