Ich arbeite auf einem Server mit einer Linux-Shell. Ich muss eine einfache Datei an einen Empfänger senden. Wie mache ich das, vorzugsweise mit dem mail Befehl?
UPDATE : habe eine gute Lösung gefunden, benutze stattdessen mutt:
$ echo | mutt -a syslogs.tar.gz [email protected]
Beispiel mit uuencode:
uuencode surfing.jpeg surfing.jpeg | mail [email protected]
und Referenzartikel:
http://www.shelldorado.com/articles/mailattachments.html
du könntest apt install sharutils
um den Befehl uuencode
zu haben
$ echo | mutt -a syslogs.tar.gz [email protected]
Aber es wird mutt verwendet, nicht mail (oder mailx).
mail
auf jeder Version von modernem Linux, die ich ausprobiert habe, kann es tun. Keine Notwendigkeit für andere Software:
[email protected]:~$ mail -a doc.jpg [email protected]
Subject: testing
This is a test
EOT
strg + D, wenn Sie fertig sind.
mailx könnte auch helfen. Aus der mailx-Manpage:
-a file
Attach the given file to the message.
Ziemlich einfach, oder?
Meine Antwort benötigt base64 zusätzlich zu mail, aber einige Uuencode-Versionen können auch base64 mit -m ausführen, oder Sie können MIME vergessen und die einfache Uuencode-Ausgabe verwenden ...
[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 protected]
Sie können in den interaktiven Modus wechseln (es wird Sie mit "Betreff:" und einer leeren Zeile auffordern), einen Betreff eingeben, dann einen Text eingeben und drücken Ctrl+D (EOT) zum Beenden.
mpack -a -s "Hey, könnte das als dein Bericht dienen?" -m 0 -c application/x-tar-gz survey_results.tar.gz [email protected]
mpack und munpack arbeiten mit metamail zusammen, um mailx zu erweitern und es für moderne E-Mails mit HTML-Markierungen und Anhängen nützlich zu machen.
Mit diesen vier Paketen können Sie alle E-Mails verarbeiten, die Sie in einem GUI-Mail-Client haben.
Mit Ubuntu 10.4 wird diese Mutt-Lösung geschrieben
echo | mutt -a myfile.Zip -- [email protected]
Das Folgende ist eine anständige Lösung für alle Unix/Linux-Installationen, die keine ungewöhnlichen Programmfunktionen benötigt. Dies unterstützt einen mehrzeiligen Nachrichtentext, mehrere Anhänge und alle anderen typischen Funktionen von mailx
.
Leider passt es nicht in eine einzelne Zeile.
#!/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
Hier gibt es viele Antworten, die mutt oder mailx verwenden, oder Leute, die sagen, dass mail "-a" nicht unterstützt.
Erstens unterstützt Ubuntu 14.0.4 Mail von mailutils dies:
mail -A Dateiname -s "Betreff" [email protected]
Zweitens fand ich das, indem ich den Befehl "man mail" verwendete und nach "attach" suchte.
Unter Linux würde ich vorschlagen,
# 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]"
Wenn Sie nach Erhalt des E-Mail-Anhangs den UUDE-Code verwendet haben, benötigen Sie diesen
uudecode abc.gz.enc
# Dies erzeugt eine Datei als Original mit demselben Namen wie das zweite Argument für uuencode.
Mit mailx können Sie:
mailx -s "My Subject" -a ./mail_att.csv -S [email protected] [email protected] < ./mail_body.txt
Dies funktionierte auf unseren GNU Linux Servern sehr gut, aber leider ist meine Entwicklungsumgebung Mac OsX, der nur eine beschissene alte BSD-Version von mailx enthält. Normalerweise benutze ich Coreutils, um bessere Versionen von Unix-Befehlen als die zu erhalten Mac BSD, aber mailx ist nicht in Coreutils.
Ich habe eine Lösung von notpeter in einem nicht verwandten Thread ( https://serverfault.com/questions/196001/using-unix-mail-mailx-with-a-modern-mail-server-imap-instead-of gefunden -mbox-files ) die das Heirloom mailx OSX-Binärpaket von http://www.tramm.li/iWiki/HeirloomNotes.html herunterladen sollten. Es hat ein besseres mailx, das die obige Befehlssyntax verarbeiten kann.
(Entschuldigung für schlechte Verlinkung oder Zuschreibung, ich bin neu auf der Website.)