尝试通过 Xamarin 应用发送电子邮件...适用于 UWP,但使用 Andoid 失败 - 不支持指定的方法。附代码

Attempt to send email through Xamarin App...Works ok with UWP but fails with Andoid - Specified method is not supported. Code attached

提问人:Shades49 提问时间:11/10/2023 更新时间:11/10/2023 访问量:34

问:

该代码在 UWP 中工作正常,但在 Android 中失败。在我的尝试中收到错误“不支持指定的方法”。抓住。根据 @JamesMontemagno,这段代码应该可以工作。有关应用程序的更多细节,请参阅 https://www.youtube.com/watch?v=YZ-Yw9CRxAY。代码如下所示:

    <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="SendEmail.MainPage">

    <StackLayout>
        <Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0">
            <Label Text="Email Sample" HorizontalTextAlignment="Center" TextColor="White" FontSize="36"/>
        </Frame>
        <Button x:Name="SendEmail" Text="Send" Clicked="SendEmail_Clicked"></Button>
    </StackLayout>

</ContentPage>

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Essentials;
using Xamarin.Forms;

namespace SendEmail
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private async void SendEmail_Clicked(object sender, EventArgs e)
        {
            string body = "Test bowling message";
            string[] to = { "[email protected]"};
            //EmailAttachment attachment = new EmailAttachment(attach); 
            
            var message = new EmailMessage("Bowlers Scheduled for Week", body, to);
            //message.Attachments.Add(attachment);
            try
            {
                await Email.ComposeAsync(message);
            }
            catch (Exception ex)
            {
                //bool result = await DisplayAlert(ex.ToString(), "Send Email", "Yes", "No");
                string msg = ex.Message;
            }
        }
    }
}
C# Android Xamarin

评论

0赞 Jason 11/10/2023
堆栈跟踪显示什么?
0赞 Shades49 11/10/2023
在 D:\a_work\1\s\Xamarin.Essentials\Email\Email.shared.cs:19 中的 Xamarin.Essentials.Email.ComposeAsync (Xamarin.Essentials.EmailMessage message) [0x00007] 在 D:\Projects\Temp\SendEmail\SendEmail\SendEmail\MainPage.xaml:29 中的 SendEmail.MainPage.SendEmail_Clicked (System.Object 发送器,System.EventArgs e) [0x00053] .cs:29

答:

1赞 Guangyu Bai - MSFT 11/10/2023 #1

我测试了代码,它在我这边运行良好。以下是您可能遇到的问题。

首先,如果项目的“目标 Android 版本”设置为“Android 11 (R API 30)”,则必须使用与新包可见性要求一起使用的查询更新 Android 清单。

请在清单节点内添加以下内容:

<queries>
  <intent>
    <action android:name="android.intent.action.SENDTO" />
    <data android:scheme="mailto" />
  </intent>
</queries>

其次,如果设备上没有可用于发送电子邮件的电子邮件客户端应用,Email.ComposeAsync 将返回。您可以在手机上安装Gmail应用程序,当您单击该按钮时,它将打开Gmail并发送电子邮件。FeatureNotSupportedException: 'Specified method is not supported.'

评论

0赞 Shades49 11/10/2023
Bingo,您的清单查询代码有效。我非常感激。谢谢。