É possível enfileirar uma mensagem gravando-a no arquivo?

2

Gostaria de saber se é possível criar mensagens de e-mail 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á-lo diretamente no disco rígido isso aceleraria consideravelmente as coisas. Isso é possível?

    
por Kyle Buser 22.08.2011 / 23:05

3 respostas

3

Sim, usando a fila do maildrop: link

Filas Postfix são apenas diretórios no sistema de arquivos; os 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 em Perl Mail :: Postfix: : Postdrop que cola e-mails no diretório maildrop.

Mail::Postfix::Postdrop - Inject mails to a Postfix maildrop directory

  use Mail::PostFix::Postdrop 'inject';   
  inject $message, Sender     => '[email protected]',
                   Recipients => [ qw([email protected] [email protected]) ];

Você pode usar postdrop em si (que é como o ' O comando sendmail 'injeta mail 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ê tem alguma sorte com isso.

    
por 24.08.2011 / 22:12
2

Você não deve empinar na fila assim, no entanto, você pode usar as ferramentas de email da linha de comando, como:

sendmail -i [recipient@address] < [file]

que eu acho que deve manter tudo do lado do servidor até que as tentativas postfix sejam entregues.

    
por 22.08.2011 / 23:39
2

Era uma vez, poderia fazer exatamente isso com o Postfix. Afinal, o maildrop nada mais é do que um diretório no qual os arquivos são gravados. O problema é que alguém pode jogar todo tipo de truques com um diretório maildrop que pode ser gravado no mundo todo. (Isso já era conhecido desde a época em que o Postfix foi escrito pela primeira vez.) Portanto, em um sistema configurado corretamente, você não poderá simplesmente gravar arquivos.

Este quase certamente não é o seu gargalo em primeiro lugar. Isto é, afinal de contas, correio eletrônico sobre o qual estamos falando, onde há uma grande coisa chamada "a Internet", que geralmente é a parte mais lenta do sistema. Eu suspeito strongmente que você não tenha analisado seus gargalos para ver o que e onde eles estão, e que a sua ideia de que escrever diretamente para um arquivo de spool "acelera consideravelmente as coisas" é baseada na esperança e não na medição.

É bastante fácil eliminar qualquer um dos atrasos em um diálogo Envio de SMTP com pipelining de SMTP. E, como mencionado em outra resposta, usar o utilitário sendmail do Postfix - que é pouco mais que um wrapper em torno de postdrop neste caso - também é uma opção. Mas salvar um segundo no envio de mensagens provavelmente se perderá no ruído se o seu gargalo real for, por exemplo, uma conexão discada com a Internet.

    
por 24.08.2011 / 02:41