如何将TextBox中的值发送至邮件?C#邮件发送实现求助
实现邮件发送器的完整指南
嘿,别担心,你的需求完全可以实现!之前找的方案没用大概率是没抓对SMTP配置要点或者代码逻辑有小漏洞,我来一步步帮你搞定。
先优化现有代码的逻辑问题
你的现有代码有两处需要调整的细节:
Int32.Parse(textBox1.Text)会在输入非数字时直接抛出异常,建议用Int32.TryParse做安全转换- 初始的
if判断仅在「两个TextBox都为空」时提示,但如果其中一个空、另一个非空,会直接进入else if分支,逻辑不够严谨
调整后的基础判断代码可以改成这样:
private void button1_Click(object sender, EventArgs e) { // 先检查至少有一个TextBox有内容 if (string.IsNullOrWhiteSpace(textBox1.Text) && string.IsNullOrWhiteSpace(textBox2.Text)) { MessageBox.Show("You're empty!"); return; } // 安全转换textBox1的内容为数字 if (int.TryParse(textBox1.Text, out int textBox1Value) && textBox1Value != 0) { // 这里嵌入邮件发送逻辑 SendEmail(textBox1.Text, textBox2.Text); } else { MessageBox.Show("Something went wrong."); System.Threading.Thread.Sleep(2000); MessageBox.Show("Closing"); System.Threading.Thread.Sleep(1000); this.Close(); } }
核心:实现邮件发送方法
你引用的System.Net.Mail确实是正确的命名空间,我们需要用到MailMessage(构建邮件内容)和SmtpClient(发送邮件)两个核心类。下面是完整的发送方法示例,我以常见的Gmail SMTP为例(其他邮箱比如Outlook/QQ邮箱只需修改SMTP服务器、端口和SSL设置即可):
using System.Net; using System.Net.Mail; private async void SendEmail(string content1, string content2) { try { // 1. 构建邮件内容 MailMessage mail = new MailMessage(); mail.From = new MailAddress("你的发送邮箱@gmail.com"); // 替换成你的发送邮箱 mail.To.Add("接收邮箱@example.com"); // 替换成目标接收邮箱 mail.Subject = "来自邮件发送器的内容"; // 自定义邮件主题 // 把两个TextBox的内容拼接成邮件正文 mail.Body = $"TextBox1内容:{content1}\nTextBox2内容:{content2}"; mail.IsBodyHtml = false; // 如果需要HTML格式邮件,改成true // 2. 配置SMTP服务器 SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 587); // Gmail的SMTP服务器和端口 smtpClient.Credentials = new NetworkCredential("你的发送邮箱@gmail.com", "你的应用密码"); // 注意:Gmail需要用应用密码,不是原账号密码 smtpClient.EnableSsl = true; // Gmail必须启用SSL // 3. 异步发送邮件(避免UI卡死) await smtpClient.SendMailAsync(mail); MessageBox.Show("邮件发送成功!"); } catch (Exception ex) { MessageBox.Show($"邮件发送失败:{ex.Message}"); } }
关键注意事项
- SMTP服务器配置:不同邮箱的SMTP参数不一样,举几个常见例子:
- Outlook/Hotmail:SMTP服务器
smtp.office365.com,端口587,启用SSL - QQ邮箱:SMTP服务器
smtp.qq.com,端口465,启用SSL,需要用授权码代替密码
- Outlook/Hotmail:SMTP服务器
- 账号安全:绝对不要在代码里硬编码邮箱密码!建议把邮箱账号、密码、SMTP配置放到
App.config或者appsettings.json中 - 异步发送:上面用了
await smtpClient.SendMailAsync,所以需要把button1_Click方法改成异步签名:private async void button1_Click(...),这样发送邮件时UI不会卡住 - 异常处理:一定要加try-catch捕获发送过程中的异常(比如网络问题、SMTP配置错误、邮箱权限问题等)
最后调整button_Click为异步
把原来的方法签名改成异步,才能正常使用await:
private async void button1_Click(object sender, EventArgs e) { // 这里是之前的判断逻辑,保持不变 if (string.IsNullOrWhiteSpace(textBox1.Text) && string.IsNullOrWhiteSpace(textBox2.Text)) { MessageBox.Show("You're empty!"); return; } if (int.TryParse(textBox1.Text, out int textBox1Value) && textBox1Value != 0) { await SendEmail(textBox1.Text, textBox2.Text); // 这里加await } else { MessageBox.Show("Something went wrong."); System.Threading.Thread.Sleep(2000); MessageBox.Show("Closing"); System.Threading.Thread.Sleep(1000); this.Close(); } }
这样整个邮件发送器的核心功能就完成啦,按照你的邮箱服务商配置好SMTP参数,就能正常发送邮件了。
内容的提问来源于stack exchange,提问作者Insanebench420
相关产品推荐
相关产品推荐

