1. Programas do pacote qmail

1.1. mailsubj

mailsubj assunto recipiente1 recipiente2 ...

Recebe o corpo da mensagem via STDIN (entrada padrão), insere assunto como subject da mensagem e envia para recipiente1 e recipiente2.

Ex:

$ cat /etc/hosts | /var/qmail/bin/mailsubj "Somente teste." foo@bar.org nospam@blackhole.org

1.2. qmail-clean

Remove da fila de e-mail, e-mails que não foram enviados por motivo de erro. Geralmente o e-mail é removido por motivo de tempo esgotado na tentativa de enviá-lo N vezes, e indisponibilidade da caixa de correio do remetente que o gerou.

1.3. qmail-inject

qmail-inject [ -nNaAhH ] [ -f sender ] [ recipiente1 recipiente2 ... ]

Recebe mensagens via STDIN (entrada padrão), adiciona informações no cabeçalho da mensagem, e invoca o programa qmail-queue para enviar a mensagem para hum ou mais recipientes.

qmail-inject normalmente sai com código de erro 0 (zero). Se invocado incorretamente ou caso a mensagem tenha sérios problemas de syntaxe, sai com código de erro 100. Em caso de erros temporários, sai com código de erro 111.

Geralmente o programa qmail-inject é utilizado por clientes de e-mail que não suportam o protocolo SMTP para envio de e-mails, e é o substituto direto do programa sendmail.

Opções

Descrição

-n

Imprime a mensagem recebida via STDIN (entrada padrão) em STDOUT (saída padrão) ao invés de repassá-la ao programa qmail-queue.

-N

Repassa a mensagem recebida via STDIN para qmail-queue (Padrão).

-a

Envia a mensagem recebida via STDIN para todos os endereços de recipientes especificados via linha de comando. Ignora recipientes contidos no cabeçalho da mensagem.

-A

Envia a mensagem recebida via STDIN para todos os recipientes especificados via linha de comando. Se nenhum endereço de recipiente for especificado via linha comando, utilizará os endereços de recipientes contidos no cabeçalho da mensagem (Padrão).

-h

Envia a mensagem recebida via STDIN para todos os endereços de recipientes contidos no cabeçalho da mensagem. Para mensagens que não são forwards, significa que serão utilizados os endereços de e-mail contidos nos campos To, Cc, Bcc e Apparently-To do cabeçalho da mensagem. Para mensagens que são forwards, serão utilizados os endereços de e-mail contidos nos campos Resent-To, Resent-Cc e Resent-Bcc do cabeçalho da mensagem. Ignora recipientes especificados via linha de comando.

-H

Envia a mensagem recebida via STDIN para todos os endereços de e-mail contidos no cabeçalho da mensagem e todos os recipientes especificados via linha de comando.

-f sender

Repassa a mensagem recebida via STDIN para o programa qmail-queue substituindo o endereço de sender da mensagem por sender. Substitui também o conteúdo do campo Return-Path do cabeçalho da mensagem e variáveis de ambiente por sender.

recipiente1

Endereço de e-mail do primeiro recipiente.

recipiente2

Endereço de e-mail do segundo recipiente.

1.4. qmail-local

qmail-local [ -nN ] usuário diretório-home local traço extensão domínio sender defaultdelivery

Entrega ou encaminha e-mails para contas locais.

Executa tarefas muito importantes como, detectar se o e-mail está em loop - quando já possui “Delivered-To” entre os cabeçalhos do e-mail, denunciando que o e-mail já foi entregue 1 (uma) vez para este destinatário.

O recipiente da mensagem será local@domínio. qmail-local criará um novo cabeçalho “Delivered-To” na mensagem contendo local@domínio.

Caso o cabeçalho “Delivered-To: local@domain” já exista na mensagem, qmail-local devolve a mensagem, identificando-a como em loop de entrega.

O sender da mensagem será sender, e qmail-local criará um novo cabeçalho “Return-Path” contendo sender.

diretório-home é o diretório $HOME de usuário.

traço e extensão identificarão qual arquivo .qmailtraçoextensão será utilizado por qmail-local no momento da entrega, seguido das instruções contidas em defaultdelivery a serem executadas, caso o arquivo não exista.

Se a entrega da mensagem for executada com sucesso, qmail-local sai com código de erro 0 (zero).

Se a entrega falhar temporariamente, sai com código de erro 111.

Se a entrega da mensagem falhar permanentemente, qmail-local sai com código de erro diferente de 0 (zero).

Opções

Descrição

-n

Ao invés de ler e entregar a mensagem, imprime em tela a descrição das instruções de entrega.

-N

Lê e entrega a mensagem (Padrão).

1.5. qmail-lspawn

qmail-lspawn defaultdelivery

Invocado pelo programa qmail-send, qmail-lspawn lê uma série de comandos via descriptor 0 (zero), invoca o programa qmail-local para a entrega da mensagem e imprime as mensagens de resultado no descriptor 1.

defaultdelivery é passado ao programa qmail-local como instrução padrão de entrega da mensagem.

qmail-lspawn invoca qmail-local de forma assíncrona, sendo assim, as mensagens de resultado podem não retornar na mesma ordem que os comandos.

Antes de invocar qmai-local, qmail-lspawn verifica se o endereço do recipiente não está listado no mecanismo qmail-users, se o endereço não estiver listado, invoca o programa qmail-getpw.

qmail-lspawn ignora endereços de recipientes em branco.

1.6. qmail-pop3d

qmail-pop3d maildirname

Permite ao usuário ler ou remover mensagens em sua caixa de e-mail no servidor POP3.

Suporta apenas formato de caixa de e-mail do tipo Maildir – cada e-mail é um arquivo dentro da caixa de e-mail – e geralmente utiliza a porta 110/TCP.

qmail-pop3d é geralmente invocado pelo programa qmail-popup, que é responsável por receber informações de usuário e senha.

maildirname indica o nome do diretório a ser utilizado por qmail-pop3d na manipulação de mensagens dentro do diretório $HOME de cada usuário.

qmail-pop3d possui timeout de inatividade de 20 minutos.

qmail-pop3d suporta os comandos UIDL, TOP e LAST.

qmail-pop3d adiciona uma linha em branco extra a cada mensagem para corrigir alguns bugs sérios em certos clientes de e-mail.

qmail-pop3d é baseado em um programa contribuído por Russ Nelson.

1.7. qmail-popup

qmail-popup nome-do-host subprograma

Valida usuário e senha dos clientes remotos e executa subprograma. Suporta usuário e senha em texto plano (sem encriptação) e método de autenticação encriptada (APOP).

Geralmente qmail-pop3d é utilizado como subprograma e nome-do-host é utilizado em conexões APOP como uma derivação do timestamp de conexão.

qmail-popup possui timeout de inatividade de 20 minutos.

qmail-popup é baseado em um programa contribuído por Russ Nelson.

1.8. qmail-qmqpc

Comunica-se com um servidor QMQP (qmail-qmqpd) remoto e o repassa todos os e-mails recebidos.

qmail-qmqpc substitui qmail-queue (via link simbólico) para entregar as mensagens recebidas ao servidor QMQP.

1.9. qmail-qmqpd

Recebe conexões do tipo QMQP de clientes qmail-qmqpc remotos. Uma vez que a conexão é aceita, a mensagem é entregue diretamente ao programa qmail-queue. Geralmente utiliza a porta 628/TCP.

Basicamente, QMQP é utilizado para enviar mensagens de um servidor qmail a outro servidor qmail de forma rápida e segura.

NOTA: QMQP (Quick Mail Queuing Protocol) é um protocolo desenvolvido por Daniel J. Bernstein e só pode ser utilizado entre 2 (dois) servidores qmail.

1.10. qmail-qmtpd

Recebe conexões do tipo QMTP de clientes remotos. Uma vez que a conexão é aceita, a mensagem é entregue diretamente ao programa qmail-queue. Geralmente utiliza a porta 209/TCP.

qmail-qmtpd suporta os mecanimos rcpthosts, morercpthosts, RELAYCLIENTS, databytes e DATABYTES.

NOTA: QMTP (Quick Mail Transfer Protocol) é um protocolo desenvolvido por Daniel J. Bernstein e tem o intuito de ser um substituto ao protocolo SMTP.

1.11. qmail-queue

Injeta mensagens na fila de e-mail para serem processadas futuramente por qmail-send.

É invocado pelos programas qmail-inject, qmail-smtpd, qmail-qmtpd e qmail-qmqpd.

Todo o processamento de e-mails passa por qmail-queue, tornando-o o coração do qmail.

qmail-queue sempre adiciona uma linha Received no início do cabeçalho da mensagem.

qmail-queue impõe algumas regras na estrutura da fila de e-mails: cada subdiretório mess precisa estar localizado no mesmo sistema de arquivos que o diretório pid; cada subdiretório todo precisa estar localizado no mesmo sistema de arquivos que o diretório intd.

qmail-queue não imprime diagnósticos em tela. Sai com código de erro 0 (zero) caso a mensagem tenha sido injetada com sucesso na fila de e-mails, e sai com código de erro entre 1 e 99 caso tenha ocorrido falha no momento de injetar a mensagem na fila.

Todos os códigos entre 11 e 40 indicam erros permanentes.

Código

Descrição

11

Endereço de e-mail muito longo.

31

O servidor de e-mail está recusando permanentemente a enviar mensagens para qualquer recipiente. (Não utilizado por qmail-queue, mas utilizado por programas que utilizam a mesma estrutura).

Todos os demais códigos indicam erros temporários.

Código

Descrição

51

Estouro de memória.

52

Tempo esgotado.

53

Erro de escrita (Ex: disco cheio).

54

Não foi possível ler a mensagem ou os cabeçalhos de entrega.

55

Não foi possível ler os arquivos de configuração (Não utilizado por qmail-queue).

56

Problemas ao tentar fazer uma conexão de rede a partir do host local (Não utilizado por qmail-queue).

61

Problemas com o diretório home do qmail.

62

Problemas com o diretório da fila de e-mail.

63

Problemas ao criar a estrutura queue/pid.

64

Problemas ao criar a estrutura queue/mess.

65

Problemas ao criar a estrutura queue/intd.

66

Problemas ao criar a estrutura queue/todo.

71

O servidor de e-mail está recusando temporariamente a enviar mensagens para qualquer recipiente. (Não utilizado por qmail-queue).

72

Tempo esgotado na conexão com o servidor de e-mail. (Não utilizado por qmail-queue).

73

Conexão com o servidor de e-mail foi rejeitada. (Não utilizado por qmail-queue).

74

Sucesso na conexão com o servidor de e-mail, mas a comunicação falhou. (Não utilizado por qmail-queue).

81

Bug interno. (Ex: falha de segmentação).

91

Erro no formato dos cabeçalhos de entrega.

Cada mensagem na fila de e-mail possui o seu próprio contador de tempo, que indica ao qmail em que momento e quantas vezes ainda deve tentar entregar a mensagem antes de devolvê-la ao seu remetente. Este tempo não é configurável, e funciona como mostrado na tabela abaixo:

Tentativa de Entrega

Segundos

Dias – HH:MM:SS

1

0

0 - 00:00:00

2

400

0 - 00:06:40

3

1600

0 - 00:26:40

4

3600

0 - 01:00:00

5

6400

0 - 01:46:40

6

10000

0 - 02:46:40

7

14400

0 - 04:00:00

8

19600

0 - 05:26:40

9

25600

0 - 07:06:40

10

32400

0 - 09:00:00

11

40000

0 - 11:06:40

12

48400

0 - 13:26:40

13

57600

0 - 16:00:00

14

67600

0 - 18:46:40

15

78400

0 - 21:46:40

16

90000

1 - 01:00:00

17

102400

1 - 04:26:40

18

115600

1 - 08:06:40

19

129600

1 - 12:00:00

20

144400

1 - 16:06:40

21

160000

1 - 20:26:40

22

176400

2 - 01:00:00

23

193600

2 - 05:46:40

24

211600

2 - 10:46:40

25

230400

2 - 16:00:00

26

250000

2 - 21:26:40

27

270400

3 - 03:06:40

28

291600

3 - 09:00:00

29

313600

3 - 15:06:40

30

336400

3 - 21:26:40

31

360000

4 - 04:00:00

32

384400

4 - 10:46:40

33

409600

4 - 17:46:40

34

435600

5 - 01:00:00

35

462400

5 - 08:26:40

36

490000

5 - 16:06:40

37

518400

6 - 00:00:00

38

547600

6 - 08:06:40

39

577600

6 - 16:26:40

40

608400

7 - 01:00:00

Mensagens ficam em fila, quando o qmail por algum motivo não pôde entregá-las pela primeira vez ou na tentativa anterior; tais mensagens recebem o nome de “deferred” (entrega falhou e foi adiada).

1.12. qmail-remote

qmail-remote host-remoto sender recipiente [ recipiente1 recipiente2 ... ]

Invocado pelo programa qmail-rspawn, qmail-remote recebe mensagens via entrada padrão (STDIN) e as entrega para recipientes localizados em servidores remotos, utilizando o protocolo SMTP.

qmail-remote envia a mensagem para host-remoto ou para o host listado como entrada MX ou A na zona DNS de cada domínio.

host-remoto deve ser um nome de DNS válido:

presunto.black.hole.net

ou o endereço IP do host entre colchetes:

[172.18.73.19]

O recipiente da mensagem será recipiente e opcionalmente recepiente1 e recepiente2.

O sender da mensagem será sender.

qmail-remote imprime uma série de flags de recipientes, seguido de um relatório da mensagem. Casa relatório inicia com uma única letra.

qmail-remote sempre sai com código de erro 0 (zero).

Flag

Descrição

r

Relatório de recipiente: recipiente aceito.

h

Relatório de recipiente: recipiente permanentemente rejeitado.

s

Relatório de recipiente: recipiente temporariamente rejeitado.

K

Relatório de mensagem: sucesso na entrega. Host remoto tomou a responsabilidade de entregar a mensagem para cada recipiente aceito.

Z

Relatório de mensagem: falha temporária na entrega.

D

Relatório de mensagem: falha permanente na entrega.

Depois das letras, qmail-remote imprime na tela o que ocorreu na tentativa de entrega da mensagem.

Ex:

$ cat /etc/hosts | /var/qmail/bin/qmail-remote foo.bar.net master@rrunner.net presunto@black-hole.net salsisha@black-hole.org

master@rrunner.net presunto@black-hole.net salsisha@black-hole.org

rrK172.18.73.19 accepted message.

Remote host said: 250 ok 1079277646 qp 1337

1.13. qmail-rspawn

Recebe uma série de comandos de entrega remota via descriptor 0, invoca qmail-remote para efetuar a entrega da mensagem e imprime os resultados no descriptor 1.

qmail-rspawn é invocado por qmail-send, quando este classifica o e-mail como remoto, baseando-se no endereço de recipiente.

qmail-rspawn invoca qmail-remote de forma assíncrona, sendo assim, as mensagens de resultado podem não retornar na mesma ordem que os comandos.

1.14. qmail-send

Entrega e-mails armazenados na fila de e-mail.

Utiliza qmail-lspawn para entregar mensagens à recipientes locais e qmail-rspawn para entregar mensagens à recipientes remotos. Se a mensagem não pôde ser entregue temporariamente para 1 (hum) ou mais recipientes, qmail-send deixa a mensagem na fila e tenta entregá-la novamente mais tarde.

qmail-send imprime registros legíveis de suas atividades no descriptor 0, escreve comandos para qmail-lspawn, qmail-rspawn e qmail-clean via descriptor 1 (hum), 3 (trêz) e 5 (cinco) e lê as respostas via descriptor 2 (dois), 4 (quatro) e 6 (seis).

qmail-send é responsável por evitar situações que possam causar um “beco sem saída” (deadlock).

Se qmail-send receber um sinal kill do tipo TERM , aguarda a finalização de todas as entregas de e-mail correntes antes de ser derrubado.

Se qmail-send receber um sinal kill do tipo ALRM, reagenda a entrega imediata de todas as mensagens armazenadas na fila de e-mail.

1.15. qmail-smtpd

Recebe e-mails de computadores remotos e os repassa ao programa qmail-queue, que irá depositar a mensagem na fila de e-mails. Utiliza o protocolo SMTP e geralmente a porta 25/TCP.

qmail-smtpd é responsável pela contagem de hops (servidores por onde a mensagem passou); rejeita qualquer e-mail com 100 (cem) ou mais entradas “Received” ou “Delivered-To” em seu cabeçalho.

qmail-smtpd suporta “ESMTP”, incluindo opções 8BITMIME e PIPELINING.

qmail-smtpd converte SMTP “newlines” em “UNIX newlines”, convertendo entradas “CR LF” em “LF”; qmail-smtpd retorna um erro temporário e aborta a conexão caso encontre uma entrada “LF” com problemas.

qmail-smtpd aceita mensagens com linhas muito longas ou caracteres não “ASCII”, mesmo que estas mensagens violem as especificações do protocolo SMTP.

1.16. qmail-start

qmail-start [ defaultdelivery [ logger argumentos ... ] ]

Inicia todo o sistema de entrega de e-mails

Invoca os programas qmail-send, qmail-lspawn, qmail-rspawn e qmail-clean com seus devidos UIDs (ID de usuário) e GIDs (ID de grupo). Estes serviços cooperam entre si na entrega de e-mails.

defaultdelivery é o formato padrão de entrega de mensagens que será utilizado por qmail-lspawn, e deve ser do tipo Maildir ou Mailbox. Se não informado, qmail-lspawn utilizará o formato Mailbox como padrão.

Se logger for informado, qmail-start repassará os logs de atividade do programa qmail-send para logger.

Variáveis de ambiente passadas à qmail-start são eventualmente utilizadas pelo programa qmail-local; tenha sempre certeza de limpar o ambiente de variáveis se executar qmail-start manualmente.

Ex:

# env – PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir splogger qmail &

Limites de recursos e controles de TTYs também são repassados de qmail-start para qmail-local.

NOTA: qmail-send normalmente pode iniciar muitas entregas de e-mails simultâneas; para reduzir o impacto de qmail-send em outros programas do sistema, você pode executar qmail-start com prioridade baixa.

1.17. sendmail

Substitui diretamente as funcionalidades do conhecido programa sendmail. Geralmente é utilizado por clientes de e-mail que não suportam o protocolo SMTP para o envio de e-mails.

1.18. splogger

splogger [ tag [ fac ] ]

Lê e insere mensagens geradas pelo qmail no sistema de logs (syslog).

Insere tag (Padrão: splogger) e um timestamp numérico no início de cada mensagem.

splogger checa por alert: ou warning: no início de cada mensagem e seleciona uma prioridade syslog (LOG_ALERT, LOG_WARNING ou LOG_INFO) para a mensagem.

splogger loga mensagens com a facilidade fac. fac precisa ser numérico. (Padrão é 2).

splogger converte caracteres que não podem ser impressos por “?” (interrogação).

splogger não loga linhas em branco.

splogger quebra linhas que contenham mais que 800 caracteres (desde que syslog não suporte longas mensagens) e adiciona um “+” (adição) depois do timestamp para indicar uma quebra de linha.

Funcionamento geral da entrega de mensagens no qmail: