Arhn - архитектура программирования

отправка электронной почты в формах 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[] {"[email protected]"});
                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();
    }
}

Кто-нибудь знает, что здесь может быть не так?

29.04.2017


Ответы:


1

Вероятно, это связано с этой ошибкой: https://bugzilla.xamarin.com/show_bug.cgi?id=58933

Просто удалите DisplayActionSheet.

Или, если вы хотите его использовать, то на этом форуме Xamarin есть временное решение тема
Добавить

await Task.Delay(100);

после DisplayActionSheet

23.11.2017

2

Для лучшего способа отправки электронной почты даже без написания кода для конкретной платформы установите этот nuget в свое решение xam.plugin.Messaging(https://www.nuget.org/packages/Xam.Plugins.Messaging/)

Затем напишите приведенный ниже код на PCL.

var email = new EmailMessageBuilder()
  .To("[email protected]")
  .Subject("Xamarin Messaging Plugin")
  .Body("Well hello there from Xam.Messaging.Plugin")
  .Build();

Вы также можете добавить вложения. Для получения более подробной информации посетите страницу https://github.com/cjlotz/Xamarin.Plugins/blob/master/Messaging/Details.md

04.05.2017
  • Супер удобно. Спасибо, что поделился. 15.08.2019

  • 3

    Симулятор iPhone всегда будет возвращать значение false для CanSendMail, так как он не может отправлять почту. На физическом устройстве вам нужно будет настроить как минимум учетную запись электронной почты.

    Также:

    Опечатка в:

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

    Должно быть:

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

    Опечатка в:

    mailController.Finnished += ~~~~~
    

    Должно быть:

    mailController.Finished += ~~~~~
    
    29.04.2017
  • Указанная вами опечатка есть только в этом посте и не должна быть проблемой в моем коде. Когда я запускаю симулятор, значение CanSendMail устанавливается равным true, но я также пробовал использовать физическое устройство, чтобы быть уверенным, но на iPhone ничего не происходит, когда я нажимаю кнопку отправки почты. Отладчик просматривает каждый шаг кода, но безрезультатно. 29.04.2017
  • CanSendMail в симуляторе должно быть ложно. Вы используете более старую бета-версию iOS? так как это было нарушено в рамках iOS. Запускаете старую версию Xamarin.iOS? 29.04.2017
  • Я использую новейшую версию xamarin.iOS, и причина, по которой CanSendMail верна, заключается в том, что я вошел в систему со своей электронной почтой на симуляторе. Есть ли что-то еще, что может вызвать мою проблему? 30.04.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..