我的C# EmailSender类无法发送邮件,代码是否正确?
邮件发送失败问题排查与代码检查
我尝试编写了一个可用的C# EmailSender类,但测试发送邮件时,程序等待约一分钟后提示无连接,邮件未发送。问题可能出在代码或SMTP服务器配置上,烦请帮我检查代码是否正确?
class EmailSender { static public string SendEmail(string subj, string text, string emailTo) { try { MailAddress to = new MailAddress(emailTo, "m"); MailAddress from = new MailAddress("email address from which I send email"); MailMessage message = new MailMessage(from, to); message.Subject = subj; message.Body = text; message.IsBodyHtml = true; SmtpClient mySmtpClient = new SmtpClient("some smtp server", 587); mySmtpClient.UseDefaultCredentials = false; mySmtpClient.EnableSsl = true; mySmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; mySmtpClient.Credentials = new NetworkCredential("email address from which I send email", password: "bxzvxfobjudqdmyh"); mySmtpClient.Send(message); return null; } catch (Exception ex) { return "Error occured. " + ex.ToString(); } } }
我几乎看完了所有关于C#发送邮件的视频,但问题仍未解决。
代码与配置排查要点:
- 替换占位符SMTP地址:代码中的
"some smtp server"是占位符,必须替换为对应发件邮箱服务商的实际SMTP地址,比如QQ邮箱用smtp.qq.com,163邮箱用smtp.163.com,且要保证发件邮箱与SMTP服务器归属一致。 - 端口与SSL适配:端口587通常对应STARTTLS协议,部分服务商可能要求使用465端口(SSL直连),可以尝试切换端口并确认
EnableSsl的设置是否符合服务商要求。 - 授权码有效性:确认你使用的密码(
bxzvxfobjudqdmyh)是发件邮箱的第三方授权码(目前主流邮箱均禁用直接使用登录密码发送邮件),且授权码未过期或被撤销。 - 网络连通性检查:测试本地网络是否能访问SMTP服务器的对应端口,比如用命令
telnet smtp.xxx.com 587(替换为你的SMTP地址和端口),如果无法连通,可能是防火墙、代理或网络运营商封禁了端口。 - 超时设置优化:可以添加
mySmtpClient.Timeout = 10000;(设置10秒超时),避免长时间等待,更快获取错误信息。 - 代码顺序确认:你代码中先设置
UseDefaultCredentials = false再赋值Credentials的顺序是正确的,若顺序颠倒会导致凭证不生效,这点无需调整。
内容的提问来源于stack exchange,提问作者redhotchilipepper
相关产品推荐
相关产品推荐

