显示来自 MIME 编码电子邮件字符串的消息 body

Displaying message body from MIME encoded email string

我们将停止使用 Lyris ListManager 帐户,但我们仍然可以访问 SQL 数据库中的数据。客户仍然希望访问消息存档,因此我们正在尝试寻找一种方法来获取数据库中经过编码的电子邮件消息字符串,并在浏览器中以可读格式显示它们。单个消息的字符串示例:

--_004_D72176A059CDE746962E56C32F641BE3016734DDEDKCOEX2VKCOAD_
Content-Type: multipart/alternative;
    boundary="_000_D72176A059CDE746962E56C32F641BE3016734DDEDKCOEX2VKCOAD_"

--_000_D72176A059CDE746962E56C32F641BE3016734DDEDKCOEX2VKCOAD_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Testing.  Please reply back if successful.

Thank you


[cid:image001.jpg@01D36CBE.C035BE50]
Jane Doe | Web Content Manager
jdoe@email.com<mailto:jdoe@email.com>

--_000_D72176A059CDE746962E56C32F641BE3016734DDEDKCOEX2VKCOAD_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 14 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
    {font-family:Calibri;
    panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
    {font-family:Tahoma;
    panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
    {margin:0in;
    margin-bottom:.0001pt;
    font-size:11.0pt;
    font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
    {mso-style-priority:99;
    color:blue;
    text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
    {mso-style-priority:99;
    color:purple;
    text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
    {mso-style-priority:99;
    mso-style-link:"Balloon Text Char";
    margin:0in;
    margin-bottom:.0001pt;
    font-size:8.0pt;
    font-family:"Tahoma","sans-serif";}
span.EmailStyle17
    {mso-style-type:personal-compose;
    font-family:"Calibri","sans-serif";
    color:windowtext;}
span.BalloonTextChar
    {mso-style-name:"Balloon Text Char";
    mso-style-priority:99;
    mso-style-link:"Balloon Text";
    font-family:"Tahoma","sans-serif";}
.MsoChpDefault
    {mso-style-type:export-only;
    font-family:"Calibri","sans-serif";}
@page WordSection1
    {size:8.5in 11.0in;
    margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
    {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-US" link=3D"blue" vlink=3D"purple">
<div class=3D"WordSection1">
<p class=3D"MsoNormal">Testing.&nbsp; Please reply back if succ=
essful.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">Thank you,<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">Jane<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal" style=3D"margin-bottom:12.0pt;line-height:12.05pt;te=
xt-autospace:none">
<b><span style=3D"font-size:10.0pt;font-family:&quot;Arial&quot;,&quot;sans=
-serif&quot;"><img width=3D"90" height=3D"36" id=3D"_x0000_i1025" src=3D"ci=
d:image001.jpg@01D36CBE.C035BE50"></span></b><b><span lang=3D"EN-AU" style=
=3D"font-size:10.0pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;">=
<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span lang=3D"EN-AU" style=3D"font-size:10.0pt;fo=
nt-family:&quot;Arial&quot;,&quot;sans-serif&quot;">Jane Doe
</span></b><span lang=3D"EN-AU" style=3D"font-size:10.0pt;font-family:&quot=
;Arial&quot;,&quot;sans-serif&quot;">|<b>
</b>Web Content Manager<br>
<a href=3D"mailto:jdoe@email.com">jdoe@email.com</a><=
/span><o:p></o:p></p>
</div>
</body>
</html>

--_000_D72176A059CDE746962E56C32F641BE3016734DDEDKCOEX2VKCOAD_--

--_004_D72176A059CDE746962E56C32F641BE3016734DDEDKCOEX2VKCOAD_
Content-Type: image/jpeg; name="image001.jpg"
Content-Description: image001.jpg
Content-Disposition: inline; filename="image001.jpg"; size=1735;
    creation-date="Mon, 04 Dec 2017 12:14:25 GMT";
    modification-date="Mon, 04 Dec 2017 12:14:25 GMT"
Content-ID: <image001.jpg@01D36CBE.C035BE50>
Content-Transfer-Encoding: base64

/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAoHBwkHBgoJCAkLCwoMDxkQDw4ODx4WFxIZJCAmJSMg
IyIoLTkwKCo2KyIjMkQyNjs9QEBAJjBGS0U+Sjk/QD3/2wBDAQsLCw8NDx0QEB09KSMpPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT3/wAARCAAkAFoDASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD0LTfG
dvrfh86npFu108f+vtd4WSI9+O/9e1UIfiJHNPHGNOceY4XPmjjJx6V4noeuX3h3U0vtNl8uVeGU
8rIv91h3FepWJsvGcUes6Knk3cMqG+sz/Cc53KenYn3+tZz5t4nLiFWXvU38jrrfxStx43u/Dn2R
la3txP5+/hs7eNuP9r1q14i8R2HhjS3vtRk2qOEQfekb+6orz7VPEVp4X+LOtaje7mUaeiRxoOZH
ITCj06dTWn4b8M3finUIvFPispIWAexsVOY4U6gn1Pf9T6DQ6jqvDOs3uu6Yt7eaW+nJJgxJJLud
l/vEYGPatmsHxR4ttPDEMIlilury5bZb2kAy8p/oPesCX4havpWy48QeFbqy09mANxHKJDHn+8AK
ANXUNfvbb4kaVosZj+xXVrJLICnzbhuxg/gKPh/r974j0O5utQMZljvJIV8tNo2rjH86yL+eK6+M
PhyeB1kil02V0dejAhiDVL4f67ZeHPAOo6hqMhSGPUZgAoyzsduFA7k0AemUVwTePfEAg+3/APCG
Xn9nY3bjMPN2/wB7ZjPTmrl/8StLtNL0nU4kaax1CUxvIW2m3wMtuGDkj0oA7GiuAuPiHrMFudSP
hG8GkAbvOeUCTZ/eKY4GOf610lr4x0K6tIbhdRhVZUVwrnDAEZwR2NAHgfhrwzeeKNVFnZjZGvzT
TsPlhT1Pv6DvXor3lnpy2mhaCNlhFMnmy/xXL7hkk9x/npXWQeCoNP8ADqaRpdy1rExzcShAzznu
Sf8APHFUofh3HDPHINRc+W4bHlDnBz61lU5npE48Sq0vdprTqZIsLbVPjHrllexLNbzaYqujdx8n
6+9VrC+vPhZrS6XqjyT+G7pz9muSMmAnsf6j8R3Fdnb+Flt/G934j+1szXFuIPI2cLjbzuz/ALPp
Wlq+kWeu6ZNYahEJYJRgjuD2IPYj1rU7DzjxG2pXHxdsW0u5s45pLAGzlugXiIO7O3Hc81sajo3j
rUNOubS81PQDbTRskmYHHykc89vrTI/hWh0mOxuNZuJTavvsZ1jCS2p7gHPKng44wRxinS/D/W9U
jFprni67udP6PDFCIzIPRmz/AI0AZOk6RcaD8QfCWm3kqTTW2mzoXjztIzIRjPPQgVyCmf8A4R3S
PLeJIv7eny04zEr/ACbS49Ov617B/wAIfAnifStWguHjj061NrHbld25SCASxOeM1TsPh5YQ+Frv
Qr6Z7uC4uHuBJtCNGxxjb15GOtAEX2L4hf8AQU0H/vxJXEan4VutDh0Wz1Ke1uY73XVlC2+dgDAB
hz9OldYvgLxFFALGLxpdrYAbQvkjzAvpuzmrz/DqySw0W0s7uaGPS7sXWXG9pm6nJyMZ9qAOk1dQ
2i3ysAQbeQEH/dNfLkZPlryegr6puoPtVpNBu2+bGybsZxkYrzBfgdCqgf27LwMf8ew/+KoA9Voo
ooAKKKKACiiigAooooAKKKKACiiigD//2Q==

--_004_D72176A059CDE746962E56C32F641BE3016734DDEDKCOEX2VKCOAD_--

根据我在网上看到的一些建议,我正在尝试使用 MimeKit 进行解析,但我不确定如何正确使用它。理想情况下,我们希望能够只获取消息 body。我试过以下方法:

byte[] byteArray = Encoding.UTF8.GetBytes(row["body_"].ToString());
MemoryStream stream = new MemoryStream(byteArray);
var thisMssg = MimeMessage.Load(stream);
mssg.Text = thisMssg.TextBody;

但这会导致 "Failed to parse message headers."

我也试过使用 QuotedPrintableDecoder:

var decoder = new QuotedPrintableDecoder();
var buffer = Encoding.ASCII.GetBytes(row["body_"].ToString());
var output = new byte[decoder.EstimateOutputLength(buffer.Length)];
int used = decoder.Decode(buffer, 0, buffer.Length, output);
mssg.Text = System.Text.Encoding.ASCII.GetString(output, 0, used));

这至少会向浏览器输出一些内容 semi-readable,但消息上方和下方仍有 headers 和编码文本。

感谢任何帮助。我在网上看到的大多数例子都涉及解码电子邮件文件;我可能在尝试将字符串转换为字节时做错了什么,或者我可能完全不了解整个事情。


更新:这对某些消息来说效果很好,但对其他消息来说,HtmlBody 和 TextBody 都是空白的。我怀疑我使用了错误的编码或类似的东西。下面是一个 headers + body 的示例,其中一条消息未返回任何内容:

Return-Path: <jane.doe@email.com>
Received: from z221.zixworks.com ([199.30.235.221]) by lyris.aosw.org with SMTP (Lyris ListManager WIN32 version 12.1.22); Mon, 17 Jun 2019 13:15:10 -0500
Received: from 127.0.0.1 (ZixVPM [127.0.0.1]) by Outbound.z221.zixworks.com (Proprietary) with SMTP id 66B33E18A0 for <groups@groups.org>; Mon, 17 Jun 2019 13:15:11 -0500 (CDT)
Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02lp2056.outbound.protection.outlook.com [104.47.36.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by z221.zixworks.com (Proprietary) with ESMTPS id 77467E3E1C for <groups@groups.org>; Mon, 17 Jun 2019 13:15:07 -0500 (CDT)
Received: from BN8PR08MB5748.namprd08.prod.outlook.com (20.179.78.79) by BN8PR08MB6161.namprd08.prod.outlook.com (20.179.77.220) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1987.10; Mon, 17 Jun 2019 18:15:03 +0000
Received: from BN8PR08MB5748.namprd08.prod.outlook.com ([fe80::bdd9:7aa6:33e8:8c7f]) by BN8PR08MB5748.namprd08.prod.outlook.com ([fe80::bdd9:7aa6:33e8:8c7f%3]) with mapi id 15.20.1987.014; Mon, 17 Jun 2019 18:15:03 +0000
From: Jennifer Blosser <jane.doe@email.com>
To: test  List <groups@groups.org>
Subject: test subject
Thread-Topic: test subject
Thread-Index: AdUlODR9gfN51vIpRPKLoCMeLjIytQ==
Date: Mon, 17 Jun 2019 18:15:03 +0000
Message-ID:  <BN8PR08MB5748C0A8D6881BF572B3B3FE9DEB0@BN8PR08MB5748.namprd08.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is ) smtp.mailfrom=jane.doe@email.com;
x-originating-ip: [199.87.130.130]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 097c72d7-a379-49ac-dce6-08d6f34fb836
x-microsoft-antispam:  BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(49563074)(7193020);SRVR:BN8PR08MB6161;
x-ms-traffictypediagnostic: BN8PR08MB6161:
x-ms-exchange-purlcount: 4
x-microsoft-antispam-prvs:  <BN8PR08MB6161B55A933D7DEFA32FE4D69DEB0@BN8PR08MB6161.namprd08.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-forefront-prvs: 0071BFA85B
x-forefront-antispam-report:  SFV:NSPM;SFS:(10019020)(39860400002)(376002)(136003)(366004)(346002)(396003)(199004)(189003)(74316002)(7736002)(102836004)(99286004)(81166006)(66946007)(73956011)(81156014)(7696005)(2906002)(316002)(786003)(861006)(6506007)(66556008)(66476007)(66616009)(68736007)(26005)(8936002)(476003)(8676002)(76116006)(186003)(6916009)(99936001)(6306002)(55016002)(54896002)(6436002)(44832011)(478600001)(86362001)(64756008)(53936002)(5660300002)(733005)(54556002)(606006)(66446008)(33656002)(6116002)(256004)(25786009)(3846002)(790700001)(14454004)(66066001)(52536014)(71200400001)(71190400001)(486006)(9686003)(236005);DIR:OUT;SFP:1102;SCL:1;SRVR:BN8PR08MB6161;H:BN8PR08MB5748.namprd08.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1;
received-spf: None (protection.outlook.com: vcuhealth.org does not designate permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info:  pg6USXqqMlMkBtJyhBsn236QA/k0rF3vQc1WC61WuHvtUFLFrPjeTUEQMYlbPZTU5UJKiehb0WLAKiT4R98gsNeqkREMejsaHxqIgNKTAyZbJ57JaHQmWu1rb9LY+gl+AhP+UXX2BM1WKGNxpc2ySYqeERX52xy/6cYrGPYPNoVvDryIGYBJslLwbyBh25k011jjA18szgKSKIhRu3QnN91aBu/7cTlDVY+/+f00xDMb62g4HWOVHzadxvXbmKv2duvVA1hzI/WTCWkJsg6XLXIBJ/gzip8lNGobi+cJ6a8VqY98CHd7z3vh8PE+4GgJv9UOUgrvW/q9Z6/TU8pfVtSh+5np5hhBRmjX80ZOpVzrjPrXufIe1uJ0hD1cIA4Jx4YcJOqQKsP5OQLAsBRj06/+VAKeswwGNbh2judAif0=
Content-Type: multipart/related; boundary="_004_BN8PR08MB5748C0A8D6881BF572B3B3FE9DEB0BN8PR08MB5748namp_"; type="multipart/alternative"
MIME-Version: 1.0
X-OriginatorOrg: vcuhealth.org
X-MS-Exchange-CrossTenant-Network-Message-Id: 097c72d7-a379-49ac-dce6-08d6f34fb836
X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Jun 2019 18:15:03.6434 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: d21f3866-8fc6-4527-8622-cefa47fe9632
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: jane.doe@email.com
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR08MB6161
X-VPM-MSG-ID: 77fdc5a9-05b8-4e6c-8d21-912176d50a8c
X-VPM-HOST: vmvpm01.z221.zixworks.com
X-VPM-GROUP-ID: 994c5cd5-4e57-4cea-8f46-45e001662312
X-VPM-ENC-REGIME: Plaintext
X-VPM-IS-HYBRID: 0

    --_004_BN8PR08MB5748C0A8D6881BF572B3B3FE9DEB0BN8PR08MB5748namp_
Content-Type: multipart/alternative;
    boundary="_000_BN8PR08MB5748C0A8D6881BF572B3B3FE9DEB0BN8PR08MB5748namp_"

--_000_BN8PR08MB5748C0A8D6881BF572B3B3FE9DEB0BN8PR08MB5748namp_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

SWON:  Please see information below about CEU offering from Be The Match in=
 July. Mercury SWON co-moderator:

Be sure to attend our upcoming webinar, Sickle Cell Disease: Exploring Trea=
tment Options and Psychosocial Care.<https://urldefense.proofpoint.com/v2/u=
rl?u=3Dhttps-3A__go.pardot.com_l_566592_2019-2D06-2D10_gmysfg-3Futm-5Fsourc=
e-3DListserv-5Fdet-26utm-5Fmedium-3Demail-26utm-5Fcampaign-3Dhp-5Fwebinar-5=
F3&d=3DDwMFAg&c=3DpOo6bKNCxsIK6eGC4MYY4A&r=3DM89Ut5RE0fhAI4OPWxaYquIrnvWNHf=
gw4xuTI66ezb0&m=3Dc_yC0-6_GJEEXNI3WxSORby7ZMI668MQiTaQiXl-lOs&s=3DRFAiVjmSs=
QOwCOOAFqGIdtAOvr2St6TOLjS19nfvU7M&e=3D>

message body here.


--_000_BN8PR08MB5748C0A8D6881BF572B3B3FE9DEB0BN8PR08MB5748namp_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
    {font-family:"Cambria Math";
    panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
    {font-family:Calibri;
    panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
    {margin:0in;
    margin-bottom:.0001pt;
    font-size:11.0pt;
    font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
    {mso-style-priority:99;
    color:#0563C1;
    text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
    {mso-style-priority:99;
    color:#954F72;
    text-decoration:underline;}
span.EmailStyle17
    {mso-style-type:personal-compose;
    font-family:"Calibri",sans-serif;
    color:windowtext;}
.MsoChpDefault
    {mso-style-type:export-only;
    font-family:"Calibri",sans-serif;}
@page WordSection1
    {size:8.5in 11.0in;
    margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
    {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-US" link=3D"#0563C1" vlink=3D"#954F72">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">message body here.</p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
</td>
</tr>
</tbody>
</table>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
</body>
</html>

--_000_BN8PR08MB5748C0A8D6881BF572B3B3FE9DEB0BN8PR08MB5748namp_--

--_004_BN8PR08MB5748C0A8D6881BF572B3B3FE9DEB0BN8PR08MB5748namp_
Content-Type: image/jpeg; name="image001.jpg"
Content-Description: image001.jpg
Content-Disposition: inline; filename="image001.jpg"; size=3521;
    creation-date="Mon, 17 Jun 2019 18:15:03 GMT";
    modification-date="Mon, 17 Jun 2019 18:15:03 GMT"
Content-ID: <image001.jpg@01D52517.0DFABF70>
Content-Transfer-Encoding: base64

/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf
IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7
Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCABAAQQDASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDCop8K
CSeOM9HcKfxOK3dX8Pw2wR7F3ljubsQ25Y+2GU+4YflX1M6sYSSfU+PhSlNNroc/RXSTeGrW08QR
6bPNcmKeLfDKqAHIzuyD/un9Ko2ejRaito1vM6C7vTbr5oHyqFBycd+ahYim1ct4eonbqZNFb8Og
2N1fWqx3c0VpcRSsXmUBkMZIOccEVJD4ULa+mlzSuoW2Wad0XcVJ4wPUZx+FL6zT7j+rVOxzlT2X
/H/a/wDXdP8A0IVZuNMNrYTzSswlgvPsrJjj7pOf0qtZf8f9t/13T/0IVpzxlF2M+SUZJM97ooor
5Y+wCiiigAooooAKKSloAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA+flYqwZ
Tgqcgjsa1ITrT2J1CGSQ28Nzu3gj5ZmwMgepyKyq3tF8QRaVZC3kgaYGR3ZeMHKjb+IYA19PW5uW
8VdnyNDl5rSdkQzQa9b6nBYSee95AhaJA29lVgScHntmq9nbatc2wFlDPJFby7x5Q+4+Oo98AVqR
eJoYdTOpfZ5ZrgWsUK7m2/MMbzkc844+tFl4isbKefy7VmhkvjcruUFo1KkfL6MCePasOaqo/Ab8
tK/x6FGQ67extqTrczRiNozMFGAnRhgduTmmO+tm1F4xuRBOEhEvTeF+6M9cZ6Vctdfgt9ISxMTl
xHOnn7BvUyHgqfQ9D9ajm1qCXSXhWKUXUtrFavuI8tVQ5DDvk8cULnvbkW/4DfJa/O9vxI/tGvx+
eG88faJH87cg+Z1X5s5HUDrWfZf8f9t/12T/ANCFdDfeK4LqxuYFtnWSWFQj8fLKeJW/EVz9l/yE
Lb/run/oQrSm5cj5o2M6iipx5ZX/AOHPeqQnnoaWuO+IV9c2kempb3stmk05WWSNsHHHP4Zr56nB
1JKKPpqtRU4OTOwz9aM153p97c2viewtdL8RS6zFOxFwj8hF9c/56Ua7eyP4zvLW68QXGl2scaFG
RjgnA4x+JNb/AFZ81r9L7M53i1y3t1tuvzPRM1z+r6tOty1vbuY1ThmHUmk8JxRC3nmg1+XV42YL
ukP+rI7frUHiGyuLZri9hhadSpfagyc46Yrx8yjWUOSl380dVOaceZjbLxCbS7ihvblSkzBFDn5s
ngY/GnX/AIh+0Xs1rZXSr5DFXCN82R1zXIeGvD2qaxrkN9eQSxQxyiWSWVSucHIVQaf4q8Oappuu
TajZQSywyyGVJYgWKE8kED/OK6llT9l9X9s+a17+fY4frlTl9ooe7f8ADudlpOr3BukguHMqSHAJ
6g10Wa5Pw7aXN4La9ngeBQA5V1wc+mK37/TU1ApvuLqHZn/UTGPOfXHWuPLo1owca3R2O9yuuaJd
zRmua8M6d9osoL+a+vpJVlkGHuWKkB2AyO/Ap+m6zbQahq0N9qMUZS8IiWaUDau1eBntmvUcNXbo
Zxq3Sb0udFuoBzXP6bqf27xXqCQXgntUtIigRwyhstnp36VkaI+m3mlR3GpeILiK6Zn8xDflMfMc
fLnjjFP2T6+X4k+2V9PP8Dt80ZqtYRQw2cawXDzxYysjybywP+13rA16/v7DxDBPbM8ltb2hkuLc
c703gEgeo61EY8zsi5T5Y3Z1GaAc1yfinW5pdPe30efBEAuZrhD/AKuP+EA+rfyzW9qGoppmkS3s
g3COPdgdWbHA/E03BpJ9xKqm2uxezRmuc0CS/sb59N1W4aaW4iF1EzHoT99B7KcY9jUet6WLdrWS
LUNQU3N6kbgXTY2sTkAdqfJ71ri9o+XmSOnzRmsDUPN0LT0gsJpprq9nWGJrqUyeWT1PPYAE4obw
5KIQ0Wt6it2OfOaXcpb3Tpj2qeVb3G5u9kjf3CjcK56+1FtP8S6bHd3yxQNay+aXYIjuNuD/ADpN
U1i1ubzSobHUonaS8CyLDKCSu1uuO1P2b07MXtVr5f8AAOhDq2dpBwcHBorITQigIF1IvJPy0UWj
3L5pdjxainxp5kiIDguwXJ7ZOK25fCs4u4LeC6STzppIQzoyYZBlvqPcV9NOrCDtJnyUKU5q8UU/
DsUM/iKxiuEWSJ5QGV+hGD1rY/s61kv7ZbiziW9+xSyNZx/KJJVJ2KQOhI5wOuKym0C5juvKaeBY
/I+0G4LEIsecZPGevGMUJoF39quIZpoLf7O6q0skmFLNygBHqOc1zzcJy5lO2h001OEeVwvqaqaV
pJ1G9t7hRAGigC/PkW0z9R9AeD6A1LbaLp76lewi0SWNdQNvJmQj7NBtJ8wc+vc8cVjWHh281G3e
WGWEEStEEZjl2UZPIGOnc1WGmXJ0aTVcjyFk8thu+Y++PTPH1qHFar2nl8y+Z6fu/M3rTS9Kfw0k
0kSSXDRXEgI3CR9jYUqc4GM5II5Fc3Y/8f8Aa9/3yf8AoQrVHhTUjgiSHb9m+0h9xxj+7/ve1U/s
0FtqdkLe6W4VnjYlR907hxVwcVzJSuRUUny3jY9yrkfH2nX18mmyWVk135E5eSNccjjg+xxXXUhG
a8GnNwkpI+jq01Ug4PqedTadq2sajYmDw0mjeRMHe4DBflB9sVNrFhqEPjK8vx4dOq20saqgbG0H
A5/Su/xRitvrMr7dLdTB4WLW+t79DB8MTXLxzxTeHxpCKQVCkYkJ68D8Kr+IL+4naeyt5mgAUoXQ
4bOOua6baK53WNLn+1PcQIZEflgvVTXj5nOtyc9LudMIWjytnHeG/E+q6XrcdhqE8s0MkgidJTuK
EnAZTTvFXijVL/WpdM06aWGGGQxKkRw0jDqSfSulsvD/ANtu4Zru1ASFg6s45yORjv1pdQ0D7LfT
3VraqROxd2Rctk9c10rNf3P1h0feta3S/e3Y4vqlXl9nz6X+duwvh2+urUW9lczNcAqFLO2SG9c1
1Q61zekaXcNdJPMhjjjORu4JNdJiuTL5Vp03Kt1Z32UVZGX4bt5rTRY4riNo5BJKSp64LsR+lV9K
0xRf6tLeWaHzbstE0iA7l2ryPbitzAo2ivT5nr5mfItPIw7HTpLbxXqFwlsIraS1iVGUAKzAtkcf
hWXoZ/s7SorS88N3c06M+51t0YNliRyTzxXYbRQABVe0ez8vwJ9kr3Xn+JXsZhPbI4tpLYEcRSKF
ZfwFU3tpT4pS48omEWTRl8cbt4OPyrUAAoxUXszTlujn7/QLex8M6laaXbHfchm2A5LMew9h2FLr
GnXerXVhYhpYLWIefLOmM714RRn35/Ct/FG0VXPLch0onManoN9biDUrbULy/urKQSRwylPnB4ZR
gDqM1o6zBNcx6eYYmbZfRSOO6qM5J+la20UbRRzy08g9mtbdTL1/Tp9Qso2tGVbq1mWeDd91mHY+
xBIqp/b2oNEYo/D96LvGNr7RED7vnp9K6DGaTApKWlmhyg27p2MG50+e68S6bcXFqkkMdrKsxwGR
XO3A5/Gn6rpi/a9KktLNAIrwPI0aAbV2tyfatvAFG0GnzvTyF7Na+f8AwBaKKKg2Pn9H2SI46qQR
n2Oa0V8QXw1gao8hllVnZEdiVTcCCB6dazKK+qlCMt0fGRnKOzNU6/cS3JnuYY7gyWwtp1cn98o6
EkHIPA5HpUkHia6hvZ7p4IZTK6OEbICMgwuMHOAOMdxWNRUewp9i/b1O5r23iS8tUkjRU8uaWSWV
MkB964IOOw7UxNeuU0k6WIofsxhMRBT5uW3bs9c57dKy6KfsafYPb1O5tr4qv1hEO2Ixgk7cHvH5
f8ufrWXY8X1qB085P/QhUFT2X/H/AGv/AF3T/wBCFHs4wi+VAqkptczPe6KKK+XPrwooooAKKKKA
EpcUUUAJS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9k=

--_004_BN8PR08MB5748C0A8D6881BF572B3B3FE9DEB0BN8PR08MB5748namp_--

QuotedPrintableDecoder 方法是否需要发挥作用?我已经查看了 http://www.mimekit.net/docs/html/Working-With-Messages.htm,但我希望我不必手动遍历每个部分,并且仍然有一种方法可以只获取消息 body。

您使用 MimeKit 遇到的问题给您关于无法解析 headers 的错误是因为您的字符串缺少消息 headers.

您实际上在做的是要求 MIME 解析器从消息的中途开始解析消息。你给了它一个不可能完成的任务。

您需要将原始消息 headers 与上述字符串组合以生成原始(完整)消息源,然后才能对其进行解析。

或者你必须伪造原始消息 headers 以便正确解析。

大概您的数据库中某处有原始消息 headers?

Does the QuotedPrintableDecoder method need to come into play? I've reviewed http://www.mimekit.net/docs/html/Working-With-Messages.htm, but I'm hoping I don't have to manually traverse each part and there's still a way to grab just the message body.

通常不需要自己使用任何 low-level 解码器(或编码器)。

有多种获取消息的方法body:

  1. 手动遍历 MIME 树(但通常我不推荐这样做),但要做到这一点,您确实需要了解 MIME 的结构以及常见的邮件客户端如何构造它们的消息。除非您使用 MIME well-read,否则我一般不会推荐它。 (难度:极限)
  2. 使用MimeIterator。在大多数情况下,除非您想在不使用任何递归的情况下手动遍历 MIME 树结构,否则我不会费心使用这种方法。这个 class 真正派上用场的地方是如果你正在实现更类似于 IMAP 服务器的东西。同样,您需要了解 MIME 的工作原理才能真正利用它。有关如何使用它的简单示例,请参阅文档。 (难度:极限)
  3. 使用MimeVisitor子class遍历MIME树结构。有关如何执行此操作的一个很好的示例,我建议您查看文档示例中的 HtmlPreviewVisitor class。如果您想像邮件客户端那样 "render" 消息,这可能是最好的处理方式。 (难度:中等)
  4. 如果您想要的只是获取消息的快速而肮脏的方式 body 并且您不关心尝试以与 Outlook 或 GMail 相同的方式呈现消息,那么您可以使用 MimeMessage.TextBody and/or MimeMessage.HtmlBody 属性。 (难度:简单模式)

如果我是你,我可能会在 TextBody/HtmlBody 属性和使用类似于示例文档中的 HtmlPreviewVisitor class 的属性之间做出选择。它们将是完成您想做的事情的最简单方法。