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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

3回答

1272閲覧

C# TKMPでメールヘッダを取得、subject文字化け

sunchan1107

総合スコア55

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2018/07/21 05:46

TKMPを利用させて頂いています
http://uwa.potetihouse.com/library/tkmpdll.html

メールヘッダ取得の結果、Subjectで文字化けが発生しています。
対策方法ご教示お願い出来ますでしょうか。

var reader = new TKMP.Reader.MailReader(header, true); var subject = reader.HeaderCollection["Subject"]; var subject = reader.HeaderCollection["Source"];

上記でメールヘッダーを取得してsubjectを見ると文字化けしていました。

デーコード前のsubjectのデータ
「=?iso-2022-jp?Q?・・・・」 ※この場合文字化けします
「=?utf-8?B?・・・・」 ※ちなみにこの場合文字化けしません

こちら、参考にデコードを試みたのですが結果は変わりませんでした。
http://uwa.potetihouse.com/samplecode/tkmp/readcharchange.html

var reader = new TKMP.Reader.MailReader(header, true);
reader.EncodeCharset = "iso-2022-jp";

対策方法ご教示お願い出来ますでしょうか。

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

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

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

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

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

guest

回答3

0

自己解決

ご教示ありがとうございます。
試してみましたがやはり解決しませんでした。
独自でエンコードするなどの方法を模索してみます。

以下、試てみた結果です。

var reader = new TKMP.Reader.MailReader(header, true); reader.EncodeCharset = "iso-2022-jp"; //ヘッダではなく、本文のエンコード(デコード?)指定のようです。 //subject は文字化けしていました var subject = reader.HeaderCollection["Subject"]; TKMP.Reader.MailReader mr = reader; foreach(TKMP.Reader.Header.HeaderString hs in mr.HeaderCollection) {   hs.DecodeCharset = "iso-2022-jp";   //hs.DecodeCharset = "utf-8";   //やはり文字化け。"utf-8"ではもっと文字化け   Console.Write("Name:" + hs.Name +"\r\n");   //このやり方でも文字化け。文字化けの仕方は同じ   Console.Write(TKMP.Reader.Header.HeaderString.HeaderDecode(hs.SourceData, "iso-2022-jp") + "\r\n"); }

また、こちらも試させて頂きました。
http://uwa.potetihouse.com/samplecode/tkmp/readmailheader.html
メールヘッダを取り出すことはできたのですが、期待どおりにデコードされた結果を取り出すことができませんでした

PopClient pop = new PopClient(logon, Server, Port); pop.Connect(); foreach (TKMP.Net.MailData mail in pop.MailDatas) {   mail.ReadHeader(); var ret = GetHeaderString(mail.HeaderStream); }

取りだすことができた内容
From: test@nifty.com
To: "test2"@nifty.com
Date: 21 Jul 2018 15:23:57 +0900
Subject: =?iso-2022-jp?Q?=1B=24BJ=27La=3CjB3=24=2D・・・・・・・
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: quoted-printable

投稿2018/07/22 11:10

編集2018/07/23 12:46
sunchan1107

総合スコア55

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

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

Zuishin

2018/07/22 13:05

いや、だからなぜリンク先を見ないのですか?
sunchan1107

2018/07/23 12:51

お忙しいところご教示ありがとうございます。また、失礼しました。 教えて頂きましたリンク先、試してみました。 結果を追記致しました。
guest

0

私も試していないので分かりませんが、
TKMP.Reader.Header.HeaderString.HeaderDecodeが使えないでしょうか?

投稿2018/07/21 11:30

YAmaGNZ

総合スコア10222

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

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

0

使ったことないので試していませんが、エンコードを指定できるようなのでやってみてください。

http://uwa.potetihouse.com/samplecode/tkmp/readmailheader.html

投稿2018/07/21 11:05

Zuishin

総合スコア28656

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問