2

ファイルの最初の行 (ヘッダーの最初の行) が次のような電子メール ファイルを読んでいます。

X-RCPT-TO-LIST: 1,2,3

次のように CDO と ADODB を使用してロードしています。

        ADODB.Stream stream = new ADODB.Stream();
        stream.Open(Type.Missing, ADODB.ConnectModeEnum.adModeUnknown, ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, String.Empty, string.Empty);
        stream.LoadFromFile(filename);
        stream.Flush();
        CDO.Message msg = new CDO.Message();
        msg.DataSource.OpenObject(stream, "_Stream");
        msg.DataSource.Save();

次に、次のようなフィールドを取得しようとしています。

ADODB.Field f = msg.Fields["urn:schemas:httpmail:X-RCPT-TO-LIST"];

これは機能しません。空のフィールド (null 値) を返します。

デバッガーでフィールドを見ると、フィールド名が次のようになっていることがわかります。

urn:schemas:mailheader:ÿþx-rcpt-to-list

これらの変な文字を探せば私のコードはうまくいくと思いますが、電子メールごとに変わってしまうのではないかと心配しています。これらの奇妙なキャラクターが追加された理由はありますか? カスタム ヘッダー フィールドにアクセスするより良い方法はありますか (自分でファイルを読み取って解析する必要はありません)。

このテストは、すべての最新のパッチ (SP3 だと思います) を適用した Windows XP で実行しています。

タグ付けが間違っていたらごめんなさい。タグを見つけるのに苦労しました。明らかでない場合は、C# を使用しています。

これが電子メール ファイル全体です。いくつかの迷惑メール (プライバシー上の理由からいくつか) を削除しましたが、この正確なバージョンで再テストし、同じ結果が得られました。

X-RCPT-TO-LIST: 1,2,3
Received: by mail-ia0-f172.google.com with SMTP id l29so4135896iag.3
        for <423a777e2af27f463b801fe2eb2242cbdf1d934000000001@users.domain.com>; Fri, 22 Mar 2013 19:52:00 -0700 (PDT)
MIME-Version: 1.0
X-Received: by 10.50.195.134 with SMTP id ie6mr6320542igc.6.1364007120542;
 Fri, 22 Mar 2013 19:52:00 -0700 (PDT)
Received: by 10.50.169.39 with HTTP; Fri, 22 Mar 2013 19:52:00 -0700 (PDT)
Date: Fri, 22 Mar 2013 19:52:00 -0700
Message-ID: <XXXXXXXX63pPLB9QYu=04W3mU3Ynhkjf2bdYYZqv5oVvQ__u1vg@mail.gmail.com>
Subject: test4
From: <xxxxx2003@gmail.com>
To: 423a777e2af27f463b801fe2eb2242cbdf1d934000000001 <423a777e2af27f463b801fe2eb2242cbdf1d934000000001@users.domain.com>
Content-Type: multipart/alternative; boundary=14dae9340b45e63f6204d88ea7fa

--14dae9340b45e63f6204d88ea7fa
Content-Type: text/plain; charset=UTF-8

test4

-- 
xxxxxx@gmail.com
I don't check *this account* very often

--14dae9340b45e63f6204d88ea7fa
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">test4<br clear=3D"all"><div><br>-- <br><div><a href=3D"mai=
lto:xxxxx@gmail.com" target=3D"_blank">xxxxx@gmail.com</a></div>
<div>I don&#39;t check <b>this account</b> very often</div>
<div>=C2=A0</div>
</div></div>

--14dae9340b45e63f6204d88ea7fa--

X-RCPT-TO-LIST 行は、RCPT TO:<> 行を内部ユーザー ID に変換する電子メール サーバーのコードによって追加されます。そうすれば、後でこれらのファイルを処理する私のスレッドは、メールをどこに置くべきかを知ることができます。情報を別のファイルなどに保存したくありません。現在のデザインが気に入っているので、CDO/ADODB がメッセージ ヘッダーを奇妙な名前に変換している理由を知りたいだけです。 Unicode 対 ASCII か何か間抜けなのか。

4

2 に答える 2

2

テキスト ストリームの最初のシンボルとしての「ÿþ」は、ほとんどの場合、いわゆる「バイト オーダー マーク」です。例を参照してください。ウィキペディアのエントリ. それらは読み取り中のファイルにあるため、ストリームに表示されます。ファイルを 16 進エディタで開き、最初のバイトをチェックすると、BOM が表示される必要があります。たとえば、「ÿþ」は 0xFFFE のテキスト表現です。

そもそもこれらのシンボルがファイルにあるのはなぜですか? ファイルの作成方法によって異なります。次の質問が役に立ちます: BOM なしで UTF-8 を使用して Excel データをエクスポートできますか? .

于 2013-03-31T17:25:19.943 に答える
1

メッセージをロードするための私のコードにバグがあるなど、誰かがより良い答えを持っていない限り、これを答えとして受け入れます...

メッセージの最初の行でこれを行うのは、CDO または ADODB のバグのようです。最初の行が標準の "Received:" 行になるように、X-RCPT-TO-LIST 行を削除してテストしました。この場合、Received 行の名前に奇妙な文字が追加されました。また、最初の行にさまざまなアイテムを含む他のいくつかのメールでもテストしましたが、すべての場合で、最初の行には常に奇妙な文字が名前に追加されていました. バグが修正されたか (私はかなり古い XP を使用しています)、または CDO を使用しているほとんどの人は Received: 行で何もしていないため、通常は最初の行であることに気付いていないと想像できます。ヘッダーに。

私にとっては、問題を回避するために、一番上に余分な行を追加するだけなので、次のようになります。

X-CDO-FIX: X-RCPT-TO-LIST を修正: 1,2,3 ...通常のヘッダーをここに...

テスト済みで動作するので、満足しています。誰かが私が始めた報奨金に値するより多くの情報を提供できる場合に備えて、これを数日間開いたままにし、他の誰かにも役立つ可能性があります.

于 2013-03-25T18:01:50.330 に答える