web-dev-qa-db-fra.com

Mailx envoie-t-il un courrier via un relais SMTP ou se connecte-t-il directement au serveur SMTP cible?

Supposons que j'envoie un mail en utilisant la commande suivante:

mailx [email protected]

ensuite, mailx tente-t-il d’abord de trouver le serveur SMTP de mon fournisseur de services Internet pour relayer le courrier ou se connecte-t-il directement Est-ce que cela dépend si mon PC a une adresse IP publique ou s'il est derrière un NAT? Comment vérifier les paramètres de mailx sur mon PC? Comment puis-je vérifier cela en utilisant tcpdump?

29
Rohit Banga

Traditionnellement, Unix mail et ses dérivés (ainsi que de nombreux autres outils Unix) utilisent l'interface /usr/bin/sendmail fournie par presque tous les agents de transfert de courrier (MTA - postfix, exim, messager et bien sûr sendmail).

Autrement dit, le programme mail ne parle pas de protocole réseau. Il transmet le message à sendmail via stdin et lui permet de gérer la livraison réelle. (Cela remonte au temps où certains mails utilisaient SMTP, d'autres UUCP, d'autres BITNET ...)

Une fois qu'un message est mis en file d'attente via sendmail, le MTA gère la transmission du message réel, que ce soit via SMTP ou autre chose. Selon la configuration, il peut soit se connecter directement au MTA de destination, soit relayer le courrier via un autre hôte (également appelé smarthost).

La connexion directe est plus courante sur les serveurs. le relais via smarthost est plus courant sur les ordinateurs personnels avec des connexions domestiques - le relais via votre compte Gmail ou ISP/e-mail professionnel est essentiel pour éviter les filtres anti-spam "IP dynamique".

(Certains MTA tels que esmtp ou nullmailer sont construits spécifiquement pour les utilisateurs particuliers et utilisent toujours un hôte relais. Ceux-ci ne prennent pas en charge la réception de courrier et sont beaucoup plus légers en ressources.)

mailx → [/ usr/bin/sendmail] → file d'attente du MTA local → [SMTP] → MTA du destinataire → boîte de réception du destinataire
mailx → [/ usr/bin/sendmail] → file d'attente du MTA local → [SMTP] → serveurs Gmail ou ISP/de travail → [SMTP] → MTA destinataire → boîte de réception du destinataire

D’autres programmes, principalement les clients graphiques conviviaux tels que Thunderbird ou Outlook, se connectent toujours directement à un serveur SMTP relais/smarthost (là encore, généralement un serveur SMTP Gmail ou ISP/work), qui transmet le message en votre nom.

Le support SMTP natif est présent dans heirloom-mailx, mais pas dans le bsd-mailx traditionnel.

app → [SMTP] → Gmail ou FAI/serveurs de travail → [SMTP] → destinataire MTA → boîte de réception du destinataire

La troisième méthode - la connexion directe au serveur du destinataire - est presque jamais utilisée et aucune MUA ne la prend en charge. Sur les ordinateurs personnels, son utilisation pourrait entraîner le rejet de votre message (une grande partie du courrier indésirable est envoyée par les adresses IP des utilisateurs locaux infectés).

app → [SMTP] → MTA destinataire → intercepté par le filtre anti-spam
24
grawity

mailx peut utiliser SMTP. Son fichier de configuration est ~/.mailrc

Un exemple est mailx utilisant le protocole SMTP de Gmail .

Le configure peut même être dans une commande:

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

Si vous utilisez un serveur SMTP normal, c'est beaucoup plus facile (voir une introduction détaillée ici ):

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

Vous pouvez aussi les mettre dans le fichier de configuration de mailx ~/.mailrc

31
ericzma

Dans la page de manuel mailx(1), section DESCRIPTION, Options de chaîne . :

   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.

il existe une alternative sans mta local comme sendmail/postix.

paquet debian ssmtp

info de rpm description:

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
StefanKaerst