2017-08-29 136 views
2

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

谢谢。

回答

5

与尝试:

var address = "[email protected]"; 
Device.OpenUri(new Uri($"mailto:{address}")); 

希望这helps.-

+0

Android模拟器说:'不支持的操作 - 该操作目前不支持。' – PaxForce

+2

检查您是否在模拟器中配置了邮件客户端,并尝试使用真实设备。 – apineda

+0

当然可以。感谢名单。 – PaxForce

0

实际上我用一个依存服务,使我有过什么,我可以向邮件客户端更多的控制。

首先我创建了一个接口供被称为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字段的平台可以选择性地出现。

我希望有帮助。

+0

这可能会起作用,但对于我目前的技能水平而言,这太高级了。我决定接受一个更简单的答案。不管怎样,谢谢你。 – PaxForce

相关问题