C#中SMTP邮件发送失败但Python正常,求修改方案
C# SMTP邮件发送故障修复
我用C#编写的SMTP邮件发送代码无法正常工作,但相同配置的Python代码可以正常发送邮件。请指出C#代码需要修改的部分:
Python可运行代码
def send_mail(): port = 443 # For SSL smtp_server = "smtps.****.be" sender_email = "***********" # Enter your address receiver_email = "***********" # Enter receiver address # create message object instance msg = MIMEMultipart() message = "Hello" # setup the parameters of the message msg['From'] = '**********' msg['To'] = '*********' msg['Subject'] = "Test" # add in the message body msg.attach(MIMEText(message, 'plain')) username = '********' password = '********' context = ssl.create_default_context() with smtplib.SMTP_SSL(smtp_server, port, context=context) as server: server.login(username, password) server.sendmail( sender_email, receiver_email, msg.as_string() ) print("successfully sent email to {}".format(msg['To']))
C#故障代码
MailMessage mail = new MailMessage(); SmtpClient SmtpServer = new SmtpClient("smtps.******.be"); mail.From = new MailAddress("***********"); mail.To.Add(textBox1.Text); mail.Subject = "reminder "; mail.Body = textBox4.Text; SmtpServer.Port = 443; //username //password SmtpServer.Credentials = new System.Net.NetworkCredential("*****"."*******"); SmtpServer.Send(mail); MessageBox.Show("mail Send");
需要修改的部分:
- 启用SSL加密:Python代码用
SMTP_SSL直接建立SSL连接,C#的SmtpClient默认未开启SSL,必须手动设置SmtpServer.EnableSsl = true;,否则无法在443端口完成加密通信。 - 修复语法错误:
NetworkCredential构造函数的参数分隔符错误,原代码用.分隔,需改为逗号,,即new System.Net.NetworkCredential("*****", "*******");。 - 添加资源管理(可选但推荐):
MailMessage和SmtpClient都实现了IDisposable接口,用using语句可自动释放资源,避免内存泄漏。 - 校验地址一致性:确保
mail.From的邮箱地址与NetworkCredential中的用户名完全匹配,部分SMTP服务器会验证发件人地址与登录账号是否一致。
修改后的完整C#代码:
using (MailMessage mail = new MailMessage()) using (SmtpClient SmtpServer = new SmtpClient("smtps.******.be")) { mail.From = new MailAddress("***********"); mail.To.Add(textBox1.Text); mail.Subject = "reminder "; mail.Body = textBox4.Text; SmtpServer.Port = 443; SmtpServer.EnableSsl = true; SmtpServer.Credentials = new System.Net.NetworkCredential("*****", "*******"); SmtpServer.Send(mail); MessageBox.Show("mail Send"); }
内容的提问来源于stack exchange,提问作者sscz azw
相关产品推荐
相关产品推荐

