首页 文章

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

提问于
浏览
3

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

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?
}

谢谢 .

2 回答

  • 0

    试试:

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

    希望这可以帮助 . -

  • 9

    我实际上使用了依赖服务,这样我就可以更好地控制我可以发送给邮件客户端的内容 .

    首先,我创建了一个名为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);
    

    这将打开每个平台上的邮件客户端,其中可选择包含to,subject和body字段 .

    我希望有所帮助 .

相关问题