Xamarin.Forms中邮件发送成功后Gmail无法接收问题求助
邮件发送后Gmail未收到的排查方案
问题背景
此前App使用以下代码发送邮件可正常运行,现在出现异常:App端显示邮件已发送,但目标Gmail账号(malitogroup061@gmail.com)无法收到邮件,代码无报错提示。
try { MailMessage mail = new MailMessage(); SmtpClient SmtpServer = new SmtpClient("outlook.live.com"); mail.From = new MailAddress("requestsubscribe@outlook.com"); mail.To.Add("malitogroup061@gmail.com"); mail.Subject = subject; mail.Body = Helper.EmailBody.EmailBodyG(companyTypeString, item.CompanyName, item.NationalId, item.SharePercent, item.FullName, item.NationalCode , item.BirthdayDate, item.ActivityType, item.CellPhoneNumber, item.PhoneNumber, item.PostalCode, item.Address, request); SmtpServer.Port = 587; SmtpServer.Host = "outlook.live.com"; SmtpServer.EnableSsl = true; SmtpServer.UseDefaultCredentials = false; SmtpServer.Credentials = new System.Net.NetworkCredential("requestsubscribe@outlook.com", "******"); SmtpServer.SendMailAsync(mail); Navigation.PopPopupAsync(); Toast.MakeText(Application.Context, "sending...", ToastLength.Short).Show(); } catch (Exception) { DisplayAlert("alert", "message", "ok"); }
排查步骤
修复异步发送的异常捕获问题
代码中使用SendMailAsync但未等待,异步操作的异常不会被外层try/catch捕获,导致实际发送失败但App无提示。修改代码:// 确保所在方法标记为async await SmtpServer.SendMailAsync(mail);这样才能捕获发送过程中的隐性错误,比如SMTP服务器的拒绝响应。
检查发件方Outlook邮箱状态
登录requestsubscribe@outlook.com,查看:- 已发送邮件:确认邮件是否真正被Outlook服务器接受
- 垃圾邮件/退信文件夹:是否存在Gmail拒收后的退信通知,或者Outlook自身拦截了邮件
检查目标Gmail的过滤规则
登录malitogroup061@gmail.com:- 查看垃圾邮件文件夹,确认邮件是否被误判为垃圾
- 进入设置→过滤器和屏蔽地址,检查是否有规则自动过滤该发件人的邮件
验证Outlook SMTP账号权限
- 如果账号开启了两步验证,必须使用应用密码代替原密码填写到
NetworkCredential中,普通密码无法通过SMTP验证 - 登录微软账号安全中心,确认是否有可疑登录记录,是否需要解锁SMTP登录权限
- 如果账号开启了两步验证,必须使用应用密码代替原密码填写到
测试邮件内容是否触发反垃圾机制
临时替换邮件内容为简单文本(如"Test Email"),发送测试邮件。如果能收到,说明原邮件内容包含敏感词或格式问题,触发了Gmail的反垃圾规则。验证SMTP服务器配置
建议将SMTP Host替换为微软官方推荐的smtp.office365.com(与outlook.live.com兼容,但稳定性更好),保持Port=587、EnableSsl=true的配置不变。可使用本地SMTP测试工具验证连接和发送是否正常。
内容的提问来源于stack exchange,提问作者mtb10
相关产品推荐
相关产品推荐

