Comment envoyer un fichier en pièce jointe à un e-mail à l'aide de la ligne de commande Linux?

289

J'ai créé un script qui s'exécute chaque nuit sur mon serveur Linux qui permet mysqldumpde sauvegarder chacune de mes bases de données MySQL dans des fichiers .sql et de les regrouper sous forme de fichier .tar compressé. La prochaine étape que je veux accomplir est d'envoyer ce fichier tar par courrier électronique à un serveur de messagerie distant pour qu'il soit conservé. J'ai pu envoyer le script brut dans le corps d'un e-mail en redirigeant le fichier texte de sauvegarde mailxcomme suit:

$ cat mysqldbbackup.sql | mailx [email protected]

catfait écho au texte du fichier de sauvegarde qui est canalisé dans le mailxprogramme avec l'adresse e-mail du destinataire passée en argument.

Bien que cela accomplit ce que je dois, je pense que ce pourrait être un pas mieux, est - il possible, en utilisant des scripts shell ou autrement, pour envoyer le fichier .tar compressé à un message e - mail sortant comme pièce jointe ? Cela éviterait d'avoir à traiter de très longs e-mails contenant des données d'en-tête et ayant souvent des problèmes d'habillage de mots, etc.

Kit Roed
la source
1
Pouvez-vous partager le script qui sauvegarde vos bases de données MySQL?
Almino Melo
Désolé, je ne fais pas ça depuis un moment maintenant. Je sais que cela impliquait d'invoquer mysqldumppuis de joindre la sortie à un e-mail (avec mutt). J'ai peut-être même eu une étape qui a également compressé la sortie en zip / tar.gz ...
Kit Roed
1
Purement curieux, pourquoi envoyer vos sauvegardes par e-mail vs scp ou les rsync?
jchook

Réponses:

298

Aucun des mutts n'a travaillé pour moi. Il pensait que l'adresse e-mail faisait partie de la pièce jointe. Devais faire:

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]
rynop
la source
1
J'utilise mutt 1.5.21 (2010-09-15) et il nécessite -un paramètre soit après l'e
nurettin
A travaillé pour moi en utilisant Mutt 1.5.24 (2015-08-30) sur openSUSE Leap 42.1.
Antonio Vinicius Menezes Medei
3
@fugitive signifie "fin des options". Jetez un œil à unix.stackexchange.com/questions/11376/…
rynop
Existe-t-il un moyen de vérifier les exceptions et de réessayer d'envoyer?
ti034
79

Ou, à défaut mutt:

gzip -c mysqldbbackup.sql | uuencode mysqldbbackup.sql.gz  | mail -s "MySQL DB" [email protected]
Daniel Fone
la source
26
Cela envoie la pièce codée en ligne et non en tant que pièce jointe . De nombreux clients de messagerie le reconnaissent cependant et affichent la pièce codée en tant que pièce jointe.
FuePi
4
N'utilisez pas uuencode de nos jours. MIME est légèrement plus complexe mais beaucoup plus convivial.
tripleee
@DavidGiven: Voir par exemple (d'un coup d'œil rapide) toutes les autres réponses à cette question.
tripleee du
6
Aucun d'entre eux n'utilise le courrier!
David Given
Ensuite, par exemple stackoverflow.com/questions/3317174/… et remplacez text/htmlpar le type MIME qui convient à votre pièce jointe. (Pour cet exemple concret, je suppose application/gzip.)
tripleee
43

En fonction de votre version de Linux, elle peut s'appeler mail. Pour citer @David ci-dessus:

mail -s "Backup" -a mysqldbbackup.sql [email protected] < message.txt

ou aussi:

cat message.txt | mail -s "Backup" -a mysqldbbackup.sql [email protected] 
Nathan Fellman
la source
@ KarelBílek: Que diriez-vous de l'autre option?
Nathan Fellman
Les deux solutions ne fonctionnent pas pour moi. J'ai reçu l'e-mail avec Outlook 2013 et l'e-mail ne contient que le nom du fichier
nickel715
2
ma page de -a, --append=HEADER: VALUE append given header to the message being sent
manuel se
2
Nathan, il semble que votre citation de David soit fausse - il a utilisé la muttcommande, non mail. De plus, comme d'autres l'ont souligné, mutt semble maintenant exiger un --argument avant l'adresse. Et je vois que @exhuma et je suis en fait d'accord sur ce que fait l' -aoption mail- je me suis
trompé
7
au lieu de -a, vous devez utiliser -A: -a, --append=HEADER: VALUE append given header to the message being sent -A, --attach=FILE attach FILE
Victor Perov
41

De regarder man mailx, le programme mailx n'a pas d'option pour joindre un fichier. Vous pouvez utiliser un autre programme tel que mutt.

echo "This is the message body" | mutt -a file.to.attach -s "subject of message" [email protected]

Les options de ligne de commande pour mutt peuvent être affichées avec mutt -h.

Chris N
la source
Merci! Cela a fait l'affaire, j'avais du mal à faire muter pour faire l'action silencieusement.
Kit Roed le
10
Voir la réponse ci-dessous ( stackoverflow.com/a/9524359/10608 ) car apparemment la syntaxe a changé pour mutt qui nécessite maintenant un --.
Alexander Bird
29

J'utilise SendEmail, qui a été créé pour ce scénario. Il est conditionné pour Ubuntu, donc je suppose qu'il est disponible

sendemail -f [email protected] -t [email protected] -m "Here are your files!" -a file1.jpg file2.zip

http://caspian.dotconf.net/menu/Software/SendEmail/

Fredrik Wendt
la source
Je crois que ce devrait être "sendEmail" au lieu de "sendemail" dans votre exemple.
Davit
1
Oui et non - la source (caspienne) utilise un E majuscule, alors que c'est une stratégie de dénomination rare pour les outils de ligne de commande (dans le monde Unix), au moins le package Ubuntu de ce logiciel fournit à la fois sendemailet sendEmailen /usr/bin/.
Fredrik Wendt
Mon Xubuntu 14.04.3 n'est pas installéSendEmail
Vitaly Zdanevich
3
"sudo apt install sendemail" pour installer sendemail et ajouter "-f [email protected]" un champ obligatoire depuis pour que la commande fonctionne. sendemail -f [email protected] [email protected] -m "Here are your files!" -a file1.jpg file2.zip
Sailendra Pinupolu
28

J'utilise mpack.

mpack -s subject file [email protected]

Malheureusement, mpack ne reconnaît pas «-» comme un alias pour stdin. Mais le travail suivant, et peut facilement être enveloppé dans un alias (shell) ou un script:

mpack -s subject /dev/stdin [email protected] < file

la source
Cela pourrait fonctionner en bash pour stdin. Je n'ai pas de mpack, donc je n'ai pas essayé:mpack -s subject /dev/stdin [email protected] <(stdout_generating_program)
thomasa88
23
 echo 'These are contents of my mail' | mailx -s 'This is my email subject' -a /path/to/attachment_file.log [email protected]
Sourabh Potnis
la source
4
Ce devrait être la réponse acceptée. Utilise mailx par défaut et fonctionne parfaitement. Mutt v1.5.21 refuse d'envoyer des pièces jointes> 1 Mo lors de l'utilisation de cron.
Joseph
Je cherchais quelque chose qui fonctionne dans EC2 et cela a bien fonctionné.
singularité
6
mailxn'est pas correctement standardisé. Toute réponse qui le recommande devrait signaler cette mise en garde. Il existe au moins trois variantes incompatibles couramment utilisées.
tripleee
13

J'ai écrit une fois cette fonction pour ksh sur Solaris (utilise Perl pour l'encodage base64):

# usage: email_attachment to cc subject body attachment_filename
email_attachment() {
    to="$1"
    cc="$2"
    subject="$3"
    body="$4"
    filename="${5:-''}"
    boundary="_====_blah_====_$(date +%Y%m%d%H%M%S)_====_"
    {
        print -- "To: $to"
        print -- "Cc: $cc"
        print -- "Subject: $subject"
        print -- "Content-Type: multipart/mixed; boundary=\"$boundary\""
        print -- "Mime-Version: 1.0"
        print -- ""
        print -- "This is a multi-part message in MIME format."
        print -- ""
        print -- "--$boundary"
        print -- "Content-Type: text/plain; charset=ISO-8859-1"
        print -- ""
        print -- "$body"
        print -- ""
        if [[ -n "$filename" && -f "$filename" && -r "$filename" ]]; then
            print -- "--$boundary"
            print -- "Content-Transfer-Encoding: base64"
            print -- "Content-Type: application/octet-stream; name=$filename"
            print -- "Content-Disposition: attachment; filename=$filename"
            print -- ""
            print -- "$(perl -MMIME::Base64 -e 'open F, shift; @lines=<F>; close F; print MIME::Base64::encode(join(q{}, @lines))' $filename)"
            print -- ""
        fi
        print -- "--${boundary}--"
    } | /usr/lib/sendmail -oi -t
}
glenn jackman
la source
8
Sur GNU / Linux, on peut utiliser la base64commande au lieu de perl pour l'encodage
MestreLion
12

Vous pouvez utiliser mutt pour envoyer l'e-mail avec pièce jointe

mutt -s "Backup" -a mysqldbbackup.sql [email protected] < message.txt
David Schlosnagle
la source
2
Au moins à partir de mutt 1.5.21 (Ubuntu trusty), vous devez placer l' -aoption après le destinataire :, mutt -s "Backup" [email protected] -a mysqldbbackup.sql < message.txtou utiliser l' --option avant le destinataire comme indiqué dans la réponse de rynop.
nealmcb
10

Envoyez un e-mail contenant du texte brut avec une pièce jointe en texte brut avec mailx:

(
  /usr/bin/uuencode attachfile.txt myattachedfilename.txt; 
  /usr/bin/echo "Body of text"
) | mailx -s 'Subject' [email protected]

Ci-dessous est la même commande que ci-dessus, sans les retours à la ligne

( /usr/bin/uuencode /home/el/attachfile.txt myattachedfilename.txt; /usr/bin/echo "Body of text" ) | mailx -s 'Subject' [email protected]

Assurez-vous d'avoir un fichier /home/el/attachfile.txtdéfini avec ce contenu:

<html><body>
Government discriminates against programmers with cruel/unusual 35 year prison
sentences for making the world's information free, while bankers that pilfer 
trillions in citizens assets through systematic inflation get the nod and 
walk free among us.
</body></html>

Si vous n'avez pas uuencode, lisez ceci: /unix/16277/how-do-i-get-uuencode-to-work

Sous Linux, envoyez un e-mail HTML avec une pièce jointe PDF avec sendmail:

Assurez-vous que ksh est installé: yum info ksh

Assurez-vous que sendmail est installé et configuré.

Assurez-vous que uuencode est installé et disponible: /unix/16277/how-do-i-get-uuencode-to-work

Créez un nouveau fichier appelé test.shet placez-le dans votre répertoire personnel:/home/el

Mettez le code suivant dans test.sh:

#!/usr/bin/ksh
export MAILFROM="[email protected]"
export MAILTO="[email protected]"
export SUBJECT="Test PDF for Email"
export BODY="/home/el/email_body.htm"
export ATTACH="/home/el/pdf-test.pdf"
export MAILPART=`uuidgen` ## Generates Unique ID
export MAILPART_BODY=`uuidgen` ## Generates Unique ID

(
 echo "From: $MAILFROM"
 echo "To: $MAILTO"
 echo "Subject: $SUBJECT"
 echo "MIME-Version: 1.0"
 echo "Content-Type: multipart/mixed; boundary=\"$MAILPART\""
 echo ""
 echo "--$MAILPART"
 echo "Content-Type: multipart/alternative; boundary=\"$MAILPART_BODY\""
 echo ""
 echo "--$MAILPART_BODY"
 echo "Content-Type: text/plain; charset=ISO-8859-1"
 echo "You need to enable HTML option for email"
 echo "--$MAILPART_BODY"
 echo "Content-Type: text/html; charset=ISO-8859-1"
 echo "Content-Disposition: inline"
 cat $BODY
 echo "--$MAILPART_BODY--"

 echo "--$MAILPART"
 echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
 echo "Content-Transfer-Encoding: uuencode"
 echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
 echo ""
 uuencode $ATTACH $(basename $ATTACH)
 echo "--$MAILPART--"
) | /usr/sbin/sendmail $MAILTO

Modifiez les variables d'exportation en haut de test.shpour refléter votre adresse et vos noms de fichiers.

Téléchargez un document pdf de test et mettez-le dans /home/elappelé pdf-test.pdf

Créez un fichier appelé /home/el/email_body.htm et mettez cette ligne dedans:

<html><body><b>this is some bold text</b></body></html>

Assurez-vous que le fichier pdf dispose de 755 autorisations suffisantes.

Exécutez le script ./test.sh

Vérifiez votre boîte de réception, le texte doit être au format HTML et le fichier pdf automatiquement interprété comme un fichier binaire. Faites attention à ne pas utiliser cette fonction plus de 15 fois par jour, même si vous vous envoyez des e-mails, les filtres anti-spam dans gmail peuvent blacklister un domaine crachant des e-mails sans vous donner la possibilité de les laisser passer. Et vous constaterez que cela ne fonctionne plus, ou qu'il ne laisse passer que la pièce jointe, ou que l'e-mail ne passe pas du tout. Si vous devez faire beaucoup de tests à ce sujet, répartissez-les sur plusieurs jours ou vous serez étiqueté comme un spammeur et cette fonction ne fonctionnera plus.

user1651561
la source
1
Pour moi, cela a fonctionné dans l'autre sens. (echo 'Email Body'; uuencode filename filename) | mailx -s 'Subject' [email protected]
Vicky
uuencoden'est pas correctement une pièce jointe. Il intègre simplement une goutte de texte lisible par ordinateur au milieu d'un autre texte. Cela fonctionnait bien quand il n'y avait pas de meilleur mécanisme, mais c'était il y a plus de 20 ans.
tripleee
9

Il y a plusieurs réponses ici suggérant mailou mailxsi cela est plus d'un arrière - plan pour vous aider à interpréter ces derniers dans leur contexte.

Notes historiques

Les origines d'Unix mailremontent dans les brumes de la première histoire de Bell Labs Unix ™ (1969?), Et nous ne pouvons probablement pas espérer entrer dans sa généalogie complète ici. Qu'il suffise de dire qu'il existe de nombreux programmes qui héritent du code de ou réimplémentent (ou héritent du code d'une réimplémentation de) mailet qu'il n'y a pas de base de code unique qui puisse être identifié sans ambiguïté comme "le" mail.

Cependant, l'un des prétendants à cette position est certainement "Berkeley Mail", qui était à l'origine appelé Mailavec un M majuscule dans 2BSD (1978); mais dans 3BSD (1979), il a également remplacé la mailcommande en minuscules , entraînant une nouvelle confusion. SVR3 (1986) comprenait un dérivé appelé mailx. Le xa probablement été ajouté pour le rendre unique et distinct; mais cela aussi a maintenant été copié, réimplémenté et mutilé de sorte qu'il n'y a pas de version individuelle unique qui soit définitive.

À l'époque, la norme de facto pour l'envoi de fichiers binaires par courrier électronique était uuencode. Il existe toujours, mais présente de nombreux problèmes d'utilisation; dans la mesure du possible, vous devez envoyer des pièces jointes MIME à la place, sauf si vous vous efforcez spécifiquement de pouvoir communiquer avec la fin des années 1980.

MIME a été introduit au début des années 1990 pour résoudre plusieurs problèmes avec le courrier électronique, notamment la prise en charge de divers types de contenu autres que du texte brut dans un seul jeu de caractères qui ne convient vraiment qu'à un sous-ensemble de l'anglais (et, nous dit-on, hawaïen ). Cela a introduit la prise en charge des messages en plusieurs parties, l'internationalisation, les types de contenu riche, etc., et a rapidement gagné du terrain tout au long des années 1990.

(Les notes Heirloom mail/ mailxhistoire ont été très utiles lors de la composition de ce document, et valent certainement la peine d'être lues si vous êtes dans ce genre de chose.)

Offres actuelles

Depuis 2018, Debian a trois paquets qui incluent une commande mailou mailx. (Vous pouvez rechercherProvides: mailx .)

debian$ aptitude search ~Pmailx
i   bsd-mailx                       - simple mail user agent
p   heirloom-mailx                  - feature-rich BSD mail(1)
p   mailutils                       - GNU mailutils utilities for handling mail

(Je ne distingue pas Debian comme une recommandation; c'est ce que j'utilise, donc je le connais; et cela fournit un moyen de distinguer sans ambiguïté les différentes alternatives en faisant référence à leurs noms de paquets respectifs. C'est évidemment aussi la distribution de quel Ubuntu obtient ces packages.)

  • bsd-mailxest une méthode relativement simple mailxqui ne semble pas prendre en charge l'envoi de pièces jointes MIME. Voir son page de manuel et notez que c'est celui que vous attendez d'un système * BSD, y compris MacOS, par défaut.
  • heirloom-mailxest maintenant appelé s-nailet prend en charge l'envoi de pièces jointes MIME avec -a. Voir sa page de manuel et plus généralement le projet Heirloom
  • mailutilsaka GNU Mailutils inclut un wrapper mail/ mailxcompatibilité qui prend en charge l'envoi de pièces jointes MIME avec-A

Avec ces problèmes, si vous avez besoin que votre code soit portable et puisse dépendre d'un package quelque peu complexe, le moyen le plus simple d'envoyer des pièces jointes MIME de manière portative est d' utiliser mutt.

tripleee
la source
J'ai initialement posté cela comme une réponse à une question en double modérément populaire stackoverflow.com/questions/902591/…
tripleee
4

Une autre alternative - Swaks (couteau suisse pour SMTP).

swaks -tls \
    --to ${MAIL_TO} \
    --from ${MAIL_FROM} \
    --server ${MAIL_SERVER} \
    --auth LOGIN \
    --auth-user ${MAIL_USER} \
    --auth-password ${MAIL_PASSWORD} \
    --header "Subject: $MAIL_SUBJECT" \
    --header "Content-Type: text/html; charset=UTF-8" \
    --body "$MESSAGE" \
    --attach mysqldbbackup.sql
Alexander Yancharuk
la source
2

metamail a l'outil metasend

metasend -f mysqlbackup.sql.gz -t [email protected] -s Backup -m application/x-gzip -b
Gunstick
la source
Celui-ci était installé presque partout, mais presque jamais utilisé. Parce qu'il n'était pas entretenu depuis longtemps (et est toujours AFAIK), il a été supprimé du jeu d'outils standard de facto sur de nombreuses plates-formes.
tripleee
2

j'ai utilisé

echo "Start of Body" && uuencode log.cfg readme.txt | mail -s "subject" "[email protected]" 

et cela a bien fonctionné pour moi ....

poncho
la source
1

J'utilise généralement la commande mail uniquement sur RHEL. J'ai essayé mailx et c'est assez efficace.

mailx -s "Sending Files" -a First_LocalConfig.conf -a
Second_LocalConfig.conf [email protected]

This is the content of my msg.

.
Alejandro Santillan
la source
1

le moyen le plus court pour moi est

file=filename_or_filepath;uuencode $file $file|mail -s "optional subject" email_address

donc pour votre exemple, ce sera

file=your_sql.log;gzip -c $file;uuencode ${file}.gz ${file}|mail -s "file with magnets" [email protected]

la bonne partie est que je peux le rappeler avec Ctrl + r pour envoyer un autre fichier ...

Pipo
la source
Les accolades ne vous feront pas grand-chose mais pour être complètement portable, vous devez utiliser des guillemets doubles autour des variables. Voir aussi stackoverflow.com/questions/10067266/…
tripleee
1

Depuis la machine source

mysqldump --defaults-extra-file=sql.cnf database | gzip | base64 | mail [email protected]

Sur la machine de destination. Enregistrez le corps du courrier reçu sous db.sql.gz.b64 ; puis..

base64 -D -i db.sql.gz.b64 | gzip -d | mysql --defaults-extra-file=sql.cnf
Konchog
la source
0

Juste pour ajouter mes 2 cents, j'écrirais mon propre script PHP:

http://php.net/manual/en/function.mail.php

Il existe de nombreuses façons de faire la pièce jointe dans les exemples de cette page.

Mike Graf
la source
2
Tous les serveurs peuvent ne pas avoir PHP installé. Si vous voulez vraiment descendre le chemin "écrire votre propre script", alors perl ou python sont bien mieux adaptés car ils sont généralement disponibles par défaut.
exhuma
shest encore plus omniprésent. Il y a des questions en double avec des réponses avec de bons exemples; Voici le mien.
tripleee
0

mailxa -amaintenant une option pour les pièces jointes.

Allan Pinto
la source
2
L'option "-a" est pour les en
Yves Martin
man mail [x], version 12.5 du 10/9/10 (il y a quelques années) dit clairement -a file Attachez le fichier donné au message. »
fche
4
certaines versions de mailxdo. Je pense qu'il y a deux implémentations. L'un -aest pour les pièces jointes, l'autre pour les en-têtes.
exhuma
1
La version de mailx dans Ubuntu provient de GNU et -a signifie ajouter un en-tête. manpages.ubuntu.com/manpages/lucid/en/man1/mailx.1.html Quel système et quel mailx fait une pièce jointe?
nealmcb
3
Dans la nouvelle implémentation, "-a" est pour les en-têtes et "-A" pour les attachements
Avi Mehenwal
0

Pas une méthode pour envoyer des e-mails, mais vous pouvez utiliser un serveur Git en ligne (par exemple Bitbucket ou un service similaire) pour cela.

De cette façon, vous pouvez utiliser des git pushcommandes et toutes les versions seront stockées de manière compressée et organisée.

Yoav
la source
0

Voici comment je fais avec un gros fichier journal dans CentOS:

MAIL="`whereis mail | awk '{print $2}'`"
WHOAMI="`whoami`"
HOSTNAME="`hostname`"
EMAIL"[email protected]"
LOGDIR="/var/log/aide"
LOGNAME="`basename "$0"`_`date "+%Y%m%d_%H%M"`"
# Arhiveerime ning kui hästi, saadame edasi:
/bin/tar -zcvf ${LOGDIR}/${LOGNAME}.tgz "${LOGDIR}/${LOGNAME}.log" > /dev/null 2>&1
if [ $? -eq 0 ]; then
    cd ${LOGDIR}
    # This works too. The message content will be taken from text file below
    # echo 'Hello!' >/root/scripts/audit_check.sh.txt
    # echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -q /root/scripts/audit_check.sh.txt -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
    echo "Arhiivifail manuses" | ${MAIL} -s "${HOSTNAME} Aide report" -a ${LOGNAME}.tgz -S from=${WHOAMI}@${HOSTNAME} ${EMAIL}
    /bin/rm "${LOGDIR}/${LOGNAME}.log"
fi
dagorv
la source
Pourquoi définissez-vous WHOAMIet HOSTNAME deux fois?
David C. Rankin
Cela a plusieurs erreurs de style de codage shell. shellcheck.net en indiquera certains, mais pas tous.
tripleee
0

Si le fichier est du texte, vous pouvez l'envoyer plus facilement dans le corps comme:

sendmail [email protected] < message.txt
nurp
la source
1
Cela ne l'envoie pas en pièce jointe, ni même en tant que corps du message. Sendmail s'attend à ce que son entrée soit un message électronique RFC5322 complet et bien formé, et peut échouer de manière intéressante s'il ne l'est pas.
tripleee
0

en utilisant la commande mailx

 echo "Message Body Here" | mailx -s "Subject Here" -a file_name [email protected]

en utilisant sendmail

#!/bin/ksh

fileToAttach=data.txt

`(echo "To: [email protected]"
  echo "Cc: [email protected]"
  echo "From: Application"
  echo "Subject: your subject"
  echo  your body
  uuencode $fileToAttach $fileToAttach
  )| eval /usr/sbin/sendmail -t `;
Girdhar Singh Rathore
la source
1
sendmail est un bel exemple, heureux de l'avoir trouvé ici.
Honza P.
Notez que vous avez besoin d'une ligne vide au début de "votre corps", sinon le corps disparaîtra dans les en-têtes, ou cassera peut-être complètement le message. Voir aussi les notes ailleurs sur l'évitement uuencodeen faveur de MIME.
tripleee
Et les evalretours monstrueux et mystérieux autour de l'ensemble de l'engin sont complètement inutiles ici.
tripleee
0

Mailutils en fait un morceau de gâteau

echo "Body" | mail.mailutils -M -s "My Subject" -A attachment.pdf [email protected]
  • -A file joint un fichier
  • -M active MIME, afin que vous puissiez avoir une pièce jointe et un corps en texte brut.

S'il n'est pas encore installé, exécutez

sudo apt install mailutils
rumpel
la source
0

Selon vos options de commande de messagerie (vérifiez avec man mail) et la version que vous pourriez faire

echo yourBody|mail -s yoursubject -A /your/attachment/file [email protected]

Pipo
la source
Cela semble dupliquer les réponses existantes sans ajouter quoi que ce soit de nouveau, en particulier l' -Aoption est spécifique à la mailutilsversion GNU de mailcomme cela a été souligné dans ma réponse ainsi qu'à @ rumpel's
tripleee
-1

Si mutt ne fonctionne pas ou n'est pas installé, essayez ceci-

*#!/bin/sh

FilePath=$1
FileName=$2
Message=$3
MailList=$4

cd $FilePath

Rec_count=$(wc -l < $FileName)
if [ $Rec_count -gt 0 ]
then
(echo "The attachment contains $Message" ; uuencode $FileName $FileName.csv ) | mailx -s "$Message" $MailList
fi*
Paras Singh
la source