Configurei sendmail
para ouvir na porta 1234 em vez de 25 com uma alteração para sendmail.mc
:
DAEMON_OPTIONS(`Port=1234, Name=MTA')
Isso geralmente funciona, com uma exceção. O pano de fundo é que eu tenho um relé escutando na porta 25 (o relé deve ter um registro MX, então deve estar na porta 25). O relé envia e-mails via sendmail, então sendmail escuta em localhost:1234
. Em outras palavras, o sendmail é responsável apenas por enviar e-mails, e não por recebê-los. netstat
/etc confirma que o relé está escutando em 25 e o sendmail está escutando em 1234.
Isso funciona nestes dois casos de teste:
- Posso enviar emails por telnet'ing para sendmail (
telnet localhost 1234
) - Posso enviar e-mails
s-nail
com uma alteração de configuração apropriada (set mta=smtp://localhost:1234
)
No entanto, essa configuração não funciona se eu executar o sendmail diretamente:
sendmail -d8.20 -vt < test-email.txt
Nesse caso, o sendmail tenta enviar o e-mail conectando-se à porta 25 localmente, de modo que ele realmente se comunica com a retransmissão local, em vez de um servidor SMTP remoto. A saída de depuração mostra:
[email protected]... Connecting to [127.0.0.1] via relay...
220 mydomain.org ESMTP mydomain relay
Isso me deixou perplexo - alguma idéia do que está acontecendo aqui?
EDITAR
Fazendo algum progresso. Estou no Sendmail 8.15.2, Ubuntu 20.04. Esse problema realmente não importaria, exceto que o sendmail libera suas filas MSP com um cron job que é executado a cada 20 minutos, então recebo muitas entradas de falha do syslog e grandes filas de e-mail não entregues, porque o sendmail não pode se encontrar.
O problema parece ser o seguinte. Quando você envia um e-mail (ou gerencia as filas) usando o sendmail, é (normalmente) um processo de 2 etapas. Você executa o sendmail, que lê submit.cf
(e não sendmail.cf
), e atua como um MSA, enviando o email para algo. Esse algo normalmente é o daemon sendmail local, que lê sendmail.cf
quando é ativado.
sendmail.cf
diz ao sendmail que ele precisa ouvir localhost:1234
os e-mails recebidos. Isso significa que submit.cf
deve conter uma configuração que diga ao programa sendmail para rotear e-mails de saída para localhost:1234
.
A submit.mc
configuração relevante é provavelmente FEATURE
msp
, cujo padrão é
FEATURE(`msp', `[127.0.0.1]', `25')
Portanto, a resposta é provavelmente tão simples quanto alterar 25 para 1234. No entanto, não é tão fácil. Apenas alterá-lo, regenerar os arquivos e reiniciar o sendmail não faz diferença. Na verdade, regenerar submit.cf
com um m4
ou make
outro faz exatamente zero diferença ou fornece um cf
arquivo com o recurso comentado. Há alguma mágica em algum lugar que permite alterar o recurso, mas não tenho ideia do quê. A resposta pode estar em /usr/share/sendmail/cf/feature/msp.m4, mas não consigo vê-la.
Executando o sendmail a partir da linha de comando, usando um arquivo de configuração diferente.
Edite o arquivo "submit.mc"
adicione a linha:
antes da linha:
Em seguida, compile "submit.mc" para "submit.cf".