我正在阅读一个电子邮件文件,其中文件中的第一行(因此标题中的第一行)是:
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"];
这不起作用,它返回一个空字段(空值)。
查看调试器中的字段,我看到字段名称是:
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'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 vs ASCII 或者一些愚蠢的东西。