How to get mails from microsoft outlook graph API - microsoft-graph-api

I have a requirement where I have to connect with Microsoft Outlook and get all emails for all user in that tenant (domain).
I am able to get data for one user using
/v1.0/me/mailfolders/inbox/messages but I want retrieve mails for all users.
We have around 1000 users but I want to get mails from one call. I don't want to make user specific calls 1000 times.
I have gone through docs but didn't found anything.

It isn't possible, nor would it be practical, to "get mails from one call". You need to retrieve messages by mailbox using the user name:
GET /v1.0/users/{user-id}/messages

Related

Is there any way to get user id/conversation reference to proactively message user on teams if installation event wasnt captured

Looking for the best course of action that would have the least impact on users to be able proactively message users with teams app (bot) installed but where they have not messaged the bot and the conversation reference was not captured at time of install.
The scenario is that have an enterprise bot that has been operational for over 3 years servicing 10s of thousands of employees. The bot is auto installed for all users in the tenant, but conversation references were only being stored in the last 2/3's of the applications life, and the install event was not being captured until recently. This was not an issue in past as all proactive functionality was predicated on some interaction with the bot.
I now have a need to be able proactively messages all users within tenant regardless of if they have messaged the bot or not, or if they last messaged the bot before conversation references were being stored. There are only a small subset of users the fall into this category.
Hoping some way to generate a conversation update, be it through graph or other means. The installationUpdate event through app update seemed promising as can update the application but seems only triggered if bot is added or removed
Review the information provided here: https://learn.microsoft.com/en-us/microsoftteams/platform/graph-api/proactive-bots-and-messages/graph-proactive-bots-and-messages?tabs=dotnet
Here is what we do
If we have the conversation ID in our cache/persistent store, we use
it to send the message
If we dont have, we use GET
https://graph.microsoft.com/v1.0/users/{user-id}/teamwork/installedApps/{teamsAppInstallationId}/chat
to get the chatid (the app id here is not the bot application ID, but the ID generated when the app is installed in the org app store and is available from the Teams Admin interface)
If the user does not have our app installed, we
install the app using the teamsAppInstallationId ID. This automatically generates a event without user intervention that
is sent to the bot which you can then use to capture the conversation ID.
POST /users/{user-id | user-principal-name}/teamwork/installedApps
This approach does require an Application Permission: TeamsAppInstallation.ReadWriteSelfForUser.All
You might look into using the List Teams functionality in the Graph API. You can use Graph to get teams and list their members, assuming you can grant your bot the necessary permissions. There are many features in the Graph API which might help you accomplish this.
To send a proactive message to user the bot requires the conversation reference. The conversation can be only retrieved when bot installed.
Without conversation reference you cannot send a proactive message using bot.
You can use Send message in a chat API to send message to chat with delegated permissions.
Could you please raise a uservoice for your case

How to continuously get mails using Microsoft Graph API?

I am currently working on Microsoft Graph API and would like to get mails for multiple users in the tenant. I am currently able to use filter to get mails from certain period of time programatically and it works fine !
However, I'd like to know if there is any way that we can setup a constant polling mechanism in Graph API which scales out dynamically according to the users.
For Example :- Let us assume that there are 5 users in a tenant and a new user is added, then I'd like the code/poller to scale out dynamically and get all mails for the users in all their corresponding folders without getting redundant mails or previously received mails.

Send Message in Teams Chat/Channel as a User

Trying to send out chat message from Bot with sender as a current logged in user. I am able to implement this with graph api using On Behalf of flow. However the API is still in Beta and don't think we can use it in production setting.
https://learn.microsoft.com/en-us/graph/api/chat-post-message?view=graph-rest-beta&tabs=http
Is there a different way? Can we use ConnectorClient? Tried this, but the chat message is sent by the bot instead of the current logged in user. I am not able to create user token with botframework.com. It is always bot or the registered app.
Do anyone know if there is a way to accomplish this avoiding the graph beta api?

Microsoft Graph - Send message on MS teams on behalf of a user

Is there a way to send a message on behalf of a user either in private chat or channel. In my case, the admin gives both application and delegated permission for the app. When the admin is part of the chat/channel, the messages are delivered correctly using MS Graph API but when the chat happens between 2 other signed-in users where the admin is not involved, I am not able to send the message as any of the user. I get UnknownError/Unauthorized since the token which is generated is related to admin user.
If we cannot send a message on behalf of a user using MS Graph is there any other way to achieve this. Can MS Bot take care of this scenario? Will each user have to install the bot so that it can send the message even if the Bot is not part of the conversation?
If we cannot send a message on behalf of a user using MS Graph is
there any other way to achieve this.
You can send chat message using Graph APIs. To send message on behalf of a user, your app must get consent from each individual users. Application permission is currently not supported.
Will each user have to install the bot so that it can send the message
even if the Bot is not part of the conversation?
It's a good idea to build Bot and send notifications instead of sending it from one of the user's account. You can use Proactive message to send message. In order to send message, your Bot needs to be installed for each user.
Could you please elaborate more on scenario? Are you looking for something similar to Company Communicator?

Find all the contacts I sent an email to via Outlook Rest API

I'm trying to get all the contacts I sent a email (or responded to) via Outlook Contacts Rest API.
The default Outlook contact API only gives me contacts that I created in my contact manager. But I found "Is there a way to get the Suggested Contacts through Outlook API?" and sure enough, it gives me all "suggested" contacts (i.e. any contact I ever received an email from or sent an email to).
is this really the way to do it? No way in the "classic" API?
any way to find all the contacts I talked to (i.e. I wrote an email to?). That's the way Google handles "suggested contact" through their API, and not every contact I ever received an email from, spam included.
The closest thing to what you're looking for is the People API. As that page says:
The People API returns relevent person entities with each request. A person aggregates information from across mail, contacts and social networks. The results are ordered by their relevance, which is determined by the criteria specified in the request and ranked based on multiple communication, collaboration and business relationships.
The change in behavior in the beta version of the Contacts API is due to a change in how the API processes a request to the /me/contacts endpoint, and is under review. Keep in mind this is a beta so this may not be how the API ends up acting in stable versions.

Resources