web-dev-qa-db-fra.com

Comment joindre un fichier en utilisant la commande mail sous Linux?

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]
58
Seiti

Exemple utilisant uuencode:

uuencode surfing.jpeg surfing.jpeg | mail [email protected]

et article de référence:

http://www.shelldorado.com/articles/mailattachments.html

Remarque:

tu peux apt install sharutils pour avoir la commande uuencode

48
Jon
$ echo | mutt -a syslogs.tar.gz [email protected]

Mais il utilise mutt, pas mail (ou mailx).

20
Seiti

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.

20
matiu

mailx pourrait aussi aider. À partir de la page de manuel mailx:

-a file
     Attach the given file to the message.

Assez facile, non?

12
David Winslow

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
11
njsf
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.

7
autonymous

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.

4
Hugh Esco

En utilisant Ubuntu 10.4, voici comment est écrite la solution mutt

echo | mutt -a myfile.Zip -- [email protected]

2
Antony Gibbs

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
1
JonathanDavidArndt

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"

1
mbrandeis

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.

0
prashant

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.)

0
yokeho