Xamarin.Essentials:电子邮件

Email 类使应用程序能够打开包含主题、正文和收件人(TO、CC、BCC)等指定信息的默认电子邮件应用程序。

若要访问电子邮件功能,需要以下特定于平台的设置。

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

打开 Properties 文件夹下的 AndroidManifest.xml 文件,并在“manifest”节点内添加以下代码 :

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

入门

若要开始使用此 API,请阅读 Xamarin.Essentials 的入门指南,确保在项目中正确安装和设置库。

提示

若要在 iOS 上使用电子邮件 API,必须在物理设备上运行它,否则将引发异常。

使用 Email

在类中添加对 Xamarin.Essentials 的引用:

using Xamarin.Essentials;

通过调用 ComposeAsync 方法和包含有关电子邮件信息的 EmailMessage 来使用 Email 功能:

public class EmailTest
{
    public async Task SendEmail(string subject, string body, List<string> recipients)
    {
        try
        {
            var message = new EmailMessage
            {
                Subject = subject,
                Body = body,
                To = recipients,
                //Cc = ccRecipients,
                //Bcc = bccRecipients
            };
            await Email.ComposeAsync(message);
        }
        catch (FeatureNotSupportedException fbsEx)
        {
            // Email is not supported on this device
        }
        catch (Exception ex)
        {
            // Some other exception occurred
        }
    }
}

文件附件

借助此功能,应用可以在设备上的电子邮件客户端中通过电子邮件发送文件。 Xamarin.Essentials 将自动检测文件类型 (MIME) 并请求以附件形式添加文件。 每个电子邮件客户端都不同,可能只支持特定文件扩展名,也可能不支持任何文件扩展名。

以下是将文本写入磁盘并将其作为电子邮件附件添加的示例:

var message = new EmailMessage
{
    Subject = "Hello",
    Body = "World",
};

var fn = "Attachment.txt";
var file = Path.Combine(FileSystem.CacheDirectory, fn);
File.WriteAllText(file, "Hello World");

message.Attachments.Add(new EmailAttachment(file));

await Email.ComposeAsync(message);

平台差异

并非所有适用于 Android 的电子邮件客户端都支持 Html,因为无法检测此差异,因此我们建议使用 PlainText 发送电子邮件。

API

第 9 频道YouTube 上查找更多 Xamarin 视频。