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

使用Android+C#发邮件时执行SmtpServer.Send无返回无报错问题

安卓+C#环境下SmtpClient发送邮件卡住的解决方案

你原有的代码是WPF桌面端实现,直接搬到安卓平台会存在多个适配问题,按以下步骤排查修复即可:

  • 替换同步Send方法为异步实现,避免主线程阻塞
    安卓平台禁止在主线程执行耗时网络操作,同步调用SmtpServer.Send(mail)会直接触发主线程阻塞,系统会挂起调用逻辑甚至吞掉异常,不会有任何报错提示。你需要改用异步方法SendMailAsync,放在非UI线程执行,同时添加异常捕获逻辑:
try
{
    await SmtpServer.SendMailAsync(mail);
}
catch (Exception ex)
{
    // 此处可捕获到具体报错信息,方便定位问题
    Console.WriteLine(ex.ToString());
}
  • 检查安卓网络权限配置
    打开AndroidManifest.xml文件,确认已经添加网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />

未授予网络权限时所有网络请求会被系统静默拦截,不会抛出显式异常,只会停留在调用处无响应。

  • 替换过时的SmtpClient实现
    System.Net.Mail.SmtpClient已被官方标记为过时,跨平台兼容性极差,移动端场景下推荐使用适配全平台的开源邮件库MailKit实现发送逻辑:
    1. 先安装对应的NuGet包:MailKit、MimeKit
    2. 参考示例代码实现:
using MailKit.Net.Smtp;
using MimeKit;

var message = new MimeMessage();
message.From.Add(new MailboxAddress("发件人", "xxxxxxx@outlook.com"));
message.To.Add(new MailboxAddress("收件人", etEmailUser.Text));
message.Subject = "Subject";

message.Body = new TextPart("html")
{
    Text = "email body"
};

using (var client = new SmtpClient())
{
    await client.ConnectAsync("smtp.live.com", 587, true);
    await client.AuthenticateAsync("xxxxxxx@outlook.com", "你的验证密码");
    await client.SendAsync(message);
    await client.DisconnectAsync(true);
}
  • 调整Outlook账号安全配置
    开启两步验证的Outlook账号必须使用专用应用密码,不能直接用原登录密码做SMTP验证,你需要到Outlook账号安全中心生成应用密码,替换代码中的密码字段。
  • 相关问题截图:
    问题截图

内容的提问来源于stack exchange,提问作者Plc Worker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:06:07