【问题标题】:Xamarin ios app sent email is never received从未收到 Xamarin ios 应用程序发送的电子邮件
【发布时间】:2019-05-23 19:58:37
【问题描述】:

我创建了一个简单的 Xamarin 应用程序并想发送一封电子邮件。

我的设置

  • iPad
  • 默认电子邮件帐户“Gmail”
  • Ipad 连接到 Mac
  • Visual Studio 2017 Xamarin ios 单视图应用
  • Visual Studio 2017 成功连接到 Mac
  • Apple 开发证书,配置 个人资料已正确设置

我的代码

我有这个简单的代码来发送电子邮件

  private void SendEmail()
        {
            MFMailComposeViewController mailController;

            if (MFMailComposeViewController.CanSendMail)
            {

                mailController = new MFMailComposeViewController();

                // do mail operations here
                mailController.SetToRecipients(new string[] { "abe.uwe@gmail.com" });
                mailController.SetSubject("mail test");
                mailController.SetMessageBody("this is a test", false);

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

            }

        }

我在 AppDelegate FinishedLaunching 中调用 SendEmail()。

结果 CanSendEmail 返回 true 但未收到电子邮件,同时检查了我的垃圾邮件文件夹。

【问题讨论】:

    标签: c# xamarin.forms xamarin.android xamarin.ios monodevelop


    【解决方案1】:

    您正在创建MFMailComposeViewController,但从未将其呈现给用户。用户必须是实际发送消息的那个人。

    this.PresentViewController(mailController, true, null);
    

    【讨论】:

    • 我在 AppDelegate 中无权访问 PresentViewController。
    • 为什么要在 AppDelegate 中这样做? MFMailComposeViewController 必须显示给用户,所以它应该在你呈现一些 UI 之后完成,而不是之前。
    • 如果您尝试在没有用户操作的情况下发送自动电子邮件,那么 MFMailComposeViewController 将不适合您
    • 我在 AppDelegate 中执行此操作,因为它将作为用于调试目的的默认电子邮件,并将在实时应用程序中被禁用。无需用户输入。
    • iOS API 不允许您这样做,抱歉。您必须让用户真正完成 UI 交互才能发送电子邮件
    【解决方案2】:

    如果this.PresentViewController 在您的情况下是不可能的,您也可以使用:

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

    【讨论】:

    • 对不起,我是 Xamarin iOS 的新手,当我在发送邮件方法中包含您的代码时,我得到对象引用错误。 KeyWindow 为空。我错过了什么?
    • 首先你必须设置初始 UIViewController 才能调用 SendEmail();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 2013-04-13
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多