microsoft / WindowsAppSDK

The Windows App SDK empowers all Windows desktop apps with modern Windows UI, APIs, and platform features, including back-compat support, shipped via NuGet.
https://docs.microsoft.com/windows/apps/windows-app-sdk/
MIT License
3.84k stars 320 forks source link

`EmailManager` is not supported, throws exception #3433

Open jfversluis opened 2 years ago

jfversluis commented 2 years ago

Describe the bug

Depending on how you look at it I guess this might also be a feature request. In .NET MAUI we have functionality that allows users to compose an email. For UWP we could use the code underneath to compose an email programmatically and present the user with a screen in their favorite email client to send the email.

using Windows.ApplicationModel.Email;
EmailMessage message = new();
// Add to, cc, attachments, body, etc.

await EmailManager.ShowComposeNewEmailAsync(message);

When calling this from WinUI, we are presented with an exception "The request is not supported. (0x80070032)"

I've tried exploring alternatives like using mailto: or resorting to MAPI. The latter might be what this functionality is based on, but that would mean we have to add a lot of code that might already live with you.

Steps to reproduce the bug

  1. Implement code that tries to call EmailManager, see above
  2. Run the code
  3. Observe the exception being thrown

image

Expected behavior

The functionality works as it did when running it through UWP which is: present the user with a compose email screen.

Screenshots

No response

NuGet package version

WinUI 3 - Windows App SDK 1.1.1

Windows app type

Device form factor

Desktop

Windows version

Windows 11 (22H2): Build 22621

Additional context

No response

nomadedge commented 2 years ago

Hi, any news on that one since MAUI is now released? Need email functionality in my application and encountered this bug

nomadedge commented 2 years ago

https://docs.microsoft.com/en-us/windows/uwp/launch-resume/how-to-create-and-consume-an-app-service Tried this approach to run EmailManager under UWP, didn't help. Though text of exception is something different a bit: "The request is not supported. (Exception from HRESULT: 0x80070032)"

castorix commented 2 years ago

For UWP we could use the code underneath to compose an email programmatically and present the user with a screen in their favorite email client to send the email.

MAPISendMail does that

mattleibow commented 2 years ago

This is our PR to replace the UWP/WinUI APIs with MAPISendMail: https://github.com/dotnet/maui/pull/10063

mattleibow commented 2 years ago

@evelynwu-msft this is part of the maui bug list :)

jeanplevesque commented 1 year ago

I know that it's currently not working, but would EmailManager be the correct API choice to send emails from a WinUI 3 app? (Underlying SO question)

castorix commented 1 year ago

I know that it's currently not working, but would EmailManager be the correct API choice to send emails from a WinUI 3 app? (Underlying SO question)

MAPI works with WinUI 3 (at least on my OS, Windows 10 22H2)

Soap-141 commented 1 year ago

@castorix Tried it on my side with MAUI Essentials and doesn't work. See this for more details.

castorix commented 1 year ago

@castorix Tried it on my side with MAUI Essentials and doesn't work. See this for more details.

I tested 2 methods, with IDataObject and IDropTarget with Guid "9E56BE60-C50F-11CF-9A2C-00A0C90A90CE" which simulates Explorer Right-Click on a File + [Sent to] [Mail recipient] and by loading dynamically MAPISendMail from the right MAPI32.DLL with similar code as SDK function LoadDefaultMailProvider from "MapiUnicodeHelp.h" (Windows App SDK 1.1.0, Windows 10 22H2)

castorix commented 1 year ago

I just uploaded a test sample using MAPI + other usual methods to send mails : WinUI3_SendMail

Soap-141 commented 1 year ago

Thanks @castorix I'll take a look at it.

Muzzammils commented 1 year ago

@jfversluis As a last resort for the time being, this works in a WinUI3 app, await Windows.System.Launcher.LaunchUriAsync(new Uri("mailto:emailId@domain.com?subject=subject"))