2016-12-01 68 views
0

我正尝试使用Gmail从Xamarin Forms应用程序发送电子邮件。从Xamarin.Forms应用程序中的Gmail发送电子邮件

我创建了一个只有1个方法的接口:SendEmail();

然后,在Droid项目中,我添加了一个实现上述接口的类。利用相关性属性和获取的主要项目的方法的实现,一切都很好,除了以下错误:

Could not resolve host 'smtp.gmail.com' 

这是实际的实施方法:

string subject = "subject here "; 
    string body= "body here "; 
    try 
    { 
     var mail = new MailMessage(); 
     var smtpServer = new SmtpClient("smtp.gmail.com", 587); 
     mail.From = new MailAddress("[email protected]"); 
     mail.To.Add("[email protected]"); 
     mail.Subject = subject; 
     mail.Body = body; 
     smtpServer.Credentials = new NetworkCredential("username", "pass"); 
     smtpServer.UseDefaultCredentials = false; 
     smtpServer.EnableSsl = true; 
     smtpServer.Send(mail); 
    } 
    catch (Exception ex) 
    { 
     System.Diagnostics.Debug.WriteLine(ex); 

    } 

搜索周围我找不到有关它的任何细节,以及实际的smtp地址。

此外,我使用了谷歌的安全性较低的应用程序,没有收到证书错误,我认为它可以连接到帐户就好了。

回答

0

终于想出它自己!

首先,我使用Xamarin的Android Player,它显然不支持网络连接。

所以我的修复非常简单:在Visual Studio Community 2015中使用了Android Emulator(它的任何版本),并使用James Montemagno的插件(NuGet上的Xam.Plugin.Connectivity)测试了网络连接。

2

你好,我有这个使用下面的代码,我也有附加的文件到电子邮件,使用依存服务我用这个方法实现:

安卓

public static string ICSPath 
{ 
    get 
    { 
     var path = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, StaticData.CalendarFolderName); 
     if (!Directory.Exists(path)) 
      Directory.CreateDirectory(path); 
     return Path.Combine(path, StaticData.CalendarFileName); 
    } 
} 

public async Task<bool> ShareCalendarEvent(List<ISegment> segmentList) 
{ 
    Intent choserIntent = new Intent(Intent.ActionSend); 

    //Create the calendar file to attach to the email 
    var str = await GlobalMethods.CreateCalendarStringFile(segmentList); 

    if (File.Exists(ICSPath)) 
    { 
     File.Delete(ICSPath); 
    } 

    File.WriteAllText(ICSPath, str); 

    Java.IO.File filelocation = new Java.IO.File(ICSPath); 
    var path = Android.Net.Uri.FromFile(filelocation); 

    // set the type to 'email' 
    choserIntent.SetType("vnd.android.cursor.dir/email"); 
    //String to[] = { "[email protected]" }; 
    //emailIntent.putExtra(Intent.EXTRA_EMAIL, to); 
    // the attachment 
    choserIntent.PutExtra(Intent.ExtraStream, path); 
    // the mail subject 
    choserIntent.PutExtra(Intent.ExtraSubject, "Calendar event"); 
    Forms.Context.StartActivity(Intent.CreateChooser(choserIntent, "Send Email")); 

    return true; 

} 

的iOS:

public static string ICSPath 
{ 
    get 
    { 
     var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), StaticData.CalendarFolderName); 
     if (!Directory.Exists(path)) 
      Directory.CreateDirectory(path); 
     return Path.Combine(path, StaticData.CalendarFileName); 
    } 
} 


public async Task<bool> ShareCalendarEvent(List<ISegment> segmentList) 
{ 
    //Create the calendar file to attach to the email 
    var str = await GlobalMethods.CreateCalendarStringFile(segmentList); 

    if (File.Exists(ICSPath)) 
    { 
     File.Delete(ICSPath); 
    } 

    File.WriteAllText(ICSPath, str); 

    MFMailComposeViewController mail; 
    if (MFMailComposeViewController.CanSendMail) 
    { 
     mail = new MFMailComposeViewController(); 
     mail.SetSubject("Calendar Event"); 
     //mail.SetMessageBody("this is a test", false); 
     NSData t_dat = NSData.FromFile(ICSPath); 
     string t_fname = Path.GetFileName(ICSPath); 
     mail.AddAttachmentData(t_dat, @"text/v-calendar", t_fname); 

     mail.Finished += (object s, MFComposeResultEventArgs args) => 
     { 
      //Handle action once the email has been sent. 
      args.Controller.DismissViewController(true, null); 
     }; 

     Device.BeginInvokeOnMainThread(() => 
     { 
      UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(mail, true, null); 
     }); 

    } 
    else 
    { 
     //Handle not being able to send email 
     await App.BasePageReference.DisplayAlert("Mail not supported", 
               StaticData.ServiceUnavailble, StaticData.OK); 
    } 

    return true; 
} 

我希望这会有所帮助。

+0

你好马里奥,谢谢你的回复!我认为你的方法可行,但我需要能够控制邮箱的登录以及邮件发送者。尝试使用不太安全的Gmail帐户,也是一个雅虎之一,仍然得到上面发布相同的错误.... –

相关问题