質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

Q&A

解決済

2回答

21736閲覧

CentOSからmailコマンドで、日本語テキストファイルの内容を文字化けせず、かつ添付ファイル化させないように送りたい

x_kai

総合スコア58

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Postfix

Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

0グッド

0クリップ

投稿2018/03/12 05:18

編集2018/03/12 05:20

前提・実現したいこと

サーバ上で、cronでバックアップを実行したときに、
実行内容を記載したメールを送信したいです。

cronでシェルを実行するようにしており、シェルの構成は
・バックアップのコマンド(実行内容をテキストファイルにリダイレクト)
・メール送信コマンド(テキストファイルの内容を送信)
といった形になっています。

発生している問題

実行内容を日本語で記載しているのですが、メールを見ると、日本語の部分が文字化けしてしまっています。

[2018/03/12 M-eM-^MM-^HM-eM->M-^L 01:58:29] M-cM-^BM-5M-cM-^CM-<M-cM-^CM-^PM-eM-^FM-^EM-cM-^AM-.backup-2018-03-05_00.zipM-cM-^BM-^HM-cM-^BM-^JM-fM-^WM-%M-dM-;M-^XM-cM-^AM-.M-eM-^OM-$M-cM-^AM-^DM-cM-^CM-^UM-cM-^BM-!M-cM-^BM-$M-cM-^CM-+M-cM-^BM-^RM-eM-^IM-^JM-iM-^YM-$M-cM-^AM-^WM-cM-^AM->M-cM-^AM-^Y

該当のソースコード

シェルの中身です。
(バックアップの内容は省略しています。)

#!/bin/sh export LC_CTYPE=ja_JP.UTF-8 echo [`date +"%Y/%m/%d %p %I:%M:%S"`] backup start > backup.log (バックアップのコマンド) >> backup.log 2>&1 echo [`date +"%Y/%m/%d %p %I:%M:%S"`] サーバ内のbackup-`date +"%Y-%m-%d" --date "7 days ago"`_00.zipより日付の古いファイルを削除します >> backup.log (古いバックアップの削除コマンド) >> backup.log 2>&1 echo [`date +"%Y/%m/%d %p %I:%M:%S"`] backup end >> backup.log cat -v backup.log | mail -s "バックアップ" test@test.co.jp

試したこと

1.nkfコマンド使用

nkf -j backup.log | mail -s "バックアップ" test@test.co.jp

結果:内容が添付ファイルになってしまう。

2.catとnkfを使用

cat -v backup.log | nkf -j | mail -s "バックアップ" test@test.co.jp

結果:文字化けは直らず。

3.先頭に「export LC_CTYPE=ja_JP.UTF-8」を追加。
結果:文字化けは直らず。

補足情報

CentOS:6.9
postfix:2.6.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

何故cat -v??

Bash

1echo2⇒ あ 3echo| cat -v 4⇒ M-cM-^AM-^B

cat -vしてしまったら、その後に何をやっても駄目です。

投稿2018/03/12 13:12

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

環境: mailx-12.5 (Heirloom mailx) / CentOS 7

nkf で変換すると、バイナリと認識して Content-Type: application/octet-stream ヘッダを付けるようです。

Content-Type: text/plain; charset=utf-8 でいいのであれば、nkf で変換せずに送信できませんか?

mail -s "バックアップ" test@example.com < backup.log

エンコーディングを iso-2022-jp にしたいのであれば、以下のようにすると mailx が変換してくれます。
ただし、Subject の MIME エンコーディングだけは us-ascii になってダメなようです。

env MAILRC=/dev/null mail -n -S 'sendcharsets="iso-2022-jp"' -s "バックアップ" test@example.com < backup.log

###(2018/03/12 16:40) 追記

「添付ファイル化」について確認させてください。
メールヘッダが Content-Type: application/octet-stream となっているということでしょうか?
もし、そうであれば、backup.log に改行コードが混在していたり(LF, CF+LF)、コントロールコードなどが入っている可能性が考えられます。

(改行コードを LF に統一) nkf -w -d backup.log | mail -s "バックアップ" test@example.com (コントロールコードを取り除く) col -b < backup.log | mail -s "バックアップ" test@example.com

投稿2018/03/12 06:54

編集2018/03/12 07:40
TaichiYanagiya

総合スコア12141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_kai

2018/03/12 07:22

回答ありがとうございます。 「mail -s "バックアップ" test@example.com < backup.log」を試しましたが、添付ファイル化してしまいました… 他に方法があればご教示お願いします。
x_kai

2018/03/12 07:47

回答ありがとうございます。 ヘッダーを確認したところ、Content-Type: application/octet-streamとなっていたので、 「nkf -w -d backup.log | mail -s "バックアップ" test@example.com」を試してみました。 結果として、文字化けもなく、添付ファイルになることもなく、無事送信されました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問