在Xamarin.Forms中使用MailKit发送电子邮件时出现System.MissingMethodException

时间:2019-03-06 02:37:04

标签: xamarin.forms mailkit

我正在尝试使用MailKit库在Xamarin.Forms中发送电子邮件。但是,当执行命中ConnectAsync()方法时,我得到以下异常:

System.MissingMethodException:字符串[] string.Split(char,System.StringSplitOptions)

以前有没有人遇到过。我不知道任何缺少的方法。

以下是我在.net标准项目中的代码:


        using MailKit.Net.Smtp;
        using MimeKit;
        using MimeKit.Text;
        using System;
        using System.Collections.Generic;
        using System.Diagnostics;
        using System.Linq;
        using System.Threading.Tasks;

        public async Task SendAsync(EmailMessage emailMessage)
        {                                    
                    try
                    {
                        var message = new MimeMessage();

                        message.To.Add(new MailboxAddress("Recipient", "xamapp@icloud.com"));
                        message.From.Add(new MailboxAddress("Sender", "xamapp.no.reply@gmail.com"));

                        message.Subject = "Test!!";  

                        message.Body = new TextPart(TextFormat.Html)
                        {
                            Text = "Test message"  
                        };  

                        using (var emailClient = new SmtpClient())
                        {
                            await emailClient.ConnectAsync("smtp.gmail.com", 465, true);

                            emailClient.AuthenticationMechanisms.Remove("XOAUTH2");

                            await emailClient.AuthenticateAsync("username", "password");

                            await emailClient.SendAsync(message);

                            emailClient.Disconnect(true);
                        }
                    }
                    catch (SmtpCommandException ex)
                    {
                        Debug.WriteLine($"Error sending email: {ex.Message}");
                        Debug.WriteLine($"StatusCode: {ex.StatusCode}");                
                    }
                    catch (SmtpProtocolException ex)
                    {
                        Debug.WriteLine($"Protocol error while sending email: {ex.Message}");
                    }  
    }

1 个答案:

答案 0 :(得分:0)

类似Xamarin.Forms项目的声音正在引入不匹配的.NET框架版本的库(可能是错误的MimeKit和/或MailKit框架版本)。

检查以查看您的构建从nuget包中提取了哪些确切的MimeKit和MailKit程序集。如果您不熟悉nuget的工作方式,则每个nuget可以包含为不同框架构建的库的多个副本。

例如,MimeKit nuget具有为以下框架构建的程序集:

  • netstandard1.3
  • netstandard1.6
  • netstandard2.0
  • Xamarin.Android
  • Xamarin.iOS
  • net45
  • portable-net45 + win8(Profile7)
  • portable-net45 + win8 + wpa81(Profile111)

MailKit nuget包含为以下框架构建的程序集:

  • netstandard1.3
  • netstandard1.6
  • netstandard2.0
  • Xamarin.Android
  • Xamarin.iOS
  • net45
  • portable-net45 + win81 + wpa81(Profile32)

确保您的项目同时为两个nuget而不是混合匹配引入netstandard2.0程序集。