O mailx envia correio usando uma retransmissão SMTP ou se conecta diretamente ao servidor SMTP de destino?


30

Suponha que eu envie um email usando o seguinte comando:

mailx person@x.com

Em seguida, o mailx tenta descobrir o servidor SMTP do meu ISP para retransmitir o correio ou ele se conecta diretamente. Depende se meu PC tem um endereço IP público ou está atrás de um NAT. Como verifico as configurações do mailx no meu PC? Como posso verificar isso usando o tcpdump?

Respostas:


29

Tradicionalmente, o Unix maile derivados (e muitas outras ferramentas Unix) usam a /usr/bin/sendmailinterface, fornecida por quase todos os agentes de transferência de correio (MTAs - postfix, exim, courier e, claro, sendmail).

Ou seja, o mailprograma não fala nenhum protocolo de rede - ele envia a mensagem sendmailvia stdin e permite lidar com a entrega real. (Isso remonta aos dias em que alguns emails usavam SMTP, alguns usavam UUCP, outros usavam BITNET ...)

Depois que uma mensagem é enfileirada sendmail, o MTA lida com a transmissão real de mensagens, seja por SMTP ou por qualquer outra coisa. Dependendo da configuração, ele pode se conectar diretamente ao MTA de destino ou retransmitir emails por outro host (também chamado de smarthost).

Conexão direta é mais comum em servidores; a retransmissão via smarthost é mais comum em computadores pessoais em conexões domésticas - a retransmissão através da sua conta de e-mail do Gmail ou ISP / trabalho é essencial para evitar os filtros anti-spam "IP dinâmico" geral.

(Alguns MTAs como esmtpou nullmailersão criados especificamente para usuários domésticos e sempre usam um host de retransmissão. Eles não oferecem suporte ao recebimento de mensagens e são muito mais leves em relação aos recursos.)

mailx → [/ usr / bin / sendmail] → fila local do MTA → [SMTP] → destinatário MTA → caixa de entrada do destinatário
mailx → [/ usr / bin / sendmail] → fila local do MTA → [SMTP] → Gmail ou ISP / servidores de trabalho → [SMTP] → destinatário MTA → caixa de entrada do destinatário

Outros programas, principalmente os clientes gráficos amigáveis ​​ao usuário, como Thunderbird ou Outlook, sempre se conectam diretamente a um servidor SMTP de retransmissão / inteligência mais inteligente (novamente, geralmente Gmail ou ISP / servidor SMTP comercial), que transmite a mensagem em seu nome.

O suporte nativo a SMTP está presente heirloom-mailx, mas não no tradicional bsd-mailx.

aplicativo → [SMTP] → Gmail ou ISP / servidores de trabalho → [SMTP] → destinatário MTA → caixa de entrada do destinatário

O terceiro método - conectar-se diretamente ao servidor do destinatário - quase nunca é usado, e nenhum MUA o suporta. Em computadores pessoais, usá-lo faria com que sua mensagem fosse rejeitada (muito spam é enviado de endereços IP de usuários domésticos infectados).

aplicativo → [SMTP] → MTA do destinatário → capturado pelo filtro de spam

1
como descobrir meu MTA no linux?
Rohit Banga

1
@iamrohitbanga 1) Verifique a lista de pacotes instalados. (Nem todas as distribuições vêm com um MTA por padrão.)
grawity

1
@iamrohitbanga 2) Eu já respondi isso. O Outlook é frequentemente usado em um computador pessoal em casa e muitos servidores de correio rejeitam as mensagens recebidas dos endereços dos usuários domésticos (devido a uma alta taxa de spam desses). É por isso que a retransmissão através de um servidor corporativo é necessária.
grawity

1
@iamrohitbanga 3) "ou" significa "um dos", não "ambos". Aqueles que usam o Gmail como sua conta de email principal enviam emails pelos servidores do Gmail. Aqueles que têm uma caixa de correio em seu provedor de serviços de Internet usam os servidores de seus provedores.
grawity

1
@iamrohitbanga 4) Isso porque mailx não usa o "terceiro método". Ele usa um MTA conforme descrito na parte superior da minha resposta. E mais uma vez, se você não estiver em uma conexão corporativa à Internet, é provável que as mensagens enviadas diretamente do seu PC (sem retransmissão) sejam descartadas.
grawity

31

mailx pode usar SMTP. Seu arquivo de configuração é ~ / .mailrc

Um exemplo é o mailx usando o SMTP do Gmail .

O configure pode até estar em um comando:

mailx -v -s "$EMAIL_SUBJECT" \
-S smtp-use-starttls \
-S ssl-verify=ignore \
-S smtp-auth=login \
-S smtp=smtp://smtp.gmail.com:587 \
-S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
-S smtp-auth-user=$FROM_EMAIL_ADDRESS \
-S smtp-auth-password=$EMAIL_ACCOUNT_PASSWORD \
-S ssl-verify=ignore \
-S nss-config-dir=~/.mozilla/firefox/xxxxxxxx.default/ \
$TO_EMAIL_ADDRESS

Se um servidor SMTP normal for usado, é muito mais fácil (consulte uma introdução detalhada aqui ):

mailx -v -s "$EMAIL_SUBJECT" \
-S smtp=smtp://smtp.example.com
-S from="$FROM_EMAIL_ADDRESS($FRIENDLY_NAME)" \
$TO_EMAIL_ADDRESS

Você também pode colocá-los no arquivo de configuração do mailx ~ / .mailrc


Observe que isso depende do heirloom-mailx, que não é o mailx padrão.
5114 Scott

@ Scott: Sim. Mas depende da distribuição do Linux. Em alguns sistemas, o padrão não é a herança (por exemplo, Ubuntu: fclose.com/b/linux/1411/… . Parece haver três versões do mailx). Em alguns outros, como o Fedora, OpenSUSE, o padrão é o "recurso rico" "heirloom-mailx".
Ericzma

@ericzma Eu acho que o heirloom-mailx é o melhor / o heirloom é o único mailx que pode fazê-lo (especificando um servidor smtp na linha de comando)? Funciona bem no Debian, embora não esteja instalado por padrão. No Debian mailx, os links para / etc / alternativos / mailx, os links para / usr / bin / bsd-mailx Depois de instalar o heirloom-mailx no debian, / etc / alternative / mailx os links para / usr / bin / heirloom-mailx e funcionaram bem
barlop 26/09/14

@barlop Sua conclusão é consistente com a minha: heirloom-mailx funciona enquanto bsd-mailx não. Ainda não está ciente de outras implementações de trabalho.
Ericzma 01/10/14

O CentOS 6.7 usa o Heirloom mailx 12.4
Joshua Grigonis

3

Na mailx(1)página do manual, seção DESCRIPTION , subseção Opções de String :

   smtp   Normally, mailx invokes sendmail(8) directly to  transfer
          messages.  If the smtp variable is set, a SMTP connection
          to the server specified by the value of this variable  is
          used  instead.

isso me confundiu um pouco. você pode ser mais elaborado?
Rohit Banga

Uhh ... ele usa, a sendmailmenos que esta opção esteja definida.
Ignacio Vazquez-Abrams

1

existe uma alternativa sem mta local como sendmail / postix.

pacote debian ssmtp

info from rpm descrição:

Summary     : Extremely simple MTA to get mail off the system to a Mailhub
URL         : http://packages.debian.org/stable/mail/ssmtp
License     : GPLv2+
Description : A secure, effective and simple way of getting mail off a system to your mail
            : hub. It contains no suid-binaries or other dangerous things - no mail spool
            : to poke around in, and no daemons running in the background. Mail is simply
            : forwarded to the configured mailhost. Extremely easy configuration.

hth

Stefan K.


1
Quase ... ssmtp é um cliente SMTP do tipo MTA. Ele se comporta como / usr / bin / sendmail, mas, em vez de se conectar diretamente ao registro MX de um domínio específico, delega essa tarefa a um servidor SMTP acessível (geralmente por nome de usuário / senha) à máquina que está executando o ssmtp. Isso é particularmente útil para aqueles sistema de envio de e-mail a partir de faixas de IP de alta de spam, como faixas de IP dinâmicos ADSL, provedores de hospedagem duvidosos, etc
André de Miranda
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.