文字コードについて
■環境
OS : CentoOS8
Kompira : 16.0
■実現したい事
メール本文を解析し、処理を加えたい
■解決したい事
メールチャネルにて処理をし、実行結果を確認するとメール本文が文字化けをしていると思われ、検索する文字列をメール本文に記載していても存在しないと表示されます。
なお、コンソール上で件名は日本語も表記されておりましたので、本文のみが文字化けしていると考えております。
CentOS自体の文字コードを変更してみましたが、変わらず文字化けしております。
■実行結果
メッセージ解析を開始します。
メッセージに「ユーザ名」が存在しません。
「メールアドレス」に対するメッセージ取得に失敗しました。
メッセージに「テスト」が存在しません。
['**********\x1b$B!!3t<02q<RIY;NDL%(%U%5%9\x1b(B\x1b$B!!!!%5!<%S%9%S%8%M%9K\\It\x1b(B\x1b$B!!!!4pHW\x1b(BLCM\x1b$B%;%s%?!<E}3gIt!!%;%s%?!<%5!<%S%9It\x1b(B\x1b$B!!!!!!M-ED!!9,J?\x1b(B\x1b$B!!?@F`@n8)@n:j;TCf866hCf4];R\x1b(B13-31\x1b$B!!LnB<ITF0;:IpB">.?y%S%k\x1b(B 5F\x1b$B!!\x1b(BTel:XXXX-XXX-XXX\x1b$B!!\x1b(BFax : XXX-XXX-XXXX\x1b$B!!Fb@~\x1b(B(\x1b$BBeI=\x1b(B):XXX-XXXXX\x1b$B!!\x1b(BE-Mail\x1b$B!\'\x1b(Bメールアドレス']
■ジョブフロー
| addr = 'メールアドレス' |
| sender_addr = '' |
[ key1 = 'ユーザ名' ] ->
[ key2 = '企業名' ] ->
[ key3 = 'メールアドレス' ] ->
[ key4 = 'テスト' ] ->
[ key5 = 'test' ] ->
{ while(true) |
{ try |
# MailChannelの読み込み
<./testMailChan> ->
[msgdict = mail_parse($RESULT)] ->
# 受信元アドレスの確認
[s = msgdict.From] ->
[check_addr = pattern('.*<([^>]+)>', typ="r").match(s)] ->
{if check_addr == false |
then:
[sender_addr = s] # アドレスが単独で記載されたケース
else:
[sender_addr = check_addr.groups[0]] # < > 付きでアドレスが記載されたケース
} ->
# 指定アドレスのみ処理
{if sender_addr == addr |
then:
[msgLists = []] ->
[subject = msgdict['Subject']] -> # 件名の取得
[body = msgdict['Body']] -> # 本文の取得
print('メッセージ解析を開始します。') ->
# keyごとに本文を解析
[mandatory_fields = [key1, key2, key3, key4, key5]] -> # 必須項目
{for key in mandatory_fields |
# 本文にkeyが存在するか
[./analyze.mailAnalyze_keyCheck: body, key] ->
{if $RESULT != key |
then:
print('メッセージに「$key」が存在しません。') ->
continue
} ->
# keyごとにメッセージ取得パターンを変更
{if key != mandatory_fields[-1] |
then:
[./analyze.mailAnalyze_keyNext: body, key] # keyの次の行を取得
else:
[./analyze.mailAnalyze_keyNextEnd: body, key] # keyの次の行から最終行までを取得
} ->
[msg = $RESULT] ->
{if not msg |
then:
print('「$key」に対するメッセージ取得に失敗しました。') ->
continue
else:
[msgLists = msgLists + [msg] ]
}
} ->
print(msgLists)
else:
print('対象外のメールです。')
}
} =>
{if $STATUS != 0 |
then:
print('エラーが発生しました。')
}
}
-
服部様
ご回答頂き、ありがとうございます。
頂きました内容に変更した場合は、以下の通りとなりました。■実行結果
---------------------------------------
$B"(!!%F%9%H%a!<%k$G$9!!"((B
2020/10/5/ 9:44$B%f!<%6L>(B
$B4k6HL>(B
test
メッセージ解析を開始します。
メッセージに「ユーザ名」が存在しません。
メッセージに「企業名」が存在しません。
メッセージに「メールアドレス」が存在しません。
メッセージに「テスト」が存在しません。
「test」に対するメッセージ取得に失敗しました。
[]
---------------------------------------
■メールの内容は以下の通りとなります。
---------------------------------------
※ テストメールです ※
2020/10/5/ 9:44ユーザ名
企業名
test
--------------------------------------- -
服部様
ご回答ありがとうございます。
送信メールのエンコードを確認し、文字コードの変更も行いましたが結果は変わりませんでした。
環境と実施内容を記載致します。■環境
・使用ソフトウェア:Outlook365
・使用アカウント:Microsoft Exchange■実施内容
①オプション→詳細設定 [文字設定オプション]の欄で以下内容を実施しました。
その後メールを送信し確認しましたが、変化はありませんでした。
・[送信メッセージのエンコード方法を自動選択]のチェックをオフ
・[送信メッセージで優先使用するエンコード方法]の確認 →日本語(JIS) ※初期設定
・[mailto:プロトコルでUTF-8をサポートする]のチェックをオフ
②上記で文字化けしていたため以下の文字コードに変更し、都度メールを送信しました。
こちらも結果は変わらず文字化けしたままでした。
・[送信メッセージで優先使用するエンコード方法]の確認 →日本語(UTF-8)に変更
・[送信メッセージで優先使用するエンコード方法]の確認 →日本語(EUC)に変更 -
服部様
メール本文の文字化けの件ですが、解消できました。
原因は環境によるものかと思われますが、以下の通り改修しましたところ
文字化けもなく元の文章を確認することできました。
何度もお手数をお掛けしまして申し訳ございません。
今後ともよろしくお願い致します。※教えていただいたログデータの確認を追加したことにより、
文字コードが確認できたため今回の変換に至りました。ありがとうございました。
(これまでutf-8からshift-jisに変換と思い込んでおりました。)■改修内容
[body = msgdict['Body']] -> # 本文の取得
の後に
[body = body.encode('shift-jis').decode('iso-2022-jp')] ->
を追加し、文字コードを変換させました。
サインインしてコメントを残してください。
コメント
8件のコメント