I have 10's of GBs of emails stored in Microsoft Exchange and copies of them with me as public folders.
When I checked this, most of them don't have email headers, why is it like that ?
Also some of the headers are unable to be parsed (particularly the ones having 'Microsoft Mail Internet Headers Version 2.0' at the beginning). Why?
PT_TRANSPORT_MESSAGE_HEADERS property is only populated for the messages received from the internet. Message sent between two Exchange mailboxes in the same domain do not have that property.
"'Microsoft Mail Internet Headers Version 2.0" line was added by old versions of Outlook (before 2003?). Latest versions of Outlook do not insert that line.
Related
I'm working on an Outlook Add-in, using office.js, where users can send secure emails using backend service.
In compose mode, when the user sends the email, using the add-in of course, the add-in will then move the message to "Sent Items" folder using the Outlook API /message/{id}/move and everything goes OK with the exception that the message in question still being marked as "Draft" by Outlook which is really annoying and does confuse the user who just sent the email by telling him that "this message hasn't been sent"
I searched through the API to see if there is a way to mark an email as "SENT" in order to prevent Outlook from showing this RED hint but with no luck so far!
So, My Question Is: Is there any way to overcome this misleading msg by marking the email as it was sent by Outlook?
Thanks in advance.
Finally, I was able to achieve a perfect solution for this challenge.
Based on:
#BrianClink's comment
This answer (Which uses Graph API but Outlook REST API): Microsoft Graph API mail office 365: Is any option create inbox message NOT as Draft?
The approach/steps I followed to mark a mailItem as "SENT" (and not shown as 'draft') and put it in "SentItems" Folder are as follow:
First, Save the mailItem as "draft" using Office.context.mailbox.item.currentMail.saveAsync then retrieve its ID
Clone this draft mailItem properties eg: 'Sender', 'Subject', 'Body', 'ToRecipients'..etc so you get an exact copy of it.
With the newly cloned mailItem, add '[SingleValueExtendedProperties]' property with this value :
[
{
PropertyId: 'Integer 0x0E07',
Value: '1'
}
];
Serialize the new item as JSON and POST it to "sentitems" folder as follows:
xhr.open('POST', restHost + '/v2.0/me/MailFolders/sentitems/messages/');
xhr.send(clonedEmailJson);
On success, with xhr.status=201 [created], Remove the draft mailitem using a [DELETE] request
And you will end up having a new mail item created in your "sentItems" folder which appears as it was sent by Outlook :)
This was a very helpful solution to me because my users are using my add-in to send secure emails (using 3rd party API) and NOT Outlook, So, I wanted them to have the same UX/feeling as when they use Outlook.
Note:
Although the solution worked for me perfectly, it came with a price!
On slow internet connections or in case emails containing large attachments, the process can be remarkably slow, because the addin will first save the draft to the remote Exchange Server, get its ID, then duplicate it and send it again to the server, then remove the draft-ed one.
I've achieved the "conversation/thread" effect in gmail, using this code
$phpmailer->MessageID = $message_id;
and with this, in gmail all e-mails sent (with the same value in $message_id) are received in the same "conversation/thread", but this dont work in outlook, both windows 10 email app and outlook app for windows 10...
How can i achieve the same result as in gmail in outllook?
Don't re-use the same message ID for multiple messages. There are headers specifically for creating threads, and the definitive explanation for them is here. In short, add the Message-ID of the message you are replying to in a References header, and optionally also into an In-reply-to header. You can create those headers in PHPMailer using addCustomHeader().
Per this announcement - https://gsuiteupdates.googleblog.com/2019/03/threading-changes-in-gmail-conversation-view.html -- an email with the exact same from/to and subject will no longer thread in Gmail if the emails are system generated unless we somehow reference the original message information in the subsequent system generated emails.
Does anyone have ideas for how we would do this in CDO mail using ASP / VBScript? Am guessing we would have to call a Google API to get the message ID after it created the message as well.
Google was not able to provide any help over and above the language used in this blog article which was as below:
Additional details
If you are managing a system that sends email notifications to users
and want your emails to be threaded in Gmail conversation view, then
you have to ensure that your notifications:
1) Have the same subject
2) Have reference headers that reference IDs seen earlier in the
thread, or have references headers that consistently refer to the same
message ID
Ideas are appreciated.
I'm not sure why you're looking for any sort of Google API, this sounds to be the standard "References" and "In-Reply-To" headers that any email reply should have. Refer to section 3.6.4 "Identification Fields" in RFC 5322. To create this you'd need to read the Message-ID header of the email being replied to and use it in the References header.
Just read the Message-ID of the email you're replying to like any other header:
Dim OriginalMessageId as String
OriginalMessageId = originalEmail.Fields.Item("urn:schemas:mailheader:message-id")
And use it to create the References headers in your new email:
replyEmail.Fields.Item("urn:schemas:mailheader:references") = OriginalMessageId
replyEmail.Fields.Item("urn:schemas:mailheader:in-reply-to") = OriginalMessageId
If you need more of a pointer of how this would work, you might need to include more of the code of how you're reading a message and how you're replying to it.
I am developing an email client using EWS. I know there is a XML tag MarkAsJunk to mark an email as Junk. But this tag is only available for Exchange version 2013 or later. What is the way to mark an email as Junk/Spam in Exchange version less than 2013 ??. Does move an email to Junk Email folder will ban future emails coming from that sender ??
we've got a Exchange 2013 postbox with several E-Mail addresses assigned.
For better organization, Exchange should move incoming mail into various folders.
The target-folder depends on the SMTP-Address to which the mail was sent to.
Problem is: Exchange 2013 recognizes only the postbox itself as receipient and does not distinct between the different TO-addresses. How can a serverside-rule be made which respects TO?
Thanks for help!
Moving messages to a folder is a mailbox server side rule. You could log into the mailbox via OWA or Outlook and set up this rule.
Exchange will deliver mail to the recipient, its upto the recipient via rules what they want to do with it from there.