VS Code中C# SMTP邮件代码出现已定义变量'message'却提示未定义的异常问题求助
VS Code中C# SMTP邮件代码出现已定义变量'message'却提示未定义的异常问题求助
嘿,我一眼就瞅出问题所在啦!你这个错误看起来是VS Code在“瞎报错”,但其实是C#语法规则的问题,和VS Code本身关系不大~
先看你的代码结构:你把message.From = ...、message.Subject = ...这些赋值语句直接写在了Program类的根级别(也就是类的成员区域),但C#里有个硬性规则:类的直接作用域里只能写成员的声明(比如变量、方法、属性的定义),不能直接写执行逻辑代码。
你现在的写法相当于在类里直接写执行语句,编译器/VS Code的C#分析器(OmniSharp)根本没法正确解析你的代码结构,所以才抛出了这么误导人的错误提示——它不是真的认不出message变量,而是整个代码结构错了,导致分析器“混乱”了。
另外我还发现你代码里的两个小错误:
message.To.Add(new MailAddress(REDACTED@gmail.com);这里少了闭合的括号,而且邮箱地址没加双引号- 所有的执行逻辑都没有放在方法里,控制台程序的入口是
Main方法,得把代码塞进去才行
给你修正后的代码参考:
using System; using System.Net; using System.Net.Mail; using System.Net.WebSockets; namespace SendEmailWIthGoogleSMTP { class Program { static void Main(string[] args) { string fromMail = "REDACTED@gmail.com"; string password = "REDACTED"; MailMessage message = new MailMessage(); message.From = new MailAddress(fromMail); message.Subject = "Test Subjecting"; // 这里补上双引号和闭合括号 message.To.Add(new MailAddress("REDACTED@gmail.com")); message.Body = "This is a test"; message.IsBodyHtml = false; // 后面还可以补充SMTP客户端的发送代码,比如: // SmtpClient client = new SmtpClient("smtp.gmail.com", 587); // client.Credentials = new NetworkCredential(fromMail, password); // client.EnableSsl = true; // client.Send(message); } } }
简单总结下解决步骤:
- 把所有的执行逻辑(变量赋值、SMTP配置这些)放到方法里(比如控制台程序的
Main入口方法) - 修正代码里的语法小错误(括号、引号缺失问题)
- 要是保存后还有奇怪提示,可以试试重启VS Code的OmniSharp服务(按
Ctrl+Shift+P,输入Restart OmniSharp),有时候分析器卡了也会出乌龙提示~
备注:内容来源于stack exchange,提问作者xarzu
相关产品推荐
相关产品推荐

