Envoi de mail avec PJ via 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.

la version bsd-mailx ne sait pas faire d’attachement, -a est uniquement un ajout dans l’en-tête
pour avoir l’opion -A --attach j’ai remplacé bsd-mailx par mailutils

 mail -s "résul update-perso service" < /tmp/resul-opt-update-perso.txt -A /home/moi/Images/toto.png root@localhost

Dans mon cas si j’ajoute une photo comme pièce jointe le fichier texte est pris aussi comme pièce jointe alors que si le fichier texte est seul il est affiche directement mais c’est peut-être un pb thunderbird

Donc on est dépendant de l’outil installé https://mailutils.org/manual/mailutils.html

OK merci beaucoup @grandtoubab et @Bruno1 pour votre aide.
Je vais donc revenir à MUTT…