Mailx envoie-t-il du courrier à l'aide d'un relais SMTP ou se connecte-t-il directement au serveur SMTP cible?

30

Supposons que j'envoie un courrier à l'aide de la commande suivante:

mailx [email protected]

Mailx essaie-t-il d'abord de trouver le serveur SMTP de mon FAI pour relayer le courrier ou se connecte-t-il directement? Cela dépend-il 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?

Rohit Banga
la source

Réponses:

29

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

Autrement dit, le mailprogramme ne parle aucun protocole réseau - il alimente le message sendmailvia stdin et le laisse gérer la livraison réelle. (Cela remonte à l'époque où certains messages utilisaient SMTP, certains utilisaient UUCP, certains utilisaient BITNET ...)

Une fois qu'un message est mis en file d'attente sendmail, le MTA gère la transmission réelle du message, 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 sur les connexions à domicile - le relais via votre compte de messagerie Gmail ou FAI / travail est essentiel pour éviter les filtres anti-spam «IP dynamique» de couverture.

(Certains MTA tels que esmtpou nullmailersont conçus spécifiquement pour les utilisateurs à domicile et utilisent toujours un hôte de relais. Ceux-ci ne prennent pas en charge la réception de courrier et sont beaucoup plus légers sur les ressources.)

mailx → [/ usr / bin / sendmail] → file d'attente MTA locale → [SMTP] → MTA destinataire → boîte de réception du destinataire
mailx → [/ usr / bin / sendmail] → file d'attente MTA locale → [SMTP] → Gmail ou FAI / serveurs 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 (encore une fois, généralement Gmail ou ISP / serveur SMTP professionnel), qui transmet le message en votre nom.

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

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

La troisième méthode - se connecter directement au serveur du destinataire - n'est presque jamais utilisée et aucun MUA ne la prend en charge. Sur les ordinateurs personnels, son utilisation entraînerait le rejet de votre message (de nombreux spams sont envoyés à partir des adresses IP des utilisateurs domestiques infectés).

application → [SMTP] → MTA destinataire → capturé par le filtre anti-spam
grawity
la source
1
comment trouver mon MTA sur linux?
Rohit Banga
1
@iamrohitbanga 1) Consultez la liste des packages installés. (Toutes les distributions ne sont pas fournies par défaut avec un MTA.)
grawity
1
@iamrohitbanga 2) J'ai déjà répondu à cela. Outlook est souvent utilisé sur un ordinateur personnel à la maison, et de nombreux serveurs de messagerie rejettent les messages reçus des adresses des utilisateurs à domicile (en raison d'un taux de spam élevé de ceux-ci). C'est pourquoi le relais via un serveur d'entreprise est nécessaire.
grawity
1
@iamrohitbanga 3) "ou" signifie "l'un des deux", pas "les deux". Ceux qui utilisent Gmail comme compte de messagerie principal envoient du courrier via les serveurs de Gmail. Ceux qui ont une boîte aux lettres chez leur FAI utilisent les serveurs de leur FAI.
grawity
1
@iamrohitbanga 4) C'est parce que mailx n'utilise pas la "troisième méthode". Il utilise un MTA comme décrit en haut de ma réponse. Et encore une fois, si vous n'êtes pas sur une connexion Internet d'entreprise, le courrier envoyé directement depuis votre PC (sans relais) sera très probablement rejeté.
grawity
31

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

Un exemple est mailx utilisant le SMTP de Gmail .

La configuration peut même être dans une seule 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 un serveur SMTP normal est utilisé, 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 également les mettre dans le fichier de configuration de mailx ~ / .mailrc

ericzma
la source
Notez que cela dépend de heirloom-mailx qui n'est pas le mailx par défaut.
Scott
@Scott: Oui. Mais cela dépend de la distribution Linux. Sur certains systèmes, la valeur par défaut n'est pas héritage (par exemple Ubuntu: fclose.com/b/linux/1411/… . Semble qu'il existe 3 versions mailx). Sur certains autres tels que Fedora, OpenSUSE, celui par défaut est le "Feature riched" "heirloom-mailx".
ericzma
@ericzma Je suppose que heirloom-mailx est le meilleur / est-ce que heirloom est le seul mailx qui peut le faire (en spécifiant à partir du serveur smtp sur la ligne de commande)? Il fonctionne bien sur Debian mais n'est pas installé par défaut. Sur Debian, les liens mailx vers / etc / alternatives / mailx qui pointent vers / usr / bin / bsd-mailx Après avoir installé heirloom-mailx vers debian, / etc / alternatives / mailx établit un lien vers / usr / bin / heirloom-mailx et a bien fonctionné
barlop
@barlop Votre conclusion est cohérente avec la mienne: heirloom-mailx fonctionne alors que bsd-mailx ne fonctionne pas. Pas encore au courant des autres implémentations de travail.
ericzma
CentOS 6.7 utilise Heirloom mailx 12.4
Joshua Grigonis
3

Dans la mailx(1)page de manuel, section DESCRIPTION, sous- section 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.
Ignacio Vazquez-Abrams
la source
cela m'a un peu dérouté. pouvez-vous être plus élaboré.
Rohit Banga
Euh ... il utilise à sendmailmoins que cette option ne soit définie.
Ignacio Vazquez-Abrams
1

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

paquet debian ssmtp

info de la description du rpm:

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.

StefanKaerst
la source
1
Presque ... ssmtp est un client SMTP de type MTA. Il se comporte comme / usr / bin / sendmail mais au lieu de se connecter directement à l'enregistrement MX d'un domaine particulier, il délègue cette tâche à un serveur SMTP accessible (généralement via nom d'utilisateur / mot de passe) à la machine exécutant ssmtp. Ceci est particulièrement utile pour les systèmes qui envoient des e-mails à partir de plages IP à spam élevé comme les plages IP dynamiques ADSL, les fournisseurs d'hébergement douteux, etc.
Andre de Miranda