Je suis sur un serveur exécutant un shell Linux. J'ai besoin d'envoyer un fichier simple à un destinataire. Comment faire cela, en utilisant de préférence uniquement la commande mail?
UPDATE : vous avez une bonne solution, en utilisant mutt à la place:
$ echo | mutt -a syslogs.tar.gz [email protected]
Exemple utilisant uuencode:
uuencode surfing.jpeg surfing.jpeg | mail [email protected]
et article de référence:
http://www.shelldorado.com/articles/mailattachments.html
tu peux apt install sharutils
pour avoir la commande uuencode
$ echo | mutt -a syslogs.tar.gz [email protected]
Mais il utilise mutt, pas mail (ou mailx).
mail
sur chaque version de Linux moderne que j'ai essayée peut le faire. Pas besoin d'autres logiciels:
matiu@matiu-laptop:~$ mail -a doc.jpg [email protected]
Subject: testing
This is a test
EOT
ctrl + D quand vous avez fini de taper.
mailx pourrait aussi aider. À partir de la page de manuel mailx:
-a file
Attach the given file to the message.
Assez facile, non?
Ma réponse nécessite base64 en plus du courrier, mais certaines versions de uuencode peuvent aussi utiliser base64 avec -m, ou vous pouvez oublier mime et utiliser la sortie plain uuencode ...
[email protected]
[email protected]
SUBJECT="Auto emailed"
MIME="application/x-gzip" # Adjust this to the proper mime-type of file
FILE=somefile.tar.gz
ENCODING=base64
boundary="---my-unlikely-text-for-mime-boundary---$$--"
(cat <<EOF
From: $FROM
To: $REPORT_DEST
Subject: $SUBJECT
Date: $(date +"%a, %b %e %Y %T %z")
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="$boundary"
Content-Disposition: inline
--$boundary
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
This email has attached the file
--$boundary
Content-Type: $MIME;name="$FILE"
Content-Disposition: attachment;filename="$FILE"
Content-Transfer-Encoding: $ENCODING
EOF
base64 $FILE
echo ""
echo "--$boundary" ) | mail
mailx -a /path/to/file email@address
Vous pouvez passer en mode interactif (vous y serez invité avec "Subject:" puis une ligne vide), entrez un sujet, puis un corps et appuyez sur Ctrl+D (EOT) pour finir.
mpack -a -s "Hey: est-ce que cela peut servir de rapport?" -m 0 -c application/x-tar-gz survey_results.tar.gz [email protected]
mpack et munpack collaborent avec metamail pour étendre mailx et le rendre utile avec les e-mails modernes encombrés de balises HTML et de pièces jointes.
Ces quatre paquets pris ensemble vous permettront de gérer tous les courriels que vous pourriez dans un client de messagerie gui.
En utilisant Ubuntu 10.4, voici comment est écrite la solution mutt
echo | mutt -a myfile.Zip -- [email protected]
Ce qui suit est une solution décente pour les installations Unix/Linux, qui ne repose sur aucune fonctionnalité inhabituelle du programme. Cela prend en charge un corps de message multiligne, plusieurs pièces jointes et toutes les autres fonctionnalités typiques de mailx
.
Malheureusement, il ne tient pas sur une seule ligne.
#!/bin/ksh
# Get the date stamp for temporary files
DT_STAMP=`date +'%C%y%m%d%H%M%S'`
# Create a multi-line body
echo "here you put the message body
which can be split across multiple lines!
woohoo!
" > body-${DT_STAMP}.mail
# Add several attachments
uuencode File1.pdf File1.pdf > attachments-${DT_STAMP}.mail
uuencode File2.pdf File2.pdf >> attachments-${DT_STAMP}.mail
# Put everything together and send it off!
cat body-${DT_STAMP}.mail attachments-${DT_STAMP}.mail > out-${DT_STAMP}.mail
mailx -s "here you put the message subject" [email protected] < out-${DT_STAMP}.mail
# Clean up temporary files
rm body-${DT_STAMP}.mail
rm attachments-${DT_STAMP}.mail
rm out-${DT_STAMP}.mail
Il y a beaucoup de réponses ici en utilisant mutt ou mailx ou des personnes disant que le courrier ne supporte pas "-a"
Premièrement, le courrier Ubuntu 14.0.4 de mailutils prend en charge ceci:
mail -A nomfichier -s "sujet" [email protected]
Deuxièmement, j'ai constaté qu'en utilisant la commande "man mail" et en recherchant "attach"
Sur Linux, je suggérerais,
# FILE_TO_BE_ATTACHED = abc.gz
uuencode abc.gz abc.gz > abc.gz.enc # This is optional, but good to have
# to prevent binary file corruption.
# also it make sure to get original
# file on other system, w/o worry of endianness
# Sending Mail, multiple attachments, and multiple receivers.
echo "Body Part of Mail" | mailx -s "Subject Line" -a attachment1 -a abc.gz.enc "[email protected] [email protected]"
À la réception du courrier en pièce jointe, si vous avez utilisé uuencode, vous aurez besoin de uudecode.
uudecode abc.gz.enc
# Ceci générera un fichier original avec un nom identique à celui du deuxième argument de uuencode.
Avec mailx vous pouvez faire:
mailx -s "My Subject" -a ./mail_att.csv -S [email protected] [email protected] < ./mail_body.txt
Cela a très bien fonctionné sur nos GNU serveurs Linux), mais malheureusement, mon environnement de développement est Mac OsX, qui ne dispose que d’une ancienne version BSD de mailx. Normalement, j’utilise Coreutils pour obtenir de meilleures versions de commandes unix que les Mac BSD, mais mailx n’est pas dans Coreutils.
J'ai trouvé une solution de notpeter dans un thread indépendant ( https://serverfault.com/questions/196001/using-unix-mail-mailx-with-a-modern-mail-server-imap-instead-of) -mbox-files ) qui devait télécharger le paquet binaire Heirloom mailx OSX de http://www.tramm.li/iWiki/HeirloomNotes.html . Il a un mailx plus complet qui peut gérer la syntaxe de commande ci-dessus.
(Toutes mes excuses pour les liens croisés médiocres ou l'attribution, je suis nouveau sur le site.)