C# 在xamarin中从我的SMTP客户端发送邮件

C# 在xamarin中从我的SMTP客户端发送邮件,c#,email,xamarin,smtp,smtpclient,C#,Email,Xamarin,Smtp,Smtpclient,我尝试用我的smtp客户端发送邮件,但我没有异常,邮件也没有收到 public void SendSMTPMail(string from, string to, string subject, string body) { var smtp_client = new SmtpClient("mail.mydomain.gr",25); smtp_client.UseDefaultCredentials = false; smtp_client.EnableSsl = fals

我尝试用我的smtp客户端发送邮件,但我没有异常,邮件也没有收到

public void SendSMTPMail(string from, string to, string subject, string body)
{
   var smtp_client = new SmtpClient("mail.mydomain.gr",25);
   smtp_client.UseDefaultCredentials = false;
   smtp_client.EnableSsl = false;
   smtp_client.Credentials = new NetworkCredential("noreply@mydomain.gr", "mypass");

   ServicePointManager.ServerCertificateValidationCallback = (s, certificate, chain, sslPolicyErrors) => true;

   var msg = new MailMessage(from, to );
   msg.Subject = subject;
   msg.Body = body;
   smtp_client.SendAsync(msg , string.Empty);
}
我使用断点并找到一些信息

smtp_client.ServicePoint System.NotImplementException:未实现请求功能


但是我将此代码与另一个smtp一起使用,效果很好。有什么帮助吗?

您似乎无法使用Xamarin中的System.Net.Mail.SmtpClient。 相反,您应该使用带有本机实现的邮件服务。这里有一个很小的例子。表格编号:

public abstract class EmailService
{

    public static readonly Lazy<EmailService> Instance = new Lazy<EmailService>(() => DependencyService.Get<EmailService>());

    public abstract bool CanSend { get; }

    public abstract void ShowDraft(string subject, string body, bool html, string to, byte[] screenshot = null);

    public abstract void ShowDraft(string subject, string body, bool html, string[] to, string[] cc, string[] bcc, byte[] screenshot = null);
}
从表单代码调用整个过程,如:

                    var emailService = DependencyService.Get<EmailService>();
                    if (emailService.CanSend)
                    {
                        emailService.ShowDraft(
                                    "Your caption",
                                    "Your text",
                                    true,
                                    "your@ddress.com");
                    }
var-emailService=DependencyService.Get();
if(emailService.CanSend)
{
emailService.ShowDraft(
“你的标题”,
“你的文字”,
是的,
"your@ddress.com");
}

作为替代方案,您可以使用我的库使用Xamarin.iOS/Android/Mac发送邮件

public void SendSMTPMail(string from, string to, string subject, string body)
{
    var message = new MimeMessage ();
    var builder = new BodyBuilder ();

    message.From.Add (InternetAddress.Parse (from));
    message.To.Add (InternetAddress.Parse (to));
    message.Subject = subject;

    builder.TextBody = body;

    message.Body = builder.ToMessageBody ();

    using (var client = new SmtpClient ()) {
        client.ServerCertificateValidationCallback = (s, certificate, chain, sslPolicyErrors) => true;

        client.Connect ("mail.mydomain.gr", 25, false);
        client.Authenticate ("noreply@mydomain.gr", "mypass");
        client.Send (message);
        client.Disconnect (true);
    }
}

我尝试了MailKit,但我有多个错误。错误CS0117“System.Net.Mail.SmtpClient”不包含连接、身份验证、断开连接和ServerCertificateValidationCallback方法的定义。另外Send()接受MailMessage,MailKit使用MimeMessage。您有多个错误,因为您没有添加正确的用法,并且使用System.Net.Mail保留了旧的
。使用MimeKit添加
;使用邮箱;使用MailKit.Net.Smtp谢谢,我修好了。也许我的域邮件有问题。我不知道。我将创建Gmail帐户并使用Gmail SMTP。也许这工作没有问题。谢谢,但我不会打开邮件客户端发送邮件。
public void SendSMTPMail(string from, string to, string subject, string body)
{
    var message = new MimeMessage ();
    var builder = new BodyBuilder ();

    message.From.Add (InternetAddress.Parse (from));
    message.To.Add (InternetAddress.Parse (to));
    message.Subject = subject;

    builder.TextBody = body;

    message.Body = builder.ToMessageBody ();

    using (var client = new SmtpClient ()) {
        client.ServerCertificateValidationCallback = (s, certificate, chain, sslPolicyErrors) => true;

        client.Connect ("mail.mydomain.gr", 25, false);
        client.Authenticate ("noreply@mydomain.gr", "mypass");
        client.Send (message);
        client.Disconnect (true);
    }
}