
Estou me perguntando se é possível criar mensagens de email e colocá-las na fila do postfix simplesmente gravando arquivos no disco rígido.
Atualmente tenho um script que usa uma conexão de soquete para despejar os dados, mas se eu pudesse gravá-los diretamente no disco rígido, isso aceleraria consideravelmente as coisas. Isso é possível?
Responder1
Você não deve se enfiar na fila assim, no entanto, você pode usar as ferramentas de correio da linha de comando, como:
sendmail -i [recipient@address] < [file]
o que eu acho que deve manter tudo do lado do servidor até que o postfix tente entregar.
Responder2
Sim, usando a fila maildrop:http://www.postfix.org/MAILDROP_README.html#maildrop_queue
As filas Postfix são apenas diretórios no sistema de arquivos; itens enfileirados são inodes que se movem de um diretório (fila) para outro; o arquivo usa um formato binário personalizado contendo todos os metadados necessários para processá-lo.
Existe um módulo perlCorreio::Postfix::Postdropque coloca o correio no diretório maildrop.
Mail::Postfix::Postdrop - Injeta e-mails em um diretório maildrop do Postfix
use Mail::PostFix::Postdrop 'inject';
inject $message, Sender => '[email protected]',
Recipients => [ qw([email protected] [email protected]) ];
Você pode usarpós-lançamentoem si (que é como o comando 'sendmail' injeta mensagens na fila):
The postdrop(1) command creates a file in the maildrop
directory and copies its standard input to the file.
Eu também não fiz; deixe-nos saber se você tiver alguma sorte com isso.
Responder3
Era uma vez, era possível fazer exatamente isso com o Postfix. Afinal, o maildrop nada mais é do que um diretório onde os arquivos são gravados. O problema é que é possível fazer todos os tipos de truques com um diretório maildrop gravável mundialmente. (Isso já era conhecido há muito tempo, mesmo na época em que o Postfix foi escrito pela primeira vez.) Portanto, em um sistema configurado corretamente, você não poderá simplesmente gravar arquivos.
É quase certo que este não seja o seu gargalo em primeiro lugar. Afinal, é do correio eletrônico que estamos falando, onde existe uma grande coisa chamada “Internet”, que geralmente é a parte mais lenta do sistema. Suspeito fortemente que você não tenha analisado seus gargalos para ver o que e onde eles estão, e que sua idéia de que escrever diretamente em um arquivo de spool "acelerará as coisas consideravelmente" é baseada na esperança e não na medição.
É bastante fácil eliminar qualquer atraso em um diálogo de envio SMTP com pipeline SMTP. E, como mencionado em outra resposta, usar o utilitário Postfix - que neste caso sendmail
é pouco mais que um wrapper - também é uma opção. postdrop
Mas economizar um segundo no envio de mensagens provavelmente será perdido se o seu verdadeiro gargalo for, por exemplo, uma conexão discada à Internet.