16

私は使ってきました

 mail -s "here is a log file" "person@example.com" < log/logfile.log

以前はヘッダーを使用していました。

User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

しかし、これでファイルが長くなり、名前のない添付ファイルが表示されます。

User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64

したがって、他のすべてが失敗した場合は、マニュアルを確認してくださいman mail...

NAME
       mailx - send and receive Internet mail

SYNOPSIS
       mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops]
              [-A account] [-S variable[=value]] to-addr . . .

これらのオプションはどれも役に立たないようですが、どうすれば強制できContent-Type: text/plainますか?

4

5 に答える 5

11

マニュアルページから始めるのが良いでしょう!セクションに到達するまで読み続けMIME TYPES、次の点に細心の注意を払ってください。

それ以外の場合、またはファイル名に拡張子がない場合は、コンテンツタイプtext/plainまたはapplication/octet-streamが使用されます。1つ目はテキストまたは国際テキストファイル用で、2つ目は改行と水平以外の書式設定文字を含むファイル用です。タビュレーター。

したがって、メッセージに改行とタブ以外の「フォーマット文字」(一般に制御文字を意味する)が含まれている場合、メッセージは自動的にとして分類されapplication/octet-streamます。データをよく見ると、いくつかの制御文字が浮かんでいるのがわかると思います。

これを回避するには...

  • メインのメッセージ本文の代わりに(を使用して)添付ファイルとしてログファイルを含め、ファイルをテキスト/プレーンとして識別するようにファイルを-a設定します。~/.mime.types*.log
  • のようなものを使用して制御文字を除外しtrます。
  • muttメールの送信など、別のMUAを使用します。実際、自分でメッセージを作成して、次のアドレスに直接送信することもできますsendmail

    (
      echo To: person@example.com
      echo From: you@example.com
      echo Subject: a logfile
      echo
      cat logfile.log
    ) | sendmail -t
    
于 2012-04-27T00:33:21.440 に答える
9

私は最近同様の問題を抱えており、最終的にはより短い解決策になりました:

cat -v log/logfile.log | mail -s "here is a log file" "person@example.com"

mailxと猫の議論の詳細。

于 2013-05-07T04:07:59.473 に答える
3

Ubuntu Precise 12.04に変更した後、自動メールスクリプトを実行するのに問題がありました。Ubuntu(またはDebian)がbsd-mailxをheirloom-mailxと交換したのはいつかわかりませんが、2つの「mail」コマンドの動作は大きく異なります。(たとえば、heirloomは添付ファイルに-aを使用しますが、bsdの追加ヘッダーに使用されます。)私の場合、heirloom-mailxはMimeタイプを確実に判別できず、添付ファイルとしてテキストを送信し続けました。制御文字などを削除しなかったことを非難しますが、アップグレード前に完全に機能したスクリプトを変更してもあまり意味がありません。したがって、自分でMimetypeを設定したい場合は、bsd-mailxの方が優れたソリューションです。

sudo apt-get install bsd-mailx 
sudo apt-get remove heirloom-mailx

私のためにそれを解決しました。

于 2013-04-11T07:49:03.650 に答える
3

RedHatベースのシステム(SL、CentOS、Fedoraなど)では、bsd-mailxをインストールしてから、/ etc / Alternatives/mailを適切に設定します。

sudo yum -y install bsd-mailx
sudo alternatives --set mail /usr/bin/bsd-mailx

もちろん、heirloom-mailxの動作に依存しているが、「mail」ではなく「mailx」を明示的に呼び出さないアプリケーションを壊すリスクがあります。

/ bin / mailに関する情報を表示するには、現在次のことを指します。

sudo alternatives --display mail

インストールされているさまざまなmailxパッケージを確認するには:

sudo rpm -qa *mailx
于 2014-08-20T12:38:18.920 に答える
2

私の場合、スクリプトはcronから呼び出され、LC_ *は定義されておらず、アクセントは「制御文字」として解釈されていました。crontabファイルの先頭に次の行を挿入しました。

LC_NAME=fr_FR.UTF-8
LC_ALL=fr_FR.UTF-8
于 2012-09-09T18:09:27.947 に答える