Getting Outlook Emails into Microsoft Planner: Native Options, Power Automate, and Send to Planner

Stressed woman at desk with two computer monitors showing spreadsheets and emails, three coworkers laughing behind her in open office

A common Microsoft 365 workflow starts with a simple question:

How do I get an Outlook email into Microsoft Planner?

There are several possible answers, depending on what “into Planner” means.

You may only need a personal reminder. You may want an automated process that handles every matching email the same way. Or you may need to review each message and decide where the resulting Planner task belongs.

The main options are:

  1. Flag the email.
  2. Manually create a Planner task.
  3. Build a Power Automate flow.
  4. Use an Outlook add-in such as Send to Planner.

Flagging the Outlook Email

The easiest native option is to flag the message in Outlook.

Flagged emails can appear in Microsoft To Do and within the task views available through the newer Microsoft Planner experience. This works well when the goal is simply to remind yourself to return to a message.

However, flagging does not create a normal task in a selected Planner plan.

You cannot use the flag itself to choose:

  • A shared Planner plan
  • A bucket
  • An assignee
  • Start and due dates
  • Selected portions of the email
  • Specific attachments

Flagging is therefore best suited to personal follow-up rather than team task management.

Manually Creating the Planner Task

The next option is to open Planner and create the task manually.

This gives you full control, but it also means moving between Outlook and Planner and copying the relevant information yourself.

Depending on the email, that may include:

  • Rewriting the subject as a task title
  • Copying part of the message body
  • Saving and uploading attachments
  • Assigning the task
  • Selecting a bucket
  • Adding dates
  • Preserving a reference to the original email

Manual entry is reasonable when this only happens occasionally. It becomes repetitive when email is a regular source of work.

Using Power Automate

Power Automate is often the first recommendation for connecting Outlook and Planner.

A flow can create a Planner task when an email:

  • Arrives from a particular sender
  • Contains certain text
  • Is moved into a folder
  • Is assigned a category
  • Meets other predefined conditions

This is a good solution when the workflow is consistent.

For example, if every message sent to a particular mailbox should create a task in the same plan and bucket, Power Automate may be the correct tool.

The challenge is that many email-to-task decisions are not consistent.

One email may need to go to an operations plan. The next may belong to a customer project. Another may only require one paragraph from a long thread. Some attachments may be useful while others are signatures, logos, or unrelated files.

The user may need to decide, for each message:

  • Which plan to use
  • Which bucket to use
  • Who should be assigned
  • What the task title should be
  • Which part of the message to include
  • Which attachments to include
  • Whether a start or due date is needed
  • Whether the message came from a personal or shared mailbox

Power Automate can support sophisticated workflows, but an interactive process with many optional decisions can require a substantial amount of configuration.

At that point, the flow is no longer simply “when an email arrives, create a task.”

It becomes a small application.

Why I Built Send to Planner

I originally built Send to Planner because I regularly encountered emails that needed to become Planner tasks, but they did not all follow the same rule.

The problem was not merely creating the task. The problem was deciding what the task should contain and where it should go.

Send to Planner is an Outlook add-in that lets the user make those decisions while viewing the email.

The user can select options such as:

  • Planner plan
  • Bucket
  • Task title
  • Assignee
  • Start date
  • Due date
  • Email body content
  • Attachments
  • A reference to the original message

This makes it possible to create a complete Planner task without moving back and forth between Outlook and Planner.

The sent email inside Microsoft Planner
Email message fidelityAll attachments and email as PDF

It also avoids forcing every email through the same predefined automation.

Choosing the Right Approach

Each method has a valid use case.

MethodBest suited for
FlaggingPersonal reminders and follow-up
Manual entryOccasional task creation
Power AutomateRepetitive workflows with consistent rules
Send to PlannerInteractive task creation where each email may be different

The question is not whether Power Automate or an Outlook add-in is universally better.

The better question is:

Does the same rule apply to every email?

When the answer is yes, Power Automate is often a strong solution.

When the answer is no, an interactive Outlook add-in may be more practical.

Security and Microsoft 365 Administration

Third-party Outlook add-ins may require approval from a Microsoft 365 administrator, especially in managed organizational environments.

That is a reasonable concern.

The Send to Planner product page includes information covering:

  • Requested Microsoft permissions
  • Data access
  • Data flow
  • Privacy
  • Security
  • Administrative deployment

Send to Planner is also going through the Microsoft 365 App Certification process.

Certification is not a substitute for an organization’s own security review, but it provides an additional level of independent validation. I am also willing to work directly with Microsoft 365 administrators or security teams that need more information before approving the add-in.

Learn More

For a detailed comparison of the available methods, including flagged email, manual task creation, Power Automate, and Send to Planner, see:

How to Get an Outlook Email into Microsoft Planner

For product details, features, security information, and installation options, see:

Send to Planner for Microsoft Outlook

The complete user guide is also available here:

Send to Planner User Guide

Send to Planner v1.04 is Released

I have been absent from my blog for a while as I have been busy working on Kryl Solutions add-ins and Power-Ups. It has been an enjoyable experience to really delve into the world of JavaScript (ES6) and get creative building things.

One of my favorite projects has been Send to Planner. I just released version 1.04 and after 6 months of being in the marketplace, the reception and stats for this add-in are amazing. It has quickly become my fastest growing integration.

With v1.04, I have added checklists. Now, you can do nearly everything with task from Send to Planner: create new tasks in any plan and bucket, add to existing tasks as comments, add start and due dates, update priority, update selected categories, update the task progress, add/remove user assignments, and now, add, remove or update checklist items.

If you use Microsoft Planner for managing your projects, and you deal a lot with incoming email driving or updating your task workflow, you really should check Send to Planner out and let me know what you think.

Adding an Attachment to a Planner Task

I have recently started working on a new add-in in Office and had reason to create an newly uploaded attachment to a Planner Task item.

OMG!

I pulled out all my hair on this one as I was unable to figure out from the documentation how to do this. Hack, hack, hack — 3days later… well, I hope to save the world this frustration.

Here are the steps:

  1. First, get the file from an upload. Determine the type and convert all the binary in the file to a BASE64 string.
  2. Next, you need to GET the planners GROUP by the planner ID: https://graph.microsoft.com/v1.0/planner/plans/${plannerId}
  3. Then you create the item in the group drive container, where name is the name of the file via a POST (with the based 64 in the body, content-type: text/plain): https://graph.microsoft.com/v1.0/groups/${plan.container.containerId}/drive/items/root:/${name}:/content
  4. This returns a driveItem object and from this you need the driveItem.webUrl, but this is the part that killed me. The documentation tells you to use an encoded URL. WRONG. This fails every single time. After a lot of looking over the documentation and seeing what they were submitting, you actually only replace the “.” and the “:” and white space / /. Here is a function I created in JS:
/**
* Encodes the URL ins the special planner format that is for oif but not quite
* following the encodeURIComponent() specification…
* @param {String} url
* @returns {String}
*/
#encodePlannerExternalReferenceUrl = (url) => {
// Encode specific characters: : . _
const encodedUrl = url.replace(/:/g, "%3A").replace(/\./g, "%2E").replace(/ /g, "%20");
return encodedUrl;
};
  1. Next, GET the task item by ID: https://graph.microsoft.com/v1.0/planner/tasks/${id}
  2. Then GET the task items details by ID: https://graph.microsoft.com/v1.0/planner/tasks/${id}/details
  3. For this next part, you use the “@odata.etag” prop the details and you will create a new entry with a PATCH: https://graph.microsoft.com/v1.0/planner/tasks/${taskId}/details.
  4. For this part you need to create a fetch body like this: { references: ${ref} }, where the ref is defined as:
const ref = {
/** @type {PlannerReference} */
[this.#encodePlannerExternalReferenceUrl(driveItem.webUrl)]: {
"@odata.type": "#microsoft.graph.plannerExternalReference",
alias: name,
type: "Other",
},
};
view raw ref.js hosted with ❤ by GitHub
  1. To make the above call you have to supply the @odata.etag. And this is the NEXT part that messed with my noodle. You do NOT use the whole value returned AND you have to place it in double quotes. Ugh! So here is more code I wrote to help with that:
const updatedTag = eTag.replace('W/"', '"').replace('\\"', "");
view raw etag.js hosted with ❤ by GitHub
  1. Then when you make the call you place the tag in the headers: If-Match. And do not forget to add the Content-type, and to see the returned result the Prefer as well:

The final submission looks like this:

And let me stress this. You must PATCH this, not “patch.” Another thing I found is that GET/get, PUT/put, DELETE/delete, and POST/post all work interchangeably. But if you “patch” you will get some bazaar error about CORS and that path is not supported. And if you hit the service with OPTIONS you will see all the supported methods are returned in CAPS. Oddly, all work with lowercase or upper case, except for PATCH.

So, there you have it. 3 days of my life.