2015-11-16 4 views
0

Я пытаюсь отправить почту с моим клиентом smtp, но у меня нет исключения, и почта не получена.Отправлять почту от моего клиента SMTP в xamarin

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("[email protected]", "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 и работ хорошо. Любая помощь ?

ответ

0

Похоже, вы не можете использовать System.Net.Mail.SmtpClient в Xamarin. Вместо этого вы должны использовать почтовую службу с собственной реализацией. Здесь крошечный пример. Формы Код:

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); 
} 

родной IOS код:

public class EmailServiceIos : EmailService 
{ 

    public override bool CanSend 
    { 
     get 
     { 
      return MFMailComposeViewController.CanSendMail; 
     } 
    } 

    public override void ShowDraft(
     string subject, 
     string body, 
     bool html, 
     string[] to, 
     string[] cc, 
     string[] bcc, 
     byte[] screenshot = null) 
    { 
     var mailer = new MFMailComposeViewController(); 

     mailer.SetMessageBody(body ?? string.Empty, html); 
     mailer.SetSubject(subject ?? string.Empty); 
     mailer.SetCcRecipients(cc); 
     mailer.SetToRecipients(to); 
     mailer.Finished += (s, e) => ((MFMailComposeViewController)s).DismissViewController(true,() => { }); 

     if (screenshot != null) 
     { 
      mailer.AddAttachmentData(NSData.FromArray(screenshot), "image/png", "screenshot.png"); 
     } 

     UIViewController vc = UIApplication.SharedApplication.KeyWindow.RootViewController; 
     while (vc.PresentedViewController != null) 
     { 
      vc = vc.PresentedViewController; 
     } 
     vc.PresentViewController(mailer, true, null); 
    } 

    public override void ShowDraft(string subject, string body, bool html, string to, byte[] screenshot = null) 
    { 
     this.ShowDraft(subject, body, html, new[] { to }, new string[] { }, new string[] { }, screenshot); 
    } 
} 

И взывать все это из кода формы, как:

    var emailService = DependencyService.Get<EmailService>(); 
        if (emailService.CanSend) 
        { 
         emailService.ShowDraft(
            "Your caption", 
            "Your text", 
            true, 
            "[email protected]"); 
        } 
+0

Спасибо, но я не буду открывать почтовый клиент для отправки почты. –

2

В качестве альтернативы, вы можете использовать мой MailKit библиотеку для отправки почты с помощью 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 ("[email protected]", "mypass"); 
     client.Send (message); 
     client.Disconnect (true); 
    } 
} 
+0

Я пытаюсь MailKit, но у меня есть несколько ошибок. Ошибка CS0117 «System.Net.Mail.SmtpClient» не содержит определения для методов Connect, Authenticate, Disconnect и ServerCertificateValidationCallback. Также Send() принимает MailMessage, MailKit использует MimeMessage. –

+0

У вас есть несколько ошибок, потому что вы не добавили правильные данные и сохранили старый 'using System.Net.Mail;'. Добавить 'using MimeKit; использование MailKit; используя MailKit.Net.Smtp; ' – jstedfast

+0

Спасибо, я исправил это. Возможно, у моей почты есть проблемы. Я не знаю . Я создам учетную запись Gmail, и я использую SMTP Gmail. Может быть, эта работа без проблем. –