C# WinForm中NetworkCredentials配置问题:邮件发送功能异常求助
C# WinForm 发送邮件 NetworkCredentials 配置问题解决指南
常见配置错误点
- 用登录密码代替第三方授权码:国内主流邮箱(QQ、网易、新浪等)都要求用授权码而非登录密码进行SMTP验证,直接用登录密码会导致验证失败
- SMTP服务器/端口不匹配:不同邮箱的SMTP地址和加密端口不一样,比如QQ邮箱SMTP是
smtp.qq.com,SSL端口465;网易163是smtp.163.com,SSL端口465 - 未启用邮箱SMTP服务:大部分邮箱默认关闭SMTP服务,需要手动在网页端设置里开启
- Credentials赋值错误:确保NetworkCredential的第一个参数是发件人邮箱完整地址,第二个是授权码/正确密码
新手友好的完整代码示例
在按钮点击事件中添加以下代码(替换成你的邮箱信息):
private void btnSend_Click(object sender, EventArgs e) { // 获取文本框中的收件人邮箱 string recipient = txtEmail.Text.Trim(); if (string.IsNullOrWhiteSpace(recipient)) { MessageBox.Show("请输入收件人邮箱地址"); return; } try { // 构建邮件内容 MailMessage mail = new MailMessage(); mail.From = new MailAddress("你的发件邮箱@xxx.com"); mail.To.Add(recipient); mail.Subject = "WinForm测试邮件"; mail.Body = "这是通过C# WinForm发送的测试邮件"; // 配置SMTP客户端 SmtpClient smtp = new SmtpClient(); smtp.Host = "smtp.qq.com"; // 替换为你的邮箱SMTP服务器 smtp.Port = 465; // SSL加密端口 smtp.EnableSsl = true; // 启用加密 // 核心配置:发件人邮箱 + 授权码(不是登录密码) smtp.Credentials = new NetworkCredential("你的发件邮箱@xxx.com", "你的邮箱授权码"); // 发送邮件 smtp.Send(mail); MessageBox.Show("邮件发送成功!"); } catch (Exception ex) { // 捕获异常并提示具体错误,方便排查 MessageBox.Show($"发送失败:{ex.Message}"); } }
必做前置操作
- 登录你的发件邮箱网页端,找到「设置-账户」页面,开启POP3/SMTP服务
- 按照邮箱提示生成授权码,这个授权码就是NetworkCredential需要的密码参数
- 确认防火墙/杀毒软件没有阻止程序访问SMTP服务器端口
内容的提问来源于stack exchange,提问作者kushani sulochana
相关产品推荐
相关产品推荐

