56

私はLinuxシェルを実行しているサーバーにいます。 簡単なファイルを受信者に郵送する必要があります。 これを行う方法、優先的には郵便物コマンド?

更新:代わりにmuttを使って、良い解決策を得てください。

$ echo | mutt -a syslogs.tar.gz admin@domain.org

13 답변


47

uuencodeを使用した例

uuencode surfing.jpeg surfing.jpeg | mail sylvia@home.com

と参考記事:

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


  • uuencodeは「デフォルト」です。 GNUツール?私の箱は持っていないようです。 - Seiti
  • 参考記事は本当に役に立ちました!ありがとうございます。 - Seiti
  • @Seiti:uuencodeはsharutilsの一部です、そしてそれはGNUソフトウェアです。 Ubuntuパッケージもsharutilsと呼ばれています。gnu.org/software/sharutils - Janus Troelsen
  • これは、エンコードされていない添付ファイルを許可する受信者にのみ機能します。 - Stefan Schmidt
  • これは1990年代初頭に立ち往生しているエコシステムのための良い回避策ですが、現代の世界で好まれる解決策はMIMEに切り替えることです。解決策はmuttそれはうまくそして合理的に移植可能です。 - tripleee

20

$ echo | mutt -a syslogs.tar.gz admin@domain.org

しかし、mail(またはmailx)ではなくmuttを使用しています。


  • これは私のためにそれをやった:D - yuudachi
  • QUITEは私のために働きませんでした。引数の順序が異なりました。うまくいったのは:echo | mutt admin@domain.org -a syslogs.tar.gz。私はmuttバージョン1.5.20を使っています。 - Marcus
  • 私はUnixからメールサーバーにログを送ることができます。ありがとう - Hongtao

18

mail私が試した最新のLinuxのすべてのバージョンでそれを行うことができます。他のソフトウェアは必要ありません。

matiu@matiu-laptop:~$ mail -a doc.jpg someone@somewhere.com
Subject: testing

This is a test
EOT

入力が終わったらCtrl + Dキーを押します。


  • 正確ではありません。のバージョンがありますmailこれをサポートしていますが、確かに「普通の」とは言えませんmail"それどころか、いくつかの近代化されたバージョンまたはバリアントどのプラットフォームでどのバージョンを使用しているかを指定すると役に立ちます。 - tripleee
  • これはHeirloom mailxバージョン12.5 6/20/10を使用しているubuntu 14.04にあります。メモリからは、centos 6、ubuntu 12.04、centos 7でも動作します。 - matiu
  • 私は対話モードでこれを行うことができました、私はこれのスクリプト版があるかどうか疑問に思いましたか? - Nap
  • ユーザーの操作を必要としないようにするには、次のようにします。echoこれはテストです。 mail -a doc.jpg -s"テスト" someone@somewhere.com - matiu
  • RHEL 6.8 mail ver:12.4で動作しました7/29/08 - SidJ

12

mailx同様に役立つかもしれません。 mailxのmanページから:

-a file
     Attach the given file to the message.

簡単ですよね。


  • これはUbuntuのmailxではないことに注意してください。それを使って、-a手段Specify additional header fields on the command line such as "X-Loop: foo@bar" etc. You have to use quotes if the string contains spaces. This argument may be specified more than once, the headers will then be concatenated. - Janus Troelsen
  • 俺のmailxサポートしていません-a(CentOSのmailx-8.1.1-44.2.2パッケージ) - einpoklum
  • 私のサポートしていない-aどちらか(OS X 10.7.5) - Stefan Schmidt

11

私の答えはmailに加えてbase64が必要ですが、いくつかのバージョンのuuencodeも-mでbase64を実行することができます。あるいはmimeを忘れてプレーンなuuencode出力を使うこともできます。

   FROM=me@mydomain.com
   TO=someone@mydomain.com
   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


  • muttを使用する場合、何らかの理由で暗号化された添付ファイルはエンコード時に400〜500%増加し、基本的に2MB以下の添付ファイルに制限されていました。そのため、この方法を使用してbase64でエンコードされた添付ファイルを使用して最初から電子メールを作成しなければなりませんでした。sendmail -t代わりに。 - Kyle MacFarlane
  • いい答え - 私は猫の追加部分が好きです。 - bgs
  • 適切なMIMEツールにアクセスできない場合は、これは便利ですが、MIME構造を手作業でつなぎ合わせるのは面倒です。あなたが一度以上の必要性があるならば、あなたはおそらくあなたのためにこれらのステップをカプセル化するツールを見つけたいと思うでしょう。 - tripleee
  • そして、それはあなたを想定していますmailMIME入力を選択しませんが、に切り替えることができます| sendmail -oi -tその場合、パイプラインの終わりに。その機能を必要としないmailラッパーはこの時点でもうあなたに提供しません。 - tripleee
  • 最後の行はecho "--$boundary--"最後の閉じ括弧としてこれをマークするために、終わりに2つのダッシュがある閉じ括弧の前。 - tripleee

7

mailx -a /path/to/file email@address

対話モードに入り( "Subject:"とそれから空白行が表示されます)、件名を入力してから本文を入力してヒットします。Ctrl+D(EOT)を終了します。


  • Mac 10.7では、これを実行するとエラーが発生します。mailx: illegal option -- a - isomorphismes
  • これは、OSXにはLinuxのような最新の最新のCLIユーティリティがないからです。自作やmacportsを使ってcoreutilsをインストールする - f0ster
  • @ f0stermailxGNU coreutilsの一部ではありません。あなたはおそらくのバージョンを見つけることができますmailxこの使い方をサポートしているOSXの場合、リンクがない場合、これはまったく役に立ちません。複数のバージョンがあり、その多くはこの使用法をサポートしていません。 - tripleee

4

mpack -a -s「ねえ、これがあなたの報告になるでしょうか」 -m 0 -cアプリケーション/ x-tar-gz survey_results.tar.gz hesco@example.net

mpackとmunpackは、mailxを拡張するためにメタメールと一緒に働きます。 また、HTMLマークアップと添付ファイルが散りばめられた最新の電子メールでも便利です。

一緒に取られるこれらの4つのパッケージはあなたが扱うことを可能にするでしょう あなたがguiメールクライアントに入れることができるどんな電子メールでも。


  • これは私にはうまくいきましたが、Ubuntu 12.04ではうまくいっていないようです - Shanmu

2

ubuntu 10.4を使用して、これがmuttソリューションの書き方です。

echo | mutt -a myfile.zip -- admin@domain.org



1

ここにはmuttやmailxを使った答えがたくさんありますし、mailが "-a"をサポートしていないという人もいます。

まず、mailutilsからのUbuntu 14.0.4メールはこれをサポートします。

mail -Aファイル名-s "subject" email@example.com

次に、「man mail」コマンドを使用して「attach」を検索することでわかりました。


1

以下はUnix / Linuxをインストールする際のまともな解決策であり、これは異常なプログラム機能に依存しません。これは、複数行のメッセージ本文、複数の添付ファイル、および他のすべての一般的な機能をサポートします。mailx

残念ながら、それは一行に収まりません。

#!/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" nobody@test-address.com < out-${DT_STAMP}.mail

# Clean up temporary files
rm body-${DT_STAMP}.mail
rm attachments-${DT_STAMP}.mail
rm out-${DT_STAMP}.mail



0

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 "youremail@domain.com anotheremail@domain.com"

メールの添付ファイルを受信したときに、uuencodeを使用したことがある場合は、uudecodeが必要です。

uudecode abc.gz.enc

#これは、uuencodeの2番目の引数と同じ名前のオリジナルのファイルを生成します。


  • あなたが持っているならmailxサポートする-aMIME添付ファイルを含めるために、別にする必要は全くありません。uuencodeそれら。添付すると、適切なコンテンツ転送エンコーディングでコンテンツがラップされます。base64必要ならば - これは事実ですもっとポータブルで堅牢uuencode、そして明らかにもっともっと使える。 - tripleee

0

mailxでは、次のことができます。

mailx -s "My Subject"  -a ./mail_att.csv -S from=noreply@foo.com  recipient@bar.com < ./mail_body.txt

これは私たちのGNU Linuxサーバではうまく機能しましたが、残念ながら私の開発環境はMac OS Xであり、これには古いBSDバージョンのmailxしかありません。通常、私はCore BSDよりも良いバージョンのunixコマンドを取得するためにCoreutilsを使いますが、mailxはCoreutilsにはありません。

無関係のスレッドでnotpeterによる解決策を見つけた((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を持っています。

(不十分なクロスリンクまたは帰属をお詫び申し上げます、私はこのサイトに初めて来ました。)


-1

私が使うMailutilsにそして紛らわしい部分はファイルを添付するためにあなたは大文字のAパラメータを使う必要があるということです。以下は一例です。

echo 'here you put the message body' | mail -A syslogs.tar.gz admin@domain.org

あなたのメールコマンドがmailutilsからのものであるかどうか知りたいのならば、単に "mail -V"を実行してください。

root@your-server:~$ mail -V
mail (GNU Mailutils) 2.99.98
Copyright (C) 2010 Free Software Foundation, inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

リンクされた質問


関連する質問

最近の質問