You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将TextBox中的值发送至邮件?C#邮件发送实现求助

实现邮件发送器的完整指南

嘿,别担心,你的需求完全可以实现!之前找的方案没用大概率是没抓对SMTP配置要点或者代码逻辑有小漏洞,我来一步步帮你搞定。

先优化现有代码的逻辑问题

你的现有代码有两处需要调整的细节:

  1. Int32.Parse(textBox1.Text) 会在输入非数字时直接抛出异常,建议用Int32.TryParse做安全转换
  2. 初始的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,需要用授权码代替密码
  • 账号安全:绝对不要在代码里硬编码邮箱密码!建议把邮箱账号、密码、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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:46:18