You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:40:43