如何在Xamarin Forms中发送带附件的邮件?附C#代码示例
在Xamarin Forms中发送带附件的邮件(完整实现)
嘿,我来帮你完善这段代码,搞定Xamarin Forms里带附件的邮件发送功能,同时给你讲清楚关键注意事项:
完整可运行的C#代码
using System; using System.Net; using System.Net.Mail; using Xamarin.Forms; public partial class YourContentPage : ContentPage { public YourContentPage() { InitializeComponent(); } private async void SendEmail(object sender, EventArgs e) { // 自定义邮件主题和内容 string subject = "测试邮件主题"; string body = "这是一封带附件的测试邮件"; // 替换为你的附件实际路径,这里用跨平台文档目录示例 string attachmentFilePath = System.IO.Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "sample_attachment.pdf" ); try { // 初始化邮件对象 var mailMessage = new MailMessage(); var smtpClient = new SmtpClient("smtp.gmail.com", 587); // 设置邮件收发信息 mailMessage.From = new MailAddress("veezo2007pk@gmail.com"); mailMessage.To.Add("veezo2009pk@gmail.com"); mailMessage.Subject = subject; mailMessage.Body = body; // 添加附件(先检查文件是否存在) if (System.IO.File.Exists(attachmentFilePath)) { var attachment = new System.Net.Mail.Attachment(attachmentFilePath); mailMessage.Attachments.Add(attachment); } else { await DisplayAlert("提示", "指定的附件文件不存在,请检查路径", "确定"); return; } // 配置SMTP服务器(Gmail为例) smtpClient.Credentials = new NetworkCredential( "veezo2007pk@gmail.com", "你的邮箱密码/应用专用密码" ); smtpClient.EnableSsl = true; // Gmail必须启用SSL加密 // 执行发送 smtpClient.Send(mailMessage); await DisplayAlert("成功", "邮件已发送完成", "确定"); } catch (Exception ex) { await DisplayAlert("发送失败", $"出错啦:{ex.Message}", "确定"); } } }
关键注意事项
- 附件路径处理:Xamarin Forms是跨平台框架,不同平台的文件存储路径不同,用
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)可以获取跨平台的用户文档目录,你只需要把附件放在这个目录下,或者替换成你实际的文件路径。 - Gmail账号配置:
- 如果你的谷歌账号没开两步验证,需要在账号设置里开启「不太安全的应用访问」;
- 如果开了两步验证,必须使用应用专用密码(在谷歌账号的安全设置里生成),不能用原密码登录SMTP。
- 平台权限:Android项目要在
AndroidManifest.xml中添加网络权限:<uses-permission android:name="android.permission.INTERNET" />;iOS项目无需额外权限(Gmail的SMTP是HTTPS,符合ATS要求)。 - 异常处理:邮件发送很容易因为网络问题、账号配置错误失败,所以一定要加try-catch块捕获异常,给用户友好提示。
内容的提问来源于stack exchange,提问作者waqas waqas
相关产品推荐
相关产品推荐

