以xamarin表格发送电子邮件

时间:2017-04-29 11:16:35

标签: c# xamarin

我试图在我的xamarin表单项目中发送电子邮件,我已经在iPhone模拟器和iPhone设备上试过了。当我按下iPhone上的发送电子邮件按钮时,没有任何反应,甚至没有调试错误。我还确保我使用设备上的电子邮件登录。

我使用了serviceDependency并按照此链接进行了设置: https://developer.xamarin.com/recipes/ios/shared_resources/email/send_an_email/

我的界面:

public interface InterfaceEmail
{
    void sendEmail();
}

iOS实施:

[assembly: Xamarin.Forms.Dependency(typeof(SendEmail))]
namespace myProject.iOS
{
    public partial class SendEmail : InterfaceEmail
    {
        MFMailComposeViewController mailController;

        public SendEmail() {}
        public void sendEmail()
        {
            if (MFMailComposeViewController.CanSendMail)
            {

                mailController = new MFMailComposeViewController();

                mailController.SetToRecipients (new string[] {"my@email.com"});
                mailController.SetSubject ("test mail");
                mailController.SetMessageBody ("This is a test", false);

                mailController.Finished += (object sender, MFComposeResultEventArgs e) =>
                {
                    Console.WriteLine(e.Result.ToString());
                    e.Controller.DismissViewController(true, null);
                };



                UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(mailController, true, null);
    }}}}

在我的共享代码中实现:

async void Handle_ToolbarButton(object sender, System.EventArgs e)
{
    var action = await DisplayActionSheet("What do you want to do?", "Abort", null, "Send email");
    if(action == "Send email")
    {
        DependencyService.Get<InterfaceEmail>().sendEmail();
    }
}

有没有人知道这里可能出现什么问题?

3 个答案:

答案 0 :(得分:5)

为了更好地发送电子邮件而不编写特定于平台的代码,请将此nuget安装到您的解决方案中  xam.plugin.Messaging(https://www.nuget.org/packages/Xam.Plugins.Messaging/

然后在PCL中编写以下代码

var email = new EmailMessageBuilder()
  .To("to.plugins@xamarin.com")
  .Subject("Xamarin Messaging Plugin")
  .Body("Well hello there from Xam.Messaging.Plugin")
  .Build();

您还可以添加附件。有关详情,请浏览https://github.com/cjlotz/Xamarin.Plugins/blob/master/Messaging/Details.md

答案 1 :(得分:1)

iPhone模拟器将始终返回false CanSendMail,因为它无法发送邮件。在物理设备上,您至少需要配置电子邮件帐户。

此外:

错字:

[assembly: Xamarin.Forms.Dependency(typeof(sendEmail))]

应该是:

[assembly: Xamarin.Forms.Dependency(typeof(SendEmail))]

错字:

mailController.Finnished += ~~~~~

应该是:

mailController.Finished += ~~~~~

答案 2 :(得分:1)

可能与此错误有关: https://bugzilla.xamarin.com/show_bug.cgi?id=58933

只需删除DisplayActionSheet即可。

或者如果你想使用它,那么在这个Xamarin论坛topic中有一个临时解决方案 添加

await Task.Delay(100);
在DisplayActionSheet之后