Envoi de mail avec PJ via mailx

Bonjour,
j’utilisais sur des versions précédentes de Debian SSMTP + MUTT pour gérer l’envoi de mail (essentiellement des notifications après des tâches cron).
Sous Debian 10.2 j’ai installé MSMTP (comme conseillé) et configuré /etc/msmtprc
L’envoi de mail simple fonctionne mais d’après mes recherches il est nécessaire de passer par un MTA pour attacher des pièces jointes. J’ai donc installé MSMTP-MTA.
Maintenant lorsque j’utilise la commande mail :

root@debian:~# echo "Bonjour" | mail -v -s "Sujet TEST" moi@entreprise.com
-bash: mail : commande introuvable

Qu’est ce qui manque ?
Merci :wink:

j’utilise exim4
https://www.debian.org/releases/jessie/amd64/ch08s05.html.fr
mais sinon simplement regarder sur quoi pointe

ls -alrt /usr/bin/mail

exemple

ls -alrt /usr/bin/mail
lrwxrwxrwx 1 root root 22 avril  5  2016 /usr/bin/mail -> /etc/alternatives/mail
ls -alrt /etc/alternatives/mail
lrwxrwxrwx 1 root root 18 avril  5  2016 /etc/alternatives/mail -> /usr/bin/bsd-mailx
ls -alrt /usr/bin/bsd-mailx
-rwxr-xr-x 1 root root 112888 août   6 21:05 /usr/bin/bsd-mailx

https://packages.debian.org/fr/buster/bsd-mailx

aucun fichier…

Je souhaite éviter l’utilisation de exim4 et mutt qui me semble à présent “disproportionné”… non ?

Bonjour,

Pour avoir la commande mail, il faut installer le paquet mailutils :

apt install mailutils

ou au choix le paquets bsd-mailx, comme @grandtoubab.

J’utilise aussi exim.

Il fait du bon boulot et en plus il est suivi

ok je vais essayer mailx. Je pensais que msmtp-mta suffisé pour avoir la commande mail…

Non cela ne suffit pas pour avoir la commande mail. Par contre si tu ne veux rien installer de plus, tu peux utiliser sendmail.

Je ne vois pas comment attacher une PJ…

Dans mon script de mise à jour , je fais ceci

usr/bin/mailx -s "résul update-perso service" root@localhost < /tmp/resul-opt-update-perso.txt

Bien évidemment ceci est un exemple, le fichier resul-opt-update-perso.txt est sur mon ordinateur, pas sur celui du lecteur…

Bien comprendre l’utilité du caractère <

décidément… pas facile de mettre à jour ses méthodes.
avec :

echo "mon message" | mailx -s "mon sujet" -a "/var/log/backups/backup_20191128-173806.log" moi@entreprise.com

j’ai plusieurs soucis :
1/ d’après mes recherches la ligne de commande “attend” CTRL+d mais ça ne fonctionne pas car rien ne se passe… obligé de faire CTRL+z => “Stoppé”

2/ j’ai l’erreur :

send-mail: impossible d'écrire dans le journal /var/log/msmtp.log : erreur d'ouverture de fichier: Permission non accordée

alors que le fichier existe avec 777

3/ impossible d’attacher une PJ… :sleepy:

help

Attention à la syntaxe si tu utilises mailutils (cf. les pages de man).
Retour de :

ls -l /etc/alternatives/mailx

pour savoir ce que tu utilises.

Pour envoyer une pièce jointe avec mail.mailutils, c’est avec un A majuscule:

echo "mon message" | mailx -s "mon sujet" -A "/var/log/backups/backup_20191128-173806.log" moi@entreprise.com

Attention aussi à Ctrl+Z, cela ne fait que placer le programme en arrière plan ( fg pour y revenir).
Pour tuer le processus courant c’est Ctrl+C.

Merci Bruno1 pour ton aide

Après vérification mailx utilise bien “a” pour les pièces jointes et non pas “A” : https://linux.die.net/man/1/mailx

1/ est-il possible d’exécuter la commande ? sans passer par CTRL+D… c’est quoi fg ?

Vérification de quoi ?
Chez moi /usr/bin/mailx est un lien symbolique qui pointe indirectement vers /usr/bin/mail.mailutils
Donne le retour de la commande que j’ai indiquée.

Ctrl+D n’est nécessaire que si tu tutilises le mode interactif, par exemple :

mail -s "Objet du message" toto@exemple.com

S’il s’agit de ta commande précédente, le courriel devrait être envoyé directement. À moins qu’elle ne bloque à cause d’une mauvaise configuration de msmtp. Il faut donc donner aussi ton fichier de configuration et notamment les lignes qui concerne les logs puisque c’est cela qui semble provoquer une erreur.

tu peux ajouter l’option -v pour avoir le mode bavard sur ton terminal

Dans mon exemple ça devient

/usr/bin/mailx -v -s "résul update-perso service" root@localhost < /tmp/resul-opt-update-perso.txt

Tout fonctionne et est lisible par Thunderbird

Capture%20d%E2%80%99%C3%A9cran%20du%202019-12-03%2016-31-24

bah de la fonctionnalité du paramètre “a” via un manpage :roll_eyes:

Comme demandé :

root@debian:~# ls -l /etc/alternatives/mailx
lrwxrwxrwx 1 root root 18 déc.   2 14:35 /etc/alternatives/mailx -> /usr/bin/bsd-mailx

ainsi que ma configuration MSMTP :

root@debian:~# cat /etc/msmtprc
account default
host smtp.office365.com
port 587
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
tls_certcheck on
auth on
user debian@monentreprise.fr
password *****************
from debian@monentreprise.fr
logfile /var/log/msmtp.log
aliases /etc/aliases

mon fichier log :

root@debian:~# ls -la /var/log/msmtp.log
-rw-rw-rw- 1 root root 0 nov.  29 16:53 /var/log/msmtp.log

et mon dernier test en mode verbose:

root@debian:~# echo "Message test" | mail moi@entreprise.fr -v -s "Sujet test" -a /home/moi/backup_20191128-173806.log
le fichier de configuration système /etc/msmtprc est chargé
le fichier de configuration utilisateur /root/.msmtprc est ignoré : Aucun fichier ou dossier de ce type
repli sur le compte par défaut
utilisation du compte default depuis /etc/msmtprc
host = smtp.office365.com
port = 587
source ip = (non défini)
proxy host = (non défini)
proxy port = 0
timeout = désactivé
protocol = smtp
domain = localhost
auth = automatique
user = debian@entreprise.fr
password = *
passwordeval = (non défini)
ntlmdomain = (non défini)
tls = activé
tls_starttls = activé
tls_trust_file = /etc/ssl/certs/ca-certificates.crt
tls_crl_file = (non défini)
tls_fingerprint = (non défini)
tls_key_file = (non défini)
tls_cert_file = (non défini)
tls_certcheck = activé
tls_min_dh_prime_bits = (non défini)
tls_priorities = (non défini)
auto_from = désactivé
maildomain = (non défini)
from = debian@entreprise.fr
add_missing_from_header = activé
add_missing_date_header = activé
remove_bcc_headers = activé
dsn_notify = (non défini)
dsn_return = (non défini)
logfile = /var/log/msmtp.log
logfile_time_format = (non défini)
syslog = (non défini)
aliases = /etc/aliases
lecture des destinataires depuis la ligne de commande et le courriel
<-- 220 PR0P264CA0176.outlook.office365.com Microsoft ESMTP MAIL Service ready at Wed, 4 Dec 2019 08:34:41 +0000
--> EHLO localhost
<-- 250-PR0P264CA0176.outlook.office365.com Hello [46.254.226.109]
<-- 250-SIZE 157286400
<-- 250-PIPELINING
<-- 250-DSN
<-- 250-ENHANCEDSTATUSCODES
<-- 250-STARTTLS
<-- 250-8BITMIME
<-- 250-BINARYMIME
<-- 250-CHUNKING
<-- 250 SMTPUTF8
--> STARTTLS
<-- 220 2.0.0 SMTP server ready
TLS session parameters:
    (TLS1.2)-(ECDHE-SECP256R1)-(RSA-SHA256)-(AES-256-GCM)
Information du certificat TLS :
    Propriétaire:
        Nom Usuel: outlook.com
        Organisation: Microsoft Corporation
        Localité: Redmond
        État ou Province: Washington
        Pays: US
    Émetteur:
        Nom Usuel: DigiCert Cloud Services CA-1
        Organisation: DigiCert Inc
        Pays: US
    Validité:
        Date d'activation: mer. 23 janv. 2019 01:00:00 CET
        Date d'expiration: sam. 23 janv. 2021 13:00:00 CET
    Empreintes:
        SHA256: C4:EE:30:EB:04:FB:7F:D9:BA:0E:F5:54:1E:B4:1E:05:CF:BF:F0:BA:85:14:59:DD:82:90:D8:A4:B7:40:3C:B5
        SHA1 (deprecated): 49:F5:30:34:C0:ED:45:07:CA:92:4F:15:74:2E:2C:2F:E5:22:37:B5
--> EHLO localhost
<-- 250-PR0P264CA0176.outlook.office365.com Hello [46.254.226.109]
<-- 250-SIZE 157286400
<-- 250-PIPELINING
<-- 250-DSN
<-- 250-ENHANCEDSTATUSCODES
<-- 250-AUTH LOGIN XOAUTH2
<-- 250-8BITMIME
<-- 250-BINARYMIME
<-- 250-CHUNKING
<-- 250 SMTPUTF8
--> AUTH LOGIN
<-- 334 VXNlcm5hbWU6
--> ZGViaWFuQGFwYWpoNDEuZnI=
<-- 334 UGFzc3dvcmQ6
--> OWVVM0czJU52
<-- 235 2.7.0 Authentication successful
--> MAIL FROM:<debian@entreprise.fr>
--> RCPT TO:<moi@entreprise.fr>
--> DATA
<-- 250 2.1.0 Sender OK
<-- 250 2.1.5 Recipient OK
<-- 354 Start mail input; end with <CRLF>.<CRLF>
--> From: debian@entreprise.fr
--> Date: Wed, 04 Dec 2019 09:34:41 +0100
--> To: moi@entreprise.fr
--> Subject: Sujet test
--> /home/moi/backup_20191128-173806.log
--> MIME-Version: 1.0
--> Content-Type: text/plain; charset="UTF-8"
--> Content-Transfer-Encoding: 8bit
-->
--> Message test
--> .
<-- 250 2.0.0 OK <PR1PR01MB49861E9E706390B35CF28C25B25D0@PR1PR01MB4986.eurprd01.prod.exchangelabs.com> [Hostname=PR1PR01MB4986.eurprd01.prod.exchangelabs.com]
--> QUIT
<-- 221 2.0.0 Service closing transmission channel
send-mail: impossible d'écrire dans le journal /var/log/msmtp.log : erreur d'ouverture de fichier: Permission non accordée
send-mail: l'entrée du journal était : host=smtp.office365.com tls=on auth=on user=debian@entreprise.fr from=debian@entreprise.fr recipients=moi@entreprise.fr mailsize=265 smtpstatus=250 smtpmsg='250 2.0.0 OK <PR1PR01MB49861E9E706390B35CF28C25B25D0@PR1PR01MB4986.eurprd01.prod.exchangelabs.com> [Hostname=PR1PR01MB4986.eurprd01.prod.exchangelabs.com]' exitcode=EX_OK

Je ne vois pas de PJ

Ok donc tu utilises bien bsd-mailx :wink:

Commence par virer la ligne concernant les logs dans /etc/msmtprc (je pense qu’il y a un bug dans msmtp pour les logs) :
logfile /var/log/msmtp.log et ajoute :

maildomain monentreprise.fr

Et cela devrait fonctionner. D’ailleurs ton retour avec le mode bavard (-v) montre que le message est bien envoyé.

Si tu ne vois pas la pièce jointe dans le courriel reçu, il faudra essayer avec la syntaxe porposée par @grandtoubab en mettant le corps du message dans un fichier texte :

mailx -a /emplacemen/piece/jointe -s "Objet du message" toto@example.com < /emplacement/texte/du/corps

Effectivement… j’ai toujours reçu le mail mais jamais la PJ.
Je n’ai plus de message d’erreur concernant le log après suppression de la ligne logfile. Par contre je n’ai pas non plus de log… :face_with_raised_eyebrow:

J’ai essayé avec :
mailx moi@entreprise.fr -v -s "Sujet test" -a /home/moi/backup_20191128-173806.log < /home/moi/backup_20191128-173806.log

pareil … le corps est bien le contenu de mon log mais pas de PJ

J’ai remarqué la ligne (après le “Subject” :

--> Subject: Sujet test
--> /home/moi/backup_20191128-173806.log

des idées ???

bof uns simple recherche m’indique

To make this more “scriptable”, you can send the message without a body with the following:

la suite ici
https://www.thegeekdiary.com/linux-unix-how-to-send-mails-with-attachments-using-mailx-command/

mail reçu sans PJ et sans message avec :

mailx -a /home/moi/backup_20191128-173806.log -v -s "Sujet test" moi@entreprise.fr < /dev/null

Je viens de vérifier sur une Debian où j’ai mailx installé. Il n’y a pas d’option pour envoyer une pièce jointe, et l’option -a sert à ajouter des en-têtes supplémentaires :

 -a      Specify additional header fields on the command line such as "X-Loop: foo@bar" etc.  It
         can be also used to override MIME headers mail adds by default to each outgoing mail,
         see Character sets and MIME below.  You have to use quotes if the string contains spa‐
         ces.  This argument may be specified more than once, the headers will then be concate‐
         nated.

Donc soit tu utilises la première méthode décrite par le lien donné en #17 par @grandtoubab (avec uuencode), soit tu utilises mailutils ou mutt à la place de bsd-mailx.