Xamarin.Forms 如何在设备上打开默认电子邮件客户端?



在 Xamarin.Forms 中,如果要通过点击带有链接的标签来打开设备的默认浏览器,则很简单:

private void WebUrl_TapGestureRecognizer_Tapped(object sender, EventArgs e)
{
var label = sender as Label;
string url = "http://" + label.Text;
Device.OpenUri(new Uri(url));
}

有没有一种类似的简单方法可以使用带有电子邮件地址的打开NewMessage来打开设备的默认电子邮件客户端?

private void EmailClient_TapGestureRecognizer_Tapped(object sender, EventArgs e)
{
var label = sender as Label;
// what goes here?
}

谢谢。

尝试:

var address = "your.address@gmail.com";
Device.OpenUri(new Uri($"mailto:{address}"));

希望这有帮助.-

我实际上使用依赖服务,以便我可以更好地控制可以发送到邮件客户端的内容。

首先,我创建了一个供名为 IEmailService 的依赖服务使用的接口。

public interface IEmailService
{
void CreateEmail(List<string> emailAddresses, List<string> ccs, string subject, string body, string htmlBody);
}

我的 Android 依赖服务如下所示:

[assembly: Xamarin.Forms.Dependency(typeof(EmailService))]
namespace Droid.Services
{
public class EmailService : IEmailService
{
public void CreateEmail(List<string> emailAddresses, List<string> ccs, string subject, string body, string htmlBody)
{
var email = new Intent(Android.Content.Intent.ActionSend);
if (emailAddresses?.Count > 0)
{
email.PutExtra(Android.Content.Intent.ExtraEmail, emailAddresses.ToArray());
}
if (ccs?.Count > 0)
{
email.PutExtra(Android.Content.Intent.ExtraCc, ccs.ToArray());
}
email.PutExtra (Android.Content.Intent.ExtraSubject, subject);
email.PutExtra (Android.Content.Intent.ExtraText, body);
email.PutExtra (Android.Content.Intent.ExtraHtmlText, htmlBody);

email.SetType ("message/rfc822");
MainActivity.SharedInstance.StartActivity(email);
}
}
}

对于 iOS:

[assembly: Xamarin.Forms.Dependency(typeof(EmailService))]
namespace iOS.Services
{
public class EmailService : NSObject, IEmailService, IMFMailComposeViewControllerDelegate
{

public void CreateEmail(List<string> emailAddresses, List<string> ccs, string subject, string body, string htmlBody)
{
var vc = new MFMailComposeViewController();
vc.MailComposeDelegate = this;
if(emailAddresses?.Count > 0)
{
vc.SetToRecipients(emailAddresses.ToArray());
}
if(ccs?.Count > 0)
{
vc.SetCcRecipients(ccs.ToArray());
}
vc.SetSubject(subject);
vc.SetMessageBody(htmlBody, true);
vc.Finished += (sender, e) =>
{
vc.DismissModalViewController(true);
};

UIApplication.SharedApplication.Windows[0].
RootViewController.PresentViewController(vc, true, null);
}

}
}

然后我可以在我的代码中调用它:

DependencyService.Get<IEmailService>().CreateEmail(recipients, ccs, subject, body, bodyHtml);

这将在每个平台上打开邮件客户端,并选择性地填充收件人、主题和正文字段。

我希望这有所帮助。

您可以使用Xamarin.Essentials中存在的Launcher.OpenAsync(uri)。OpenUri 自version 4.3.0.uri = $"mailto:{address}?subject={emailSubject}&body={body content}";起已经过时

Device.Uri 现已贬值 - 请改用它。

await Launcher.OpenAsync(new Uri($"mailto:{supportEmailSetting.Value}"));

适用于 IOS 和安卓

相关内容

最新更新