I am using the office api within outlook. I'm trying to set an additional x-header to my mail in the composer scope, so I can identify the mail later on.
I used this documentation here to create my bits of code:
https://learn.microsoft.com/en-us/javascript/api/outlook/office.internetheaders?view=outlook-js-preview
Office.context.mailbox.item.internetHeaders.setAsync({"x-sap-mail-addin-id": this.state.addinMailId}, {
}, (assyRes) => {
Office.context.mailbox.item.internetHeaders.getAsync(["x-sap-mail-addin-id"], { }, (val) => {
console.log(val);
});
console.log(assyRes);
});
As the screens show, the value is set right now.
So I tried to read the mail from the MS Graph (and got it) as follows:
var configuration = provider.GetService<ConfigurationService>();
var clientApp = ConfidentialClientApplicationBuilder
.Create(configuration.AzureAD.ApplicationId)
.WithTenantId(configuration.AzureAD.TenantId)
.WithClientSecret(configuration.AzureAD.AppSecret)
.Build();
var authProvider = new ClientCredentialProvider(clientApp);
var graphClient = new GraphServiceClient(authProvider);
var messageStream = await graphClient.Users["mail2sap-sendmail#gisdev.onmicrosoft.com"].Messages["AAMkADMzNDg3YTFiLWI4NDItNDI5Ni1hNzU1LTE3YmRhYjZkYzFjMwBGAAAAAABc2UL4pp4rRoxnwy3lWAHyBwAmKhkFHv2sRIc0wWWwSW0lAAAAAAEMAAAmKhkFHv2sRIc0wWWwSW0lAAAAAAlEAAA="].Content.Request().GetAsync();
var messageMetaData = await graphClient.Users["mail2sap-sendmail#gisdev.onmicrosoft.com"].Messages.Request().GetAsync();
So I'd have expected the header to be somewhere here:
But neither the Guid nor the attribute name can be found in the entire message text.
Same is true for the meta data from the graph.
What am I doing wrong here?
EDIT: Here is what I got from graph:
Received: from AM0PR09MB4036.eurprd09.prod.outlook.com (2603:10a6:208:19f::13)
by DB8PR09MB4058.eurprd09.prod.outlook.com with HTTPS; Thu, 6 May 2021
07:53:21 +0000
Received: from AM9PR09MB4593.eurprd09.prod.outlook.com (2603:10a6:20b:287::6)
by AM0PR09MB4036.eurprd09.prod.outlook.com (2603:10a6:208:19f::13) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.27; Thu, 6 May
2021 07:53:21 +0000
Received: from AM9PR09MB4593.eurprd09.prod.outlook.com
([fe80::c008:da09:d9b2:47cc]) by AM9PR09MB4593.eurprd09.prod.outlook.com
([fe80::c008:da09:d9b2:47cc%4]) with mapi id 15.20.4108.026; Thu, 6 May 2021
07:53:20 +0000
From: User <User#tenant.onmicrosoft.com>
To: User <User#tenant.onmicrosoft.com>
Subject: 123
Thread-Topic: 123
Thread-Index: AQHXQkdWc7SsFNH9wEqedVXYoSRrXQ==
Date: Thu, 6 May 2021 07:53:20 +0000
Message-ID:
<LONGID#AM9PR09MB4593.eurprd09.prod.outlook.com>
Accept-Language: en-DE, en-GB, en-US, de-DE
Content-Language: aa
X-MS-Exchange-Organization-AuthAs: Internal
X-MS-Exchange-Organization-AuthMechanism: 04
X-MS-Exchange-Organization-AuthSource: AM9PR09MB4593.eurprd09.prod.outlook.com
X-MS-Has-Attach:
X-MS-Exchange-Organization-Network-Message-Id:
MESSAGE_ID
X-MS-Exchange-Organization-SCL: -1
X-MS-TNEF-Correlator:
X-MS-Exchange-Organization-RecordReviewCfmType: 0
x-ms-publictraffictype: Email
X-Microsoft-Antispam-Mailbox-Delivery:
ucf:0;jmr:0;auth:0;dest:I;ENG:(750129)(520011016)(706158)(944506458)(944626604);
X-Microsoft-Antispam-Message-Info:
didRz2nSjLEkd9U7ivulQq20MhG39bFkrSpiT//1gM51su3XDIz+haWsUqAYbfT7XVFmv7/sHNnDbS9pAvqN3lt8juTcmd4kiXLclZf6HsXGy9aBC5BbqSN5dgq5rTQ+1vjMZS6dlbbVvEb96d9B9BkOCTdYexnWDW6y4BQjwqAMthoSs3a9Dlr3TOy9ijC6DltkRQOt9lqQqtPViwoPqLnpF42EC5Lk98xKvWHHomRTcW3tcTL05mpAgvH5bLGZvjvBwllG9tpJvecs+PFXsZjfK3gTRMbEB4/yVw4QaqQcCL2zQsRYgJKNt7r3Vp3Jol6xhR/45FAntpFrJKio2Qwzmh4iQdAXvxZj/tR0e9c=
Content-Type: multipart/alternative;
boundary="_000_AM9PR09MB45936DB89D92E97CAF50EBF2FB589AM9PR09MB4593eurp_"
MIME-Version: 1.0
--_000_AM9PR09MB45936DB89D92E97CAF50EBF2FB589AM9PR09MB4593eurp_
Content-Type: text/plain; charset="us-ascii"
sd
--_000_AM9PR09MB45936DB89D92E97CAF50EBF2FB589AM9PR09MB4593eurp_
Content-Type: text/html; charset="us-ascii"
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
sd</div>
</body>
</html>
--_000_AM9PR09MB45936DB89D92E97CAF50EBF2FB589AM9PR09MB4593eurp_--
You will need to call item.getAllInternetHeadersAsync to get internet headers on the current message in Read mode. This API will get all of the internet headers on the item, and you can filter the asyncResult.value for the header you are interested in.
Related
I'm connecting to Office 365 mail servers using IMAP.
Our sysadmin enabled the anti-spam, so any recieved mail from outside is transformed: we just recieve a forward message rather that the original message.
With Thunderbird or Outlook Web Access, I can see the original mail as an attached EML file.
But when I try to parse attachements in the mails, I can't find attachement in those mails. If I recieve an email with a real attachement, I get can find it as attachement.
I tried a message.ToString() to get the complete message I recieve:
Received: from *****.prod.outlook.com (*****)
by *****.prod.outlook.com with HTTPS; Thu, 11 Aug 2022
13:37:42 +0000
Received: from *****.PROD.OUTLOOK.COM (*****) by
*****.prod.outlook.com (*****) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.23; Thu, 11 Aug
2022 13:37:41 +0000
Received: from *****.prod.protection.outlook.com
(*****) by *****.outlook.office365.com
(*****) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5525.11 via Frontend
Transport; Thu, 11 Aug 2022 13:37:41 +0000
Authentication-Results: spf=none (sender IP is *****)
smtp.helo=*****.aznetwork.eu; dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=aznetwork.eu;compauth=pass
reason=105
Received-SPF: None (protection.outlook.com: *****.aznetwork.eu does not
designate permitted sender hosts)
Received: from *****.aznetwork.eu (*****) by
*****.mail.protection.outlook.com (*****) with Microsoft SMTP
Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.20.5525.11 via Frontend Transport; Thu, 11 Aug 2022 13:37:41 +0000
Received: from localhost (localhost.localdomain [127.0.0.1])
by *****.aznetwork.eu (Postfix) with ESMTP id 053BC1C631E
for <recipient#mail.com>; Thu, 11 Aug 2022 15:37:41 +0200 (CEST)
Received: from *****.aznetwork.eu ([127.0.0.1])
by localhost (*****.aznetwork.eu [127.0.0.1]) (amavisd-new, port 10032)
with ESMTP id Tin75ip0CVd1 for <recipient#mail.com>;
Thu, 11 Aug 2022 15:37:40 +0200 (CEST)
Received: from localhost (localhost.localdomain [127.0.0.1])
by *****.aznetwork.eu (Postfix) with ESMTP id B55251C6446
for <recipient#mail.com>; Thu, 11 Aug 2022 15:37:40 +0200 (CEST)
X-Virus-Scanned: amavisd-new at *****.aznetwork.eu
Received: from *****.aznetwork.eu ([127.0.0.1])
by localhost (*****.aznetwork.eu [127.0.0.1]) (amavisd-new, port 10026)
with ESMTP id 4lpOVXL1yFKw for <recipient#mail.com>;
Thu, 11 Aug 2022 15:37:40 +0200 (CEST)
Received: from *****.aznetwork.eu (*****.aznetwork.priv [*****])
by *****.aznetwork.eu (Postfix) with ESMTP id 9E4CB1C631E
for <recipient#mail.com>; Thu, 11 Aug 2022 15:37:40 +0200 (CEST)
Date: Thu, 11 Aug 2022 15:37:40 +0200 (CEST)
From: Sender Name <sender#mail.com>
To: recipient#mail.com
Message-ID: <1682353652.2846324.1660225060639.JavaMail.zimbra#aznetwork.eu>
Subject: [EXTERNE] Read-Receipt: Mail Subject
Auto-Submitted: auto-replied (zimbra; read-receipt)
Precedence: bulk
Return-Path: <>
X-MS-Exchange-Organization-ExpirationStartTime: 11 Aug 2022 13:37:41.4732
(UTC)
X-MS-Exchange-Organization-ExpirationStartTimeReason: OriginalSubmit
X-MS-Exchange-Organization-ExpirationInterval: 1:00:00:00.0000000
X-MS-Exchange-Organization-ExpirationIntervalReason: OriginalSubmit
X-MS-Exchange-Organization-Network-Message-Id:
384141c3-c532-4391-771a-08da7b9eaa12
X-EOPAttributedMessage: 0
X-EOPTenantAttributedMessage: 873b62a6-6fcf-467d-8380-ce41a1d6da9f:0
X-MS-Exchange-Organization-MessageDirectionality: Incoming
X-MS-PublicTrafficType: Email
X-MS-Exchange-Organization-AuthSource:
*****.prod.protection.outlook.com
X-MS-Exchange-Organization-AuthAs: Anonymous
X-MS-Office365-Filtering-Correlation-Id: 384141c3-c532-4391-771a-08da7b9eaa12
X-MS-TrafficTypeDiagnostic: AM9PR02MB7641:EE_
Content-Type: multipart/mixed;
boundary="_16f20566-32fe-437d-8fb6-e2fcbadabd01_"
X-MS-Exchange-Organization-SCL: 1
X-Microsoft-Antispam: BCL:0;
X-Forefront-Antispam-Report:
CIP:*****;CTRY:FR;LANG:fr;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:*****.aznetwork.eu;PTR:*****.aznetwork.eu;CAT:NONE;SFS:(13230016)(36756003)(7696005)(6266002)(26005)(564344004)(356005)(7636003)(336012)(426003)(2616005)(66574015)(42882007)(83380400001)(78352004)(5660300002)(8676002)(6916009)(1096003);DIR:INB;
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Aug 2022 13:37:41.3795
(UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 384141c3-c532-4391-771a-08da7b9eaa12
X-MS-Exchange-CrossTenant-Id: 873b62a6-6fcf-467d-8380-ce41a1d6da9f
X-MS-Exchange-CrossTenant-AuthSource:
*****.prod.protection.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: Internet
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR02MB7641
X-MS-Exchange-Transport-EndToEndLatency: 00:00:01.2537846
X-MS-Exchange-Processed-By-BccFoldering: 15.20.5525.010
X-Microsoft-Antispam-Mailbox-Delivery:
ucf:0;jmr:0;auth:0;dest:I;ENG:(910001)(944506458)(944626604)(920097)(930097);
X-Microsoft-Antispam-Message-Info:
=?iso-8859-1?somebase64data=
MIME-Version: 1.0
--_16f20566-32fe-437d-8fb6-e2fcbadabd01_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
ATTENTION: Ce message est originaire de l'ext=E9rieur de ***. Ne pas clique=
r sur les liens internet ou ouvrir les pi=E8ces jointes =E0 moins que vous =
ne connaissiez l'auteur ou sachiez que le contenu est sain (pas de virus).
--_16f20566-32fe-437d-8fb6-e2fcbadabd01_
Content-Type: message/rfc822
X-MS-Exchange-Organization-InternalOrgSender: True
Received: from *****.PROD.OUTLOOK.COM (*****) by
*****.prod.outlook.com (*****) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.23; Thu, 11 Aug
2022 13:37:41 +0000
Received: from *****.prod.protection.outlook.com
(*****) by *****.outlook.office365.com
(*****) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5525.11 via Frontend
Transport; Thu, 11 Aug 2022 13:37:41 +0000
Authentication-Results: spf=none (sender IP is *****)
smtp.helo=*****.aznetwork.eu; dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=aznetwork.eu;
Received-SPF: None (protection.outlook.com: *****.aznetwork.eu does not
designate permitted sender hosts)
Received: from *****.aznetwork.eu (*****) by
*****.mail.protection.outlook.com (*****) with Microsoft SMTP
Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.20.5525.11 via Frontend Transport; Thu, 11 Aug 2022 13:37:41 +0000
Received: from localhost (localhost.localdomain [127.0.0.1])
by *****.aznetwork.eu (Postfix) with ESMTP id 053BC1C631E
for <recipient#mail.com>; Thu, 11 Aug 2022 15:37:41 +0200 (CEST)
Received: from *****.aznetwork.eu ([127.0.0.1])
by localhost (*****.aznetwork.eu [127.0.0.1]) (amavisd-new, port 10032)
with ESMTP id Tin75ip0CVd1 for <recipient#mail.com>;
Thu, 11 Aug 2022 15:37:40 +0200 (CEST)
Received: from localhost (localhost.localdomain [127.0.0.1])
by *****.aznetwork.eu (Postfix) with ESMTP id B55251C6446
for <recipient#mail.com>; Thu, 11 Aug 2022 15:37:40 +0200 (CEST)
X-Virus-Scanned: amavisd-new at *****.aznetwork.eu
Received: from *****.aznetwork.eu ([127.0.0.1])
by localhost (*****.aznetwork.eu [127.0.0.1]) (amavisd-new, port 10026)
with ESMTP id 4lpOVXL1yFKw for <recipient#mail.com>;
Thu, 11 Aug 2022 15:37:40 +0200 (CEST)
Received: from *****.aznetwork.eu (*****.aznetwork.priv [*****])
by *****.aznetwork.eu (Postfix) with ESMTP id 9E4CB1C631E
for <recipient#mail.com>; Thu, 11 Aug 2022 15:37:40 +0200 (CEST)
Date: Thu, 11 Aug 2022 15:37:40 +0200 (CEST)
From: Sylvain DEVIDAL <sender#mail.com>
To: recipient#mail.com
Message-ID: <1682353652.2846324.1660225060639.JavaMail.zimbra#aznetwork.eu>
Subject: [EXTERNE] Read-Receipt: Mail Subject
Content-Type: multipart/report;
boundary="----=_Part_2846322_558173291.1660225060636"; report-type=disposition-notification
Auto-Submitted: auto-replied (zimbra; read-receipt)
Precedence: bulk
Return-Path: <>
X-MS-Exchange-Organization-OriginalArrivalTime: 11 Aug 2022 13:37:41.3795
(UTC)
X-MS-Exchange-Organization-ExpirationStartTime: 11 Aug 2022 13:37:41.4732
(UTC)
X-MS-Exchange-Organization-ExpirationStartTimeReason: OriginalSubmit
X-MS-Exchange-Organization-ExpirationInterval: 1:00:00:00.0000000
X-MS-Exchange-Organization-ExpirationIntervalReason: OriginalSubmit
X-MS-Exchange-Organization-Network-Message-Id:
384141c3-c532-4391-771a-08da7b9eaa12
X-MS-Exchange-Organization-OriginalClientIPAddress: *****
X-MS-Exchange-Organization-OriginalServerIPAddress: *****
X-EOPAttributedMessage: 0
X-EOPTenantAttributedMessage: 873b62a6-6fcf-467d-8380-ce41a1d6da9f:0
X-MS-Exchange-Organization-TargetResourceForest: *****.prod.outlook.com
X-MS-Exchange-Organization-OrgEopForest: EUR01
X-MS-Exchange-Organization-MessageDirectionality: Incoming
X-MS-Exchange-Organization-Id: 873b62a6-6fcf-467d-8380-ce41a1d6da9f
X-MS-Exchange-Organization-FFO-ServiceTag: EUR01B
X-MS-Exchange-Organization-Cross-Premises-Headers-Processed:
*****.prod.protection.outlook.com
X-MS-Exchange-Organization-ConnectingIP: *****
X-MS-Exchange-Organization-ConnectingEHLO: *****.aznetwork.eu
X-MS-Exchange-Organization-AS-LastExternalIp: *****
X-MS-Exchange-Organization-Originating-Country: FR
X-MS-Exchange-Organization-OriginalEnvelopeRecipients: recipient#mail.com
X-MS-Exchange-Organization-PtrDomains: *****.aznetwork.eu
X-MS-Exchange-Organization-EhloAndPtrDomain:
*****.aznetwork.eu;*****.aznetwork.eu
X-MS-Exchange-Organization-MxPointsToUs: true
X-MS-Exchange-Organization-RecipientMxInfo-PFAFD:
recipientdomain.com#*****.mail.protection.outlook.com
X-MS-Exchange-Organization-CompAuthRes: pass
X-MS-Exchange-Organization-CompAuthReason: 105
X-MS-Exchange-Organization-SpoofDetection-Frontdoor-DisplayDomainName:
aznetwork.eu
X-MS-Exchange-Organization-Auth-ExtendedDmarcStatus: Pass
X-MS-Exchange-Organization-SenderRep-Score: 3
X-MS-Exchange-Organization-SenderRep-Data:
IpClassSmallGrayBest_SmallGrayBest_unknown
X-MS-Exchange-Organization-VBR-Class: SmallGrayBest
X-MS-Exchange-Organization-HMATPModel-Spf: 5
X-MS-Exchange-Organization-HMATPModel-Recipient:
*****
X-MS-Exchange-Organization-TransportTrafficType: Email
X-MS-PublicTrafficType: Email
X-MS-Exchange-Organization-OrderedPrecisionLatencyInProgress:
LSRV=*****.PROD.OUTLOOK.COM:TOTAL-FE=0.093|SMR-PEN=0.082(RENV=0.068);2022-08-11T13:37:41.721Z
X-MS-Exchange-Organization-MessageLatency:
SRV=*****.eop-EUR01.prod.protection.outlook.com:TOTAL-FE=0.247|SMR-PEN=0.221(RENV=0.031(SMRRC=0.029(SMRRC-TenantAttributionAndInboundConnectorAgent=0.026
))|REOH=0.189(SMREH=0.127(SMREH-Protocol Filter Agent=0.124)))|SMS=0.029
X-MS-Exchange-Organization-MessageLatency:
SRV=*****.PROD.OUTLOOK.COM:TOTAL-FE=0.116|SMR-PEN=0.082(RENV=0.068)|SMS=0.023(SMSC=0.033)
X-MS-Exchange-Forest-ArrivalHubServer: *****.prod.outlook.com
X-MS-Exchange-Organization-AuthSource:
*****.prod.protection.outlook.com
X-MS-Exchange-Organization-AuthAs: Anonymous
X-MS-Exchange-Organization-FromEntityHeader: Internet
X-MS-Exchange-Organization-MessageScope: 7ca5d36b-aa6e-4988-8ce2-ebc9e7a7fc2a
X-MS-Exchange-Forest-MessageScope: 7ca5d36b-aa6e-4988-8ce2-ebc9e7a7fc2a
X-MS-Exchange-Organization-Antispam-ProtocolFilterHub-ScanContext:
ProtocolFilterHub:SmtpOnEndOfData;
X-MS-Office365-Filtering-Correlation-Id: 384141c3-c532-4391-771a-08da7b9eaa12
X-MS-Exchange-Organization-P2SenderDisplayNamePII:
H101(Oo2uoTVO0nYrZjTS6UNDuqjuYq+ejtD0u3d/6RR1MgI=)
X-MS-Exchange-Organization-P2SenderPII:
*****
X-MS-Exchange-Organization-PFAHub-Total-Message-Size: 9121
X-MS-Exchange-Organization-OriginalSize: 9121
X-MS-TrafficTypeDiagnostic: AM9PR02MB7641:EE_
X-MS-Exchange-Organization-HygienePolicy: Premium
X-MS-Exchange-Organization-ReplicationInfo:
ReplicaId=9de80d70-aee0-b1f9-8fed-3baa9e7bda08;ReplicatingServerFqdn=*****.eurprd02.prod.outlook.com
X-MS-Exchange-Forest-Language: fr
X-MS-Exchange-Forest-IndexAgent-0:
Somebase64data=
X-MS-Exchange-Forest-IndexAgent: 1 833
X-MS-Exchange-Forest-EmailMessageHash: 6E6C2B22,31F80CB7
X-MS-Exchange-Organization-PhishSim-Rules-Execution-History:
336d57ef-0937-4345-9ee7-7488d99e1eee
X-MS-Exchange-Organization-Antispam-PreContentFilter-PolicyLoadTime:
PSOSUB:6;PSOSUBLOAD:5;PSOSUBRUN:0;PSOSUBCOUNT:1;SMORES:2;SMORESLOAD:1;SMORESRUN:0;SMORESCOUNT:0;SAORES:4;SAORESLOAD:1;SLORES:2;APORES:22;APORESLOAD:1;APORESRUN:20;APORESCOUNT:2;RSORES:1;SLORESLOAD:1;
X-MS-Exchange-Organization-AttachmentDetailsHeaderStamp-Success: 1.0
X-MS-Exchange-Organization-AttachmentDetails:
0:EpUTydEBwSuS9oq8FNAFHYcMPGvyaOa9tpBsGPTlB4k=:U:Text:QVRUMDAwMDQ=::#:False:::N:::N::N:None:
X-MS-Exchange-Organization-MessageFingerprint:
A0DBCBFD.2F1B0759.C2DDF092.B4130E24.200A4
X-MS-Exchange-Organization-AttachmentDetailsInfo-ChunkCount: 1
X-MS-Exchange-Organization-AttachmentDetailsInfo-0:
[{"ID":0,"FS":308,"HFH":"EpUTydEBwSuS9oq8FNAFHYcMPGvyaOa9tpBsGPTlB4k=","FE":"","CEXT":[],"CFT":[],"AF":0,"AFT":"{784:\"ATT00004\",789:\"text\"}"}]
X-MS-Exchange-Organization-FeatureTable:
{385:"aznetwork.eu",452:1,453:1,454:"4A71A110#kp1.fr",504:7,506:4,507:5,508:"none",509:"aznetwork.eu",510:"*****.aznetwork.eu",651:2,653:1,656:1,721:"2.37",722:"2.35",742:1,743:3,744:1,748:"sign",749:"Latn",758:"A0DBC8FE.2F5B0759.F0DDB08F.A01F8E26.20082",781:1,782:8,1010:0,1011:"1830FF39|60572074|",1101:"0.194"}
X-MS-Exchange-Organization-MetadataFeatureTable:
{756:0,757:0,1010:0,1011:"1830FF39|60572074|",1036:"199167"}
X-MS-Exchange-Organization-Antispam-PreContentFilter-ScanContext:
CategorizerOnSubmitted;CategorizerOnResolved;
X-MS-Exchange-Organization-AVScannedByV2: true
X-MS-Exchange-Organization-AVScanComplete: true
X-MS-Exchange-Organization-ExternalRoutingTopologyAnalysis:
X-MS-Exchange-Organization-Recipient-Limit-Verified: True
X-MS-Exchange-Organization-TotalRecipientCount: 1
X-MS-Exchange-Organization-HVERecipientsForked: 1.0
X-MS-Exchange-Organization-AntiPhishPolicy: Default_kp1
X-MS-Exchange-Organization-ASDirectionalityType: 1
X-MS-Exchange-Organization-Boomerang-Verdict: None
X-MS-Exchange-Organization-HMATPModel-DkimAuthStatus: 7
X-MS-Exchange-Organization-HMATPModel-DmarcAuthStatus: 4
X-MS-Exchange-Organization-Cross-Session-Cache:
=?utf-8?somebase64data=
X-MS-Exchange-Organization-Cross-Session-Cache:
01xSupported=1;TMD_SS=1;TMD_AOT=3433;TMD_CSUM=5377;TMD_DTAET=1;TMD_ES=0;TMD_TT=0;TMD_DMNSPM=8914;TMD_DMSPM=338;TMD_PSATP=0;TMD_PS=1939;TMD_SCNT=5;TMD_TSATP=0;TMD_TS=0;TMD_ATPP2=False;TMD_CI=fr-FR;TMD_CD=2013-03-15
09:53:51.000;TMD_NEWT=0;TMD_NEWTT=0;TMD_QS=1;TR_SS=1;TR_SMAS=0;TR_TMAS=0;TR_UMAS=0;TR_TTU24H=0;TR_TT24H=0;TR_AFWR24H=18;TR_NDRSPMR24H=0;TR_R1H=315;TR_R24H=2709;TR_SPMR1H=0;TR_SPMR24H=0;TR_UP1R1H=0;TR_UP1R24H=0;TR_UP1SPMR24H=0;TR_QS=1;BR_V=None;DIR=1;PTRO=aznetwork.eu;P2O=aznetwork.eu;P_CAUTH=pass;P_CAUTHR=105;SIP2BCLAP=-1;SIP2BCLAF=-1;P2BCL=
X-MS-Exchange-Organization-Rules-Execution-History:
95544e5a-848e-428b-b1a3-43568aa659bf%%%5a9c7fc7-bc74-434e-81a5-8fe8f957dcbb%%%22b9f62e-47d3-4bb9-87f7-b1c42aa1f5e3%%%79dacf70-5b24-4672-8325-97733f56b4e3%%%572c1ac3-7cd0-4e7c-8a3b-99003d82e392
MIME-Version: 1.0
------=_Part_2846322_558173291.1660225060636
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Le mail envoy=C3=A9 le 11 ao=C3=BBt 2022 =C3=A0 15:37:26 GMT+02:00 au desti=
nataire sender#mail.com avec l=E2=80=99objet "Mail=
subject" a =C3=A9t=C3=A9 affich=C3=A9. Cela ne signifie aucunement =
que ce mail ait =C3=A9t=C3=A9 lu (ou compris).=
------=_Part_2846322_558173291.1660225060636
Content-Type: message/disposition-notification; charset=utf-8
Content-Transfer-Encoding: 7bit
Reporting-UA: 78.252.48.37; ZimbraWebClient - GC104 (Win)/8.8.15_GA_4257
Original-Recipient: rfc822;sender#mail.com
Final-Recipient: rfc822;sender#mail.com
Original-Message-ID: <YA0XNMBBLHU4.N87S2N70CKU81#dev-crm22-upd1>
Disposition: manual-action/MDN-sent-manually; displayed
------=_Part_2846322_558173291.1660225060636--
--_16f20566-32fe-437d-8fb6-e2fcbadabd01_--
(sorry for the long code)
You can see at line 147 it actually contains the original message, of type "report" (it was a read reciept).
But whatever I try, I can't parse it.
Here is my current code: (message id the mail message as I load if from mailbox)
public static void ProcessReadReceiptNotification(MimeMessage message)
{
/// This part is the "standard way" to find a read-reciept, but it doesn't work
var report = message.Body as MultipartReport;
if (report == null || report.ReportType == null || !report.ReportType.Equals("disposition-notification", StringComparison.OrdinalIgnoreCase))
{
// this is not a read receipt notification message...
Console.WriteLine("this is not a read receipt notification message... will parse parts");
/// Then I tried to iterate all parts of the mail then load the message
foreach (MimeEntity part in message.BodyParts)
{
Console.WriteLine($"A part of type {part.ContentType.MimeType} is found");
if (part.ContentType.MimeType == "message/rfc822")
{
/// Here part.Message private property contains the message
Console.WriteLine("This is a message, we load it");
using MemoryStream ms = new();
part.WriteTo(ms);
ms.Seek(0, SeekOrigin.Begin);
MimeMessage msg = MimeMessage.Load(ms);
/// Here my msg object is empty, or at least doesn't contain message data (subject, body, etc.)
//Console.WriteLine(msg.Body.ToString());
report = msg.Body as MultipartReport;
Console.WriteLine(report?.ToString());
/*
return ProcessReadReceiptNotification(msg);
*/
}
}
Console.Write("Nothing found...");
return;
}
else
{
Console.WriteLine($"Report Type : {report.ReportType}");
// process the report
foreach (var mds in report.OfType<MessageDispositionNotification>())
{
Console.WriteLine($"{mds.Content}");
var messageId = mds.Fields.Single(a => a.Field == "Original-Message-ID");
if (messageId is not null)
{
Console.Write($"Le message {messageId.Value}");
}
var readStatus = mds.Fields.Single(a => a.Field == "Disposition");
if (readStatus is not null)
{
var index = readStatus.Value.IndexOf(";");
Console.WriteLine($" a été {readStatus.Value.Substring(index + 1)}.");
}
return;
}
return;
}
}
How could I load this body part and identify it's a read-reciept (with it's original message id)?
I found that in the part.Message private property I can see the original message. But I can't access to it. part.WriteTo(ms) doesn't copy the message.
I finaly found how to read the original message.
Rather than loading the part as a MimeMessage I just had to load it as a MultipartReport...
foreach (MimeEntity part in message.BodyParts)
{
Console.WriteLine($"A part of type {part.ContentType.MimeType} is found");
if (part.ContentType.MimeType == "message/rfc822")
{
Console.WriteLine("This is a message, we load it");
using MemoryStream ms = new();
part.WriteTo(ms, true);
ms.Seek(0, SeekOrigin.Begin);
report = MimeEntity.Load(ms) as MultipartReport;
Console.WriteLine(report?.ToString());
}
}
There's no need to write the content out to a stream only to re-parse it again.
All you need to do is this:
foreach (MimeEntity part in message.BodyParts)
{
Console.WriteLine($"A part of type {part.ContentType.MimeType} is found");
// MessageParts are message/rfc822 (or equivalent such as message/news
// or message/global which is the UTF-8 version of message/rfc822)
//
// Never use case-sensitive string comparisons like
// part.ContentType.MimeType == "message/rfc822" because MIME does not
// restrict things to lowercase. Instead, the recommended way of checking
// for an exact mime-type is part.ContentType.IsMimeType("message", "rfc822")
// or
// part.ContentType.MimeType.Equals("message/rfc822", StringComparison.OrdinalIgnoreCase).
if (part is MessagePart rfc822)
{
Console.WriteLine("This is a message, lets see if the body is a multipart/report");
if (rfc822.Body is MultipartReport report)
{
// handle the multipart/report which is already in a parsed state
}
}
}
I've been hunting for this information for a week without any solid success.
I am targeting an Exchange 2010_SP2 server and have an application which sends out Appointments (Meetings) using EWS and inviting users/attendees. Currently when a user forwards their calendar item to another user, Exchange sends my application's email address an automatic notification about the forward. From the information contained within the notification message, I cannot find any information to help me specifically bind to the original appointment. I do have some clues with the user that forwarded it, the title of the event, and the date/time for it, but nothing that is guaranteed to be unique. I was thinking I could embed a unique identifier into the subject, but this seems a little gross. Has anyone else figured out a way to look up the event in context?
(Using C# and Microsoft's EWS Client API)
case EmailMessage fw when fw.ItemClass == "IPM.Schedule.Meeting.Notification.Forward":
EmailMessage message = EmailMessage.Bind(Global.Exchange, fw.Id);
message.Load();
I have attempted to try to query for the conversation, tried attaching customer X-Parameters to the original meeting, and have inspected all the properties I can think of within an EmailMessage object.
Example of a forward notification:
Internet Headers attached to the Email: (some parts redacted using ----)
Received: from FMSEDG002.ED.cps.----.com (10.1.192.134) by
fmsmsx121.amr.corp.----.com (10.18.125.36) with Microsoft SMTP Server (TLS)
id 14.3.439.0; Sat, 13 Jun 2020 14:24:33 -0700
Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.36.54) by
edgegateway.----.com (192.55.55.69) with Microsoft SMTP Server (TLS) id
14.3.439.0; Sat, 13 Jun 2020 14:24:33 -0700
Received: from BYAPR11MB3830.namprd11.prod.outlook.com (2603:10b6:a03:fc::14)
by BYAPR11MB3797.namprd11.prod.outlook.com (2603:10b6:a03:fe::27) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3088.22; Sat, 13 Jun
2020 21:24:30 +0000
Received: from BYAPR11MB3830.namprd11.prod.outlook.com
([fe80::9d21:2f25:9b76:e341]) by BYAPR11MB3830.namprd11.prod.outlook.com
([fe80::9d21:2f25:9b76:e341%7]) with mapi id 15.20.3088.027; Sat, 13 Jun 2020
21:24:30 +0000
Content-Type: multipart/mixed;
boundary="_000_BYAPR11MB383088E85E5BF51D212384F4F99E0BYAPR11MB3830namp_"
From: ----
To: ----
Subject: Meeting Forward Notification: Dummy Event - Example 3
Thread-Topic: Meeting Forward Notification: Dummy Event - Example
3
Sender: Microsoft Outlook
<MicrosoftExchange32----#----.onmicrosoft.com>
Date: Sat, 13 Jun 2020 21:24:30 +0000
Message-ID: <BYAPR11MB383088E85E5BF51D212384F4F99E0#BYAPR11MB3830.namprd11.prod.outlook.com>
X-MS-Has-Attach:
X-MS-TNEF-Correlator: <BYAPR11MB383088E85E5BF51D212384F4F99E0#BYAPR11MB3830.namprd11.prod.outlook.com>
authentication-results: ----; dkim=none (message not signed)
header.d=none;----; dmarc=none action=none header.from=----;
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 53ede74f-9111-4b3f-01ff-08d80fe028c7
x-ms-traffictypediagnostic: BYAPR11MB3797:
x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr
x-ms-oob-tlc-oobclassifiers: OLM:2089;
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: bevNkvUhwfDB1JTruSgvhewEnlseaRPl5vEl4tx04MJVY/bY7tbeShWgjWHsg2ZEGmWH2ZZN2rjA4NjqI9seC5ei1B9A0m8tvCr7Ij+3IJAUr8vYz0F7LRwVKE2nZB1E7Wy7V3pHvYxyT6tyOvjbxDeHN7Fbs0dvKYwj4g/EWxAEiXNmGFxkPXGowV3I1v2vWT+hBIIO6Sz1Lg8/jzPm7l6d9DZZ7gxjQDQfuAcBgQEUj46RqNlMosWGEK65oBHWTYRC4R2oc3z2qS3Y8VgIzg==
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:-1;SRV:;IPV:NLI;SFV:SKI;H:BYAPR11MB3830.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:;DIR:INB;SFP:;
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-Network-Message-Id: 53ede74f-9111-4b3f-01ff-08d80fe028c7
X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Jun 2020 21:24:30.0788
(UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d
X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB3797
X-OrganizationHeadersPreserved: BYAPR11MB3797.namprd11.prod.outlook.com
Return-Path: <>
X-MS-Exchange-Organization-AuthAs: Internal
X-MS-Exchange-Organization-AuthMechanism: 04
X-MS-Exchange-Organization-AuthSource: BYAPR11MB3830.namprd11.prod.outlook.com
X-CrossPremisesHeadersPromoted: ----
X-CrossPremisesHeadersFiltered: ----
X-MS-Exchange-Organization-SCL: -1
X-OriginatorOrg: intel.onmicrosoft.com
X-MS-Exchange-Organization-AVStamp-Mailbox: NAI;60104903;0;novirus
The PidLidCleanGlobalObjectId http://msdn.microsoft.com/en-us/library/cc839502.aspx extended should be set on the notification. You can use that to search for the Appointment eg this is on example of using that property
Appointment newAppointment = new Appointment(service);
newAppointment.Subject = "Test Subject";
newAppointment.Start = new DateTime(2016, 08, 27, 17, 00, 0);
newAppointment.StartTimeZone = TimeZoneInfo.Local;
newAppointment.EndTimeZone = TimeZoneInfo.Local;
newAppointment.End = newAppointment.Start.AddMinutes(30);
newAppointment.Save();
newAppointment.Body = new MessageBody(Microsoft.Exchange.WebServices.Data.BodyType.Text, "test");
newAppointment.RequiredAttendees.Add("attendee#domain.com");
newAppointment.Update(ConflictResolutionMode.AlwaysOverwrite ,SendInvitationsOrCancellationsMode.SendOnlyToAll);
ExtendedPropertyDefinition CleanGlobalObjectId = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, 0x23, MapiPropertyType.Binary);
PropertySet psPropSet = new PropertySet(BasePropertySet.FirstClassProperties);
psPropSet.Add(CleanGlobalObjectId);
newAppointment.Load(psPropSet);
object CalIdVal = null;
newAppointment.TryGetProperty(CleanGlobalObjectId, out CalIdVal);
Folder AtndCalendar = Folder.Bind(service, new FolderId(WellKnownFolderName.Calendar,"attendee#domain.com"));
SearchFilter sfSearchFilter = new SearchFilter.IsEqualTo(CleanGlobalObjectId, Convert.ToBase64String((Byte[])CalIdVal));
ItemView ivItemView = new ItemView(1);
FindItemsResults<Item> fiResults = AtndCalendar.FindItems(sfSearchFilter, ivItemView);
if (fiResults.Items.Count > 0) {
//do whatever
}
I'm using a thirdparty SMTP service - turboSMTP
And I use it when sending emails from both localhost(when testing) and from the live website and both of them work. But the email sent from the live website always get flagged as spam, while the email from localhost is not flagged as spam.
Even if the sender email is the same. The content is the same. the title is the same and so on.
Does it actually see that I'm sending from a live website or from localhost when I'm sending through a third party SMTP service that isn't related to my webhost?
a cut from my code :
SmtpClient smtpClient = new SmtpClient();
System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
mailMessage.From = new MailAddress(sender);
mailMessage.To.Add(recipient);
mailMessage.Subject = title;
mailMessage.Body = message;
mailMessage.IsBodyHtml = false;
smtpClient.Host = "smtpAddress";
smtpClient.UseDefaultCredentials = false;
smtpClient.EnableSsl = false;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.Port = 587;
smtpClient.Credentials = new NetworkCredential("username", "password");
smtpClient.Send(mailMessage);
Email that got flagged as spam(Sent from live website)
Delivered-To: censoredAddress#gmail.com
Received: by 10.107.132.3 with SMTP id g3csp14274iod;
Thu, 4 Dec 2014 00:02:36 -0800 (PST)
X-Received: by 10.202.225.197 with SMTP id y188mr5614041oig.94.1417680156083;
Thu, 04 Dec 2014 00:02:36 -0800 (PST)
Return-Path: <noreply#censoredDomain.se>
Received: from tbjjbihbhcbji.turbo-smtp.net (tbjjbihbhcbji.turbo-smtp.net. [199.187.172.198])
by mx.google.com with SMTP id x10si17295964oek.84.2014.12.04.00.02.35
for <censoredAddress#gmail.com>;
Thu, 04 Dec 2014 00:02:36 -0800 (PST)
Received-SPF: fail (google.com: domain of noreply#censoredDomain.se does not designate 199.187.172.198 as permitted sender) client-ip=199.187.172.198;
Authentication-Results: mx.google.com;
spf=fail (google.com: domain of noreply#censoredDomain.se does not designate 199.187.172.198 as permitted sender) smtp.mail=noreply#censoredDomain.se;
dkim=temperror (no key for signature) header.i=#
Message-Id: <5480151c.8a283c0a.71e4.678eSMTPIN_ADDED_MISSING#mx.google.com>
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=censoredDomain.se; s=turbo-smtp; x=1418284956; h=DomainKey-Signature:
Received:Received:MIME-Version:From:To:Date:Subject:Content-Type:
Content-Transfer-Encoding; bh=7vEAgi0RRzjrn+4Le/fcS1k1+tJ/Ro6XDU
4TKOlZ0JY=; b=Yu5q4UjDuGv2L/Fa3MR+FO4+h3jWj5KHKvDGZFCyJYj0+aB7aV
kgOix5W5zrlaJ0rbl39Ck08AORmO82jdcXzFdtFm5lst6ENG3JaWorxWyxduqWBI
TY7ZSzs9HJb4TBXcMQvvaPdM96VA7FP3i4vb4Q9mkoGX1nD6c9asLirsE=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
s=turbo-smtp; d=censoredDomain.se;
h=Received:Received:X-TurboSMTP-Tracking:MIME-Version:From:To:Date:Subject:Content-Type:Content-Transfer-Encoding;
b=ttGj0ZR2T0aPVS+Q+0oEdy5VM4wWzIBm2DtLYvtUFyHhldqWO5n2kVnZN3m1pR
w0gGFX/r67i9FblNhg04ELxvsfO2+mHg0bhyTJgYOAPjS0DjoMBZI1WD2w/CTObN
VMxSkTu8Hq8CDe49SRsduLnVLUdg2zwt86eNxItLLTno0=;
Received: (qmail 1442 invoked from network); 4 Dec 2014 08:02:34 -0000
Received: from unknown (HELO Irwindale) (authenticated#212.247.113.26) by turbo-smtp.com with SMTP; 4 Dec 2014 08:02:34 -0000
X-TurboSMTP-Tracking: 1692405204
MIME-Version: 1.0
From: noreply#censoredDomain.se
To: censoredAddress#gmail.com
Date: 4 Dec 2014 09:02:34 +0100
Subject: Testar igen
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
asdasdasd
Email that did not get flagged as spam(Sent from localhost)
Delivered-To: censoredAddress#gmail.com
Received: by 10.107.132.3 with SMTP id g3csp14413iod;
Thu, 4 Dec 2014 00:03:46 -0800 (PST)
X-Received: by 10.60.150.194 with SMTP id uk2mr5861322oeb.37.1417680226570;
Thu, 04 Dec 2014 00:03:46 -0800 (PST)
Return-Path: <noreply#censoredDomain.se>
Received: from tbjjbihbhcbji.turbo-smtp.net (tbjjbihbhcbji.turbo-smtp.net. [199.187.172.198])
by mx.google.com with SMTP id a140si17357087oib.49.2014.12.04.00.03.45
for <censoredAddress#gmail.com>;
Thu, 04 Dec 2014 00:03:45 -0800 (PST)
Received-SPF: fail (google.com: domain of noreply#censoredDomain.se does not designate 199.187.172.198 as permitted sender) client-ip=199.187.172.198;
Authentication-Results: mx.google.com;
spf=fail (google.com: domain of noreply#censoredDomain.se does not designate 199.187.172.198 as permitted sender) smtp.mail=noreply#censoredDomain.se;
dkim=temperror (no key for signature) header.i=#
Message-Id: <54801561.924dca0a.a7bc.ffffe533SMTPIN_ADDED_MISSING#mx.google.com>
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=censoredDomain.se; s=turbo-smtp; x=1418285025; h=DomainKey-Signature:
Received:Received:MIME-Version:From:To:Date:Subject:Content-Type:
Content-Transfer-Encoding; bh=7vEAgi0RRzjrn+4Le/fcS1k1+tJ/Ro6XDU
4TKOlZ0JY=; b=rW/7YJz7bCAsSz8EF2NTfU+JbIsh5A4QLAQ5EgrxJUG3j1vJmt
8aVAMEI+45iC79T/vFpfLrN1e+fuSXCXuiw9MhTgBvHG0w0JIiKpufyHUnIRmNUs
YjNRErfIhaHwtEgAFXL/0ou0sG7QrG2cKu8VP/P2WA7opvoC6tfgIQH6k=
DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
s=turbo-smtp; d=censoredDomain.se;
h=Received:Received:X-TurboSMTP-Tracking:MIME-Version:From:To:Date:Subject:Content-Type:Content-Transfer-Encoding;
b=o5Vxv9MAQeyFm1EqkQ3f56XVgxzSOR2HNB7oqg6GqxP4qPy8QY9hBu2w5DPdf3
8d/HQqJX61zN4Rfnyxgrw2PMPXr5dsrpKnKyB3o1/FsGCLH3meLyO+LYxeQBLRFO
kKtUtQ4vvSy2TN+7Sefe18lQo+E6bUunTcg64kw2I//4E=;
Received: (qmail 11732 invoked from network); 4 Dec 2014 08:03:45 -0000
Received: from unknown (HELO Codecomp-HP) (authenticated#78.70.27.139) by turbo-smtp.com with SMTP; 4 Dec 2014 08:03:45 -0000
X-TurboSMTP-Tracking: 1692407529
MIME-Version: 1.0
From: noreply#censoredDomain.se
To: censoredAddress#gmail.com
Date: 4 Dec 2014 09:03:39 +0100
Subject: Testar igen
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
asdasdasd
You have an SPF fail in you mails:
spf=fail (google.com: domain of noreply#censoredDomain.se does not designate 199.187.172.198 as permitted sender)
Try adding the IP address (range) of the SMTP provider to your SPF record (or remove it completely).
You get that fail on both mails, so I do not know why one gets through, but the one failing is probalby caused by the SPF check.
Also the DKIM signature seems to be not correct:
dkim=temperror (no key for signature) header.i=#
You should check that with the SMTP provider.
I have an email application that creates encrypted emails. It works fine in outlook and all the email counterparties I send the email to reports no issues.
However when I try to decrypt them with Mimekit I get a "Bad data" exception.
Some of the stack trace:
at System.Security.Cryptography.Pkcs.EnvelopedCms.DecryptContent(RecipientInfoCollection recipientInfos, X509Certificate2Collection extraStore)
at System.Security.Cryptography.Pkcs.EnvelopedCms.Decrypt()
at MimeKit.Cryptography.WindowsSecure...
My email mime looks like this:
Received: from Dx ([x]) by
x ([x]) with mapi id
x; Fri, 7 Mar 2014 14:48:49 +0100
From: x <x#x.com>
To: x <x2#x.com>
Subject:
xxxxxxxx
07-03-2014 14:48:46
Thread-Topic:
xxxxxxx
07-03-2014 14:48:46
Thread-Index: AQHPOgv3JHiUE6wuJk+EQu4eAA1oDA==
Date: Fri, 7 Mar 2014 14:48:48 +0100
Message-ID: <x>
Accept-Language: da-DK, en-US
Content-Language: en-US
X-MS-Exchange-Organization-AuthAs: x
X-MS-Exchange-Organization-AuthMechanism: x
X-MS-Exchange-Organization-AuthSource: x
X-MS-Has-Attach: yes
X-MS-Exchange-Organization-SCL: -1
X-MS-TNEF-Correlator:
Content-Type: application/pkcs7-mime; name="smime.p7m";
smime-type=enveloped-data
Content-Disposition: attachment; filename="smime.p7m"
Content-Transfer-Encoding: base64
MIME-Version: 1.0
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
This is how I perform my encryption:
public static string EncryptContent(string content, X509Certificate2 certificate)
{
byte[] contentBytes = Encoding.ASCII.GetBytes(content);
var envelopedCms = new EnvelopedCms(SubjectIdentifierType.IssuerAndSerialNumber, new ContentInfo(contentBytes));
var recipient = new CmsRecipient(SubjectIdentifierType.IssuerAndSerialNumber, certificate);
envelopedCms.Encrypt(recipient);
var encodedData = envelopedCms.Encode();
var encodedDataBase64 = Convert.ToBase64String(encodedData, Base64FormattingOptions.InsertLineBreaks);
return encodedDataBase64;
}
and this is how I attempt to decrypt:
var primarySecureMimeContext = CreateSecureMimeContext(certificateInfo.PrimaryCertificate,
certificateInfo.PrimaryPassword);
var primaryDecryptedEntity = entity.Decrypt(primarySecureMimeContext);
private SecureMimeContext CreateSecureMimeContext(string certificateFilename, string certificatePassword)
{
var secureMimeContext = new WindowsSecureMimeContext();
var certificate = new X509Certificate2(certificateFilename,
certificatePassword);
var bouncyX509Certificate = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(certificate);
secureMimeContext.Import(bouncyX509Certificate);
return secureMimeContext;
}
When I decrypt the content myself using enveloped cms directly, there are no issues.
This is the email after my own decryption:
Content-Type: multipart/mixed;
boundary="5511bd79-26dc-41e5-ac96-7adfdea5f6e5"
--5511bd79-26dc-41e5-ac96-7adfdea5f6e5
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
--5511bd79-26dc-41e5-ac96-7adfdea5f6e5
Content-Type: application/octet-stream;
name="TestFile.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="TestFile.txt"
77u/VGVlZWVlZXN0
--5511bd79-26dc-41e5-ac96-7adfdea5f6e5--
Can anyone see what is causing this?
After having using the DummySecureMimeContext as proposed by jstedfast it works. A more thorough walkthrough can be found here: https://github.com/jstedfast/MimeKit/issues/38
I think the problem is the way you are adding the certificate to the context:
private SecureMimeContext CreateSecureMimeContext(string certificateFilename, string certificatePassword)
{
var secureMimeContext = new WindowsSecureMimeContext();
var certificate = new X509Certificate2(certificateFilename,
certificatePassword);
var bouncyX509Certificate = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(certificate);
secureMimeContext.Import(bouncyX509Certificate);
return secureMimeContext;
}
What this is doing is adding the certificate to the AddressBook certificate store, but where you actually want to add it in order to decrypt it (because you'll need the private key password as well) is the personal cert store.
Try this:
private SecureMimeContext CreateSecureMimeContext (string certificateFilename, string certificatePassword)
{
var secureMimeContext = new WindowsSecureMimeContext ();
using (var stream = File.OpenRead (certificateFilename))
secureMimeContext.Import (stream, certificatePassword);
return secureMimeContext;
}
The exception message you are getting isn't very helpful, but I am guessing that it means that it can't find the certificate and/or private key. I wrote a test program and have been unsuccessful in reproducing this bug, so I could be wrong... but since my certificates/private keys are already imported into my personal cert store, I'm not sure how to remove them to test this theory.
Let me know how that works out for you.
Update: Oops, I done goofed. Just updated CreateSecureMimeContext() above to open the certificate file stream because WindowsSecureMimeContext.Import() takes a stream, not a file name.
I've got a custom WebDAV server, built using Sphoirum webdav server, that resides inside an ASP.NET MVC3 application. It's a .Net 4.0 project.
The document repository is a SharePoint, where our MVC application is a front end to it, and exposes the whole thing via the WebDAV. Just to note we don't have WebDAV publishing enabled on our IIS 7.5.
I've implemented the following HTTP verbs:
Get
Head
Lock
Options
PropFind
Put
Unlock
Now, when I open a word document, it's first in the read only mode. Getting the lock and into edit mode is successful, but when I want to save the changes in my document I get the following:
Your changes were saved but could not be uploaded because of an error.
The trick is that document is indeed saved correctly to the repository, and the response from our WebDAV server to word is HTTP/200 but the Word complains nonetheless.
I've also tried editing in Word directly from the SharePoint repository, just to confirm that my Office isn't broken somehow - all works.
Here's the response from PUT request when saving the document from Word:
HTTP/1.1 200 OK
Date: Tue, 06 Sep 2011 12:25:47 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 12.0.0.6545
Last-Modified: Tue, 06 Sep 2011 12:25:47 GMT
ETag: "{F4A63494-D302-4C9B-9C57-D0CB0937A2B0},9"
ResourceTag: rt:F4A63494-D302-4C9B-9C57-D0CB0937A2B0#00000000009
X-MSDAVEXTLockTimeout: Second-3600
Lock-Token: opaquelocktoken:{F4A63494-D302-4C9B-9C57-D0CB0937A2B0}20110906T122532Z
Expires: Mon, 22 Aug 2011 12:25:47 GMT
Cache-Control: private,max-age=0
Content-Length: 0
Public-Extension: http://schemas.microsoft.com/repl-2
Set-Cookie: WSS_KeepSessionAuthenticated=40689; path=/
And here's the same response, for the same document, from our WebDAV server:
HTTP/1.1 200 OK
Cache-Control: private,max-age=0
Content-Length: 0
Expires: Wed, 24 Aug 2011 08:03:28 GMT
Last-Modified: Wed, 07 Sep 2011 08:03:28 GMT
ETag: "{4a4331a8-7df6-43e6-bd5f-bb80765e83a2},1"
Server: Microsoft-IIS/7.5
MS-Author-Via: DAV
ResourceTag: rt:4a4331a8-7df6-43e6-bd5f-bb80765e83a2#00000000001
Lock-Token: opaquelocktoken:{4a4331a8-7df6-43e6-bd5f-bb80765e83a2}20110907T080328Z
X-MSDAVEXTLockTimeout: Second-3600
Public-Extension: http://schemas.microsoft.com/repl-2
MicrosoftSharePointTeamServices: 12.0.0.6545
Set-Cookie: WSS_KeepSessionAuthenticated=40689; path=/
X-Powered-By: ASP.NET
Date: Wed, 07 Sep 2011 08:03:27 GMT
So I've tried to mimic some of the headers SharePoint emits, like MicrosoftSharePointTeamServices but to no avail.
By the way, I found the bug in Sphorium webdav that was causing this. The bug was in the method DavLockBase_InternalProcessDavRequest() and the incorrect line of code was:
string[] _lockTokens = this.RequestLock.GetLockTokens();
which should be:
string[] _lockTokens = this.ResponseLock.GetLockTokens();
After that change, saving files in Word 2010 worked fine.
If someone ever runs into this again, here is a fix that was built based on the above answer, and on what I have found from working with word 2010. Basically the fix involves replacing the code for the "DavLockBase_InternalProcessDavRequest" method (I've added some comments for each "correction").
As a note (found some info here): the behavior of the webdav implementation for word 2010 differs on whether there is a patch installed on the client side or not; therefore the 3rd correction may not be needed in all cases!
Hope it helps!
private int DavLockBase_InternalProcessDavRequest(object sender, EventArgs e)
{
int _responseCode = (int)DavLockResponseCode.Ok;
//string[] _lockTokens = this.RequestLock.GetLockTokens();
//#1 the above line is incorrect. replaced with the following:
string[] _lockTokens = this.ResponseLock.GetLockTokens();
//Check to see if a lock refresh was requested
if (base.HttpApplication.Request.Headers["If"] != null)
{
if (_lockTokens.Length == 1)
{
//#2 not sure why this should be done (or not), however I've seen this in other people corrections.
//DavRefreshEventArgs _refreshEventArgs = new DavRefreshEventArgs(_lockTokens[0], this.RequestLock.LockTimeout);
//OnRefreshLockDavRequest(_refreshEventArgs);
}
base.HttpApplication.Response.AppendHeader("Timeout", "Second-" + this.ResponseLock.LockTimeout);
}
else
{
//New lock request
StringBuilder _opaquelockTokens = new StringBuilder();
//#3 finally, added the check below, as most of the times, when using word 2010 there are no lock requests
if (_lockTokens.Length > 0)
{
foreach (string _lockToken in _lockTokens)
_opaquelockTokens.Append("<opaquelocktoken:" + _lockToken + ">");
base.HttpApplication.Response.AppendHeader("Lock-Token", _opaquelockTokens.ToString());
}
}
//Check to see if there were any process errors...
Enum[] _errorResources = this.ProcessErrorResources;
if (_errorResources.Length > 0)
{
//Append a response node
XmlDocument _xmlDocument = new XmlDocument();
XmlNode _responseNode = _xmlDocument.CreateNode(XmlNodeType.Element, _xmlDocument.GetPrefixOfNamespace("DAV:"), "response", "DAV:");
//Add the HREF
XmlElement _requestLockHrefElement = _xmlDocument.CreateElement("href", "DAV:");
_requestLockHrefElement.InnerText = base.RelativeRequestPath;
_responseNode.AppendChild(_requestLockHrefElement);
//Add the propstat
XmlElement _propstatElement = _xmlDocument.CreateElement("propstat", "DAV:");
XmlElement _propElement = _xmlDocument.CreateElement("prop", "DAV:");
XmlElement _lockDiscoveryElement = _xmlDocument.CreateElement("lockdiscovery", "DAV:");
_propElement.AppendChild(_lockDiscoveryElement);
_propstatElement.AppendChild(_propElement);
XmlElement _statusElement = _xmlDocument.CreateElement("status", "DAV:");
_statusElement.InnerText = InternalFunctions.GetEnumHttpResponse(DavLockResponseCode.FailedDependency);
_propstatElement.AppendChild(_statusElement);
_responseNode.AppendChild(_propstatElement);
base.SetResponseXml(InternalFunctions.ProcessErrorRequest(this.ProcessErrors, _responseNode));
_responseCode = (int)ServerResponseCode.MultiStatus;
}
else
{
//No issues
using (Stream _responseStream = new MemoryStream())
{
XmlTextWriter _xmlWriter = new XmlTextWriter(_responseStream, new UTF8Encoding(false));
_xmlWriter.Formatting = Formatting.Indented;
_xmlWriter.IndentChar = '\t';
_xmlWriter.Indentation = 1;
_xmlWriter.WriteStartDocument();
//Open the prop element section
_xmlWriter.WriteStartElement("D", "prop", "DAV:");
_xmlWriter.WriteStartElement("lockdiscovery", "DAV:");
this.ResponseLock.ActiveLock.WriteTo(_xmlWriter);
_xmlWriter.WriteEndElement();
_xmlWriter.WriteEndElement();
_xmlWriter.WriteEndDocument();
_xmlWriter.Flush();
base.SetResponseXml(_responseStream);
_xmlWriter.Close();
}
}
return _responseCode;
}
Observation: the lock token uses an invalid syntax (so does Sharepoints). Also; most of these headers shouldn't be needed (being proprietary) or do not apply to a PUT response (such as Lock-Token).
I would recommend to try publishing to Apache with mod_dav first, and to observe the HTTP exchange.