Change email address in replyto or replyall - microsoft-graph-api

We are using Microsoft Graph API to send and receive emails. Just like outlook, during a reply is composed, we want to change, remove or add new recipients. However, MS graph api of replyall or reply does not allow changing any email address.
How can we achieve this functionality using MS Graph API ?

You should use create-reply endpoint https://learn.microsoft.com/en-us/graph/api/message-createreply?view=graph-rest-1.0&tabs=http
That will create a draft reply message (and return the Id for that) that you can then patch any way you want including updating the recipient addresses and replyto then you send that draft message.

Related

MSGraph - Getting external email conversation from reply

My team is building a ticketing system. The goal is when we receive a new email we create a new ticket. All responses to that email are saved on the same ticket.
We have these basic goals working in simple cases, however, there is one case that we are struggling to find a good solution for. A client will email us, which creates a ticket, and we reply back requiring information. The client will send our reply to someone internal to their company. Then they will send the response back to us by replying with "see below". This response will have the conversation between them and their co-worker in the comment section of the email. The comment section will also contain our entire email chain which we don't want to duplicate.
The issue we are having is grabbing the conversation they had from the comment section to include with their response of "see below" and add them to the ticket. The only method we have come up with to solve this is manually parsing the comment section of the email, however, this is error-prone.
Does anyone know of a better way of tracking conversations they send you through the email?
We are using msgraph internally to send and receive emails and using their apis they have uniqueBody and body, but they don't seem to have a way to break the body up into its different parts.
What I need any of these options
1- get list of unique bodies from the email chain without using conversation Id as it will not be sufficient in some cases.
2- get the previous conversation Id of the incoming email. I mean if that email is a list of emails and it forwards to me.
UUID uuid = UUID.randomUUID();
message.addProperty("InternetMessageId", String.format("%s",uuid.toString()));
send InternetMessageId with a unique identifier to grab conversation id
change order only

How to trace back bounced messages

I have a web services which allows me to send messages via office 365 hosted service. So far all works fine. But there is cases when an email bounces and I would like to mark that email bounced / undelivered in my CRM. In some cases the remote host returns undelivered: and the original subject as well as the email address it was send to. In case of google addresses this is not the case. So I can’t parse the subject to get the original message. Is there anywhere in the body or header any info which I could use to find the originating message that was not delivered ?
The In-reply-to header of the bounce message should contain the original InternetMessageId of the Message you Sent message. You can either use the InternetMessageHeaders or get the SingleValueExtendedProperties property for that header eg
https://graph.microsoft.com/v1.0/me/MailFolders('Inbox')/messages/?$select=ReceivedDateTime,Sender,Subject,IsRead,inferenceClassification,InternetMessageId,parentFolderId,hasAttachments,webLink&$Top=10&$expand=SingleValueExtendedProperties($filter=Id eq 'String 0x1042')
Encoded version for the Graph Explorer preview
https://graph.microsoft.com/v1.0/me/MailFolders('Inbox')/messages/?$select=ReceivedDateTime%2cSender%2cSubject%2cIsRead%2cinferenceClassification%2cInternetMessageId%2cparentFolderId%2chasAttachments%2cwebLink&$Top=10&$expand=SingleValueExtendedProperties(%24filter%3dId+eq+%27String+0x1042%27)

Programmatically get reply / forward state via office-js?

I have an Outlook Office-JS addin that adds what is basically a third-party send via an addin command button. In the background, this does some processing on the draft message then sends it via the Office365 / Graph send API: https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/message_send
I've verified when I do send the message from the backend component of my app, I do see that the e.g. reply headers are set correctly, but apparently this isn't enough to set the parent message as replied / forwarded in Outlook.
Given that, I'd like to manually set the parent message as replied to / forwarded when sending. From reading other posts it looks like the following attributes https://learn.microsoft.com/en-us/office/client-developer/outlook/mapi/pidtaglastverbexecuted-canonical-property could help me do that.
However, I'm not sure how to identity a draft message on either the Office-JS side or via the Graph API as a reply / forwarded email, nor do I know how to get the parent message (original email replied to / forwarded) handle or ID.
Currently you cannot get the state of a draft or the parent ID with Office JS. What is your scenario for saving a message as a draft and then sending with Graph? We track Outlook add-in feature requests on our user-voice page. Please add your request there. Feature requests on user-voice are considered when we go through our planning process.

Microsoft Graph API SDK .NET Issues getting other users emails

I am using the Microsoft Graph SDK as downloaded from NuGet (1.2). I authenticate to Azure AD (using ADAL).
I am using Client Credentials flow (not authenticated as any particular user) and am using Application Permission roles to access resources.
We are going to set up one service mailbox with a bunch of aliases. The aliases are given to the clients. This is so they are emailing an address that has a meaningful name to them.
My app will run as a service, and routinely scan new emails in this inbox. It should find the To address, and depending on what alias was used, file the email in a location relevant to that client.
The resource I want is: GET /users/<id | userPrincipalName>/messages
However, there doesn't appear to be a method in the SDK for it.
I can get users with this:
IGraphServiceUsersCollectionPage filteredUsers =
graphApi.Users.Request()
.Filter("userPrincipalName eq 'user#domain.com'")
.GetAsync().Result;
When I loop through the collection, I can see that the User has a 'Messages' property, but it is always null.
If I manually build a request message with HttpClient I can get the messages.
The second problem is that the Recipient property is always the userPrincipalName of the mailbox. How can I get the alias that was used by the sender?
While you are able to get your collection of users successfully, you have to make another request to receive the messages. This would look something like:
IUserMessagesCollectionPage userMessages =
graphApi.Users["user_id"].Messages.Request()
.GetAsync().Result;
To answer your second question, at this time you cannot access the original recipient through the Graph API, but you can do this through EWS. This is due to the fact that you can only retrieve the SMTP message headers through EWS. You can read more about how to do this here.
If this is something you believe is valuable to you in the Graph, I would encourage you to post it in our UserVoice.
If you want to get the email as a file, you can simply get the body as bytes through the SDK:
byte[] asBytes = Encoding.Unicode.GetBytes(message.Body.ToString());

Send and receive email by Rails App

We have build custom crm app(rails 4.0). One of the features that we have build is that we send emails to our customers based on booking status or we send a custom email by our travel agents.
The next thing we want is that customers can replt on this email. So we can recognize the email thats replyed and related to the initial email is send, so we have a nice email dialog (send/receive) in the crm.
Someone ideas how we can "recognize" the replyed email so we can related it to the right email?
Thanks..remco
In your email client open a reply from someone and show full headers or raw source (how to get it depends on the client but you will find it!)
When you look at the email headers you will find References field
References: <CAAC3oDjZSFywS5mpAANO+svm-3xXwLciUhw_QEkBkNqT9A#mail.com>
<06AFEF94-53D2-4469-59B0A494830C#mail.de>
<E67E3945-D61E-8E45-63C52D111698#mail.net>
And more importantly
In-Reply-To: <6397034C-90CA-41B4-F47AE3F39E76#mail.de>
While every outgoing email has a Message-ID field
Message-ID: <569F22.8060202#mail.de>
To get an if of you outgoing message
result = SomeMailer.message(params).deliver
result.header['Message-ID'].value

Resources