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

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

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

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

Sendmail

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

Q&A

解決済

2回答

9001閲覧

sendmailのmailコマンドで、文字化けせず、添付ファイル化させずに送信したい

wgw02675

総合スコア11

CentOS

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

Sendmail

Sendmailは、インターネットで電子メールを送受信するサーバソフトウェア(MTA)です。ユーザーが送信したメールを受け、他メールサーバへ引き渡しバケツリレー式に配送したり、届いたメールをユーザーが受け取るまでの間保管するといった働きをします。

0グッド

1クリップ

投稿2019/06/10 06:18

前提・実現したいこと

nkf -j test.log |& mail -s "test" hoge@example.com

上記のようなsendmailのmailコマンドで、文字化けすることなくメールを送信したいです。
test.logはJISファイルの改行コードLFで、マルチバイトを含んでいます。

CentOS4.3の環境では文字化けする事なく正常に送信されるのですが、
CentOS7.3の環境で実施すると、メールにATT00001.binというバイナリファイルが添付され
本文は空白に。中身を確認すると、以下のようにtest.logの内容が文字化けした状態になっています。

$B$"$$$&$($*(B
JIS$B%(%s%3!<%I(B

メールヘッダを確認すると以下のようになっています。

CentOS4系の正常な方:
Content-Type: text/plain

CentoOS7系の異常な方:
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64

修正が多岐に渡る為、可能であればコマンドは変えることなく対応したいと考えています。
sendmailにもnkfにもエンコードのコンフィグのようなものはないようでした。どこかの設定が影響しているのでしょうか?お力添え頂けないでしょうか?

試したこと

localectlの設定を色々変更して実施

補足情報(FW/ツールのバージョンなど)

●CentOS4系
nkf --version
Network Kanji Filter Version 2.1.1 (2010-08-08)

●CentOS7系
nkf --version
Network Kanji Filter Version 2.1.3 (2013-11-22)

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

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

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

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

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

wgw02675

2019/06/11 04:06

ご回答下さりありがとうございます。 記載の通り、環境変数を試してみましたが、うまくいきませんでした。
guest

回答2

0

念の為、下記のコマンドも一度お試しください

nkf -w -d test.log | mail -s "test" hoge@example.com

投稿2019/06/11 00:44

k-nishiyama

総合スコア240

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

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

wgw02675

2019/06/11 04:04

ご返答ありがとうございます。 こちらのコマンドでうまくいきました。なぜjisがうまくいかないのかわかりませんでしたが utf-8で進めたいと思います。
k-nishiyama

2019/06/11 04:29

改善したようでなによりです。 特にこだわりがなければutf-8で良いかと思います。 あと、改行コードが混在していると"application/octet-stream" (その他の形式ファイル) として判定されることがあるようで、"-d"オプションでLFに統一しています。
k-nishiyama

2019/06/11 07:45

えっと・・・恐らくですが、効いたのは「-w」ではなく「-d」の方のオプションじゃないでしょうか・・・?
wgw02675

2019/06/13 04:32

ご連絡ありがとうございます。 切り分けのためdオプションなしで確認してうまくいっていました。 が、その後やはりjisで送る必要がでてきてしまい、utf8は使用しないことになりました。。
guest

0

ベストアンサー

テキストじゃなくて、バイナリーデータと認識されるようですね。
生でsendmailを使うと良いと思います。
ヘッダのテキストは自分で作成します。

sh

1TO=hoge@example.com 2SUBJ=TEST 3cat <<HEADER - test.log | nkf -j | /usr/sbin/sendmail -t 4To: $TO 5Subject: $SUBJ 6Mime-Version: 1.0 7Content-Type: text/plain; charset="ISO-2022-JP" 8Content-Transfer-Encoding: 7bit 9 10HEADER

投稿2019/06/10 06:57

otn

総合スコア84555

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

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

otn

2019/06/10 07:11

あと、 > 中身を確認すると、以下のようにtest.logの内容が文字化けした状態になっています。 は、JISエンコーディング(ISO-2022-JP)に対応していないエディタで見たのでは? また、ATT00001.bin はお使いのメールソフトが勝手に付けた名前でしょう。
wgw02675

2019/06/10 08:11 編集

ご回答下さりありがとうございます。 mailコマンドとnkfの組み合わせでは、CentOS7では難しいという事でしょうか? 現在CentOS4からの移行を行っており、バッチ結果→nkf→mailという1行バッチコマンドが大量にあるため 大幅な改修となってしまい、環境の設定をどこか変えることで同じ挙動にできないかと考えていました。。 先頭にheaderを追加できればとも考えたのですが、mailコマンドではできなさそうでした。 echo -e "Content-Type: text/plain;\n\n" && nkf -j test.log |& mail -s "test" test@example.com 添付のバイナリはさくらエディタで参照していたのですが、 拡張子を.binから.txtに変更すると正しく表示されました。ご指摘有難うございます。
otn

2019/06/10 11:52

mailコマンドのJISコードをテキストと判定させるオプションは無さそうなので、mailでは無理そうです。 > バッチ結果→nkf→mailという1行バッチコマンドが大量にあるため mailコマンドを送信にしか使っていないなら、シェルスクリプトに差し替えるということをやればそのまま送れると思います。
wgw02675

2019/06/11 04:01

ご返答ありがとうございます。 setenvでUTF-8に設定したうえで、nkfのwオプション(UTF-8)を試したところうまくいきました。 今時のメーラーはjisではなくutf8でもいいようなので、そちらの方向で検討したいと思います。 とても参考になりました、ありがとうございました。
otn

2019/06/11 04:44 編集

utf-8でも良かったのなら、そもそも問題なしです。 送りたいファイルも、おそらくutf-8だろうから、nkf も不要では?
wgw02675

2019/06/11 05:03

ご返答ありがとうございます。 jisで送るためのnkfだったはずなので、不要ですね。 というかnkfはなにもやっていないことになりますね・・。 なぜCentOS4ではできて、7ではダメなのか不明ですが、あとから解決した際にjオプションにもどすことも考えると一旦、wにしておきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問