C#控制台应用中使用SMTP发送邮件失败求助
使用C# SMTP发送Gmail邮件时抛出"Failure sending mail"异常的排查与解决
问题描述
我正在学习用C#通过SMTP发送基础邮件,代码如下:
Console.WriteLine("Sending email.."); const string fromEmail = "abc@gmail.com"; const string pswd = "password"; MailMessage message = new MailMessage(); SmtpClient smtp = new SmtpClient(); message.From = new MailAddress(fromEmail); message.To.Add(new MailAddress("abc@gmail.com")); message.Subject = "Email Testing"; message.Body = "This is email testing. It is working as expected. Thanks"; message.IsBodyHtml = false; smtp.Port = 587; smtp.Host = "smtp.gmail.com"; smtp.EnableSsl = true; smtp.UseDefaultCredentials = false; smtp.Credentials = new NetworkCredential(fromEmail, pswd); smtp.DeliveryMethod = SmtpDeliveryMethod.Network; smtp.Send(message); Console.WriteLine("Email sent successfully");
运行时抛出异常:
Failure sending mail. at System.Net.Mail.SmtpClient.Send(MailMessage message) at EmailDemo.Program.Main(String[] args)
异常出现在smtp.Send()方法处,无法明确具体原因。已确认发件邮箱和应用密码正确,仅发件人与收件人邮箱相同,怀疑是否缺少某些配置,寻求帮助。
排查与解决办法
捕获内部异常获取详细错误信息
当前异常仅显示外层提示,需捕获SmtpException并查看InnerException,它会给出更具体的错误原因(比如认证失败、服务器拒绝、安全拦截等)。修改代码添加异常捕获:try { smtp.Send(message); Console.WriteLine("Email sent successfully"); } catch (SmtpException ex) { Console.WriteLine($"SMTP错误:{ex.Message}"); if (ex.InnerException != null) { Console.WriteLine($"内部错误:{ex.InnerException.Message}"); } }检查Gmail账号的SMTP权限配置
即便使用了应用密码,仍需确认:- 账号已开启两步验证(应用密码仅对开启两步验证的Google账号有效)
- 登录Google账号安全中心,查看是否有SMTP登录的安全拦截通知,若有需手动允许该设备的访问
- 确保账号没有触发Google的异常检测限制(比如近期异地登录、频繁发送邮件等)
确认SmtpClient配置顺序
UseDefaultCredentials必须在设置Credentials之前赋值,否则会导致认证参数失效。你的代码顺序正确,但后续修改需保持这个逻辑:smtp.UseDefaultCredentials = false; smtp.Credentials = new NetworkCredential(fromEmail, pswd);尝试切换SMTP端口
Gmail支持587(STARTTLS)和465(SSL直连)两个端口,若当前587端口连接失败,可尝试改用465端口:smtp.Port = 465; smtp.EnableSsl = true;
内容的提问来源于stack exchange,提问作者joma
相关产品推荐
相关产品推荐

