Linux Shellを実行しているサーバーにいます。簡単なファイルを受信者にメールで送信する必要があります。これを行う方法、できればmailコマンドのみを使用しますか?
UPDATE:代わりにmuttを使用して、良い解決策を得ました:
$ echo | mutt -a syslogs.tar.gz [email protected]
Uuencodeを使用した例:
uuencode surfing.jpeg surfing.jpeg | mail [email protected]
および参照記事:
http://www.shelldorado.com/articles/mailattachments.html
apt install sharutils
でuuencode
コマンドを使用できます
$ echo | mutt -a syslogs.tar.gz [email protected]
ただし、メール(またはmailx)ではなくmuttを使用します。
mail
は、私が試した現代のLinuxのすべてのバージョンで実行できます。他のソフトウェアは必要ありません:
matiu@matiu-laptop:~$ mail -a doc.jpg [email protected]
Subject: testing
This is a test
EOT
入力が完了したら、ctrl + d。
私の答えはメールに加えてbase64を必要としますが、いくつかのuuencodeバージョンは-mでbase64を行うこともできます、またはMIMEを忘れてプレーンな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
インタラクティブモードに移行し(「Subject:」と空行が表示されます)、件名を入力してから本文を入力し、ヒットします。 Ctrl+D (EOT)終了します。
mpack -a -s「ねえ、これはあなたのレポートとして役立つでしょうか?」 -m 0 -c application/x-tar-gz survey_results.tar.gz [email protected]
mpackとmunpackは、metamailと連携してmailxを拡張し、htmlマークアップと添付ファイルが散らばっている最新の電子メールで使用できるようにします。
これらの4つのパッケージを一緒に使用すると、guiメールクライアントでできるすべての電子メールを処理できます。
Ubuntu 10.4を使用して、これがmuttソリューションの記述方法です。
echo | mutt -a myfile.Zip -- [email protected]
以下は、Unix/Linuxインストール全体にわたる適切なソリューションであり、通常とは異なるプログラム機能に依存しません。これは、複数行のメッセージ本文、複数の添付ファイル、およびmailx
の他のすべての典型的な機能をサポートします。
残念ながら、1行には収まりません。
#!/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
ここではmuttやmailxを使用したり、メールが「-a」をサポートしていないと言っている人に多くの回答があります。
まず、mailutilsからのUbuntu 14.0.4メールはこれをサポートしています。
mail -A filename -s "subject" [email protected]
第二に、「man mail」コマンドを使用して「attach」を検索することにより、
Linuxでは、
#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]"
Uuencodeを使用した場合、メールの添付ファイルを受信すると、uudecodeが必要になります
uudecode abc.gz.enc
#これは、uuencodeの2番目の引数と同じ名前の元のファイルを生成します。
Mailxでできること:
mailx -s "My Subject" -a ./mail_att.csv -S [email protected] [email protected] < ./mail_body.txt
これは、私たちのGNU Linuxサーバーでうまく機能しましたが、残念ながら私の開発環境はMac OsXで、mailxの古いBSDバージョンしかありません。通常、私はCoreutilsを使用してMac BSDコマンドよりも優れたバージョンのUNIXコマンドを取得しますが、mailxはCoreutilsにはありません。
関係のないスレッド( https://serverfault.com/questions/196001/using-unix-mail-mailx-with-a-modern-mail-server-imap-instead-of -mbox-files )これは、Heirloom mailx OSXバイナリパッケージを http://www.tramm.li/iWiki/HeirloomNotes.html からダウンロードすることでした。上記のコマンド構文を処理できる、より機能的なmailxがあります。
(リンクまたはリンクの帰属が悪いことをおologiesびします。このサイトは初めてです。)