使用 C# 发送电子邮件

Posted

技术标签:

【中文标题】使用 C# 发送电子邮件【英文标题】:Sending an email using c# 【发布时间】:2013-11-04 23:22:37 【问题描述】:

我试图弄清楚如何创建一个简单的联系页面以发送电子邮件。现在我只是在测试,但我没有收到任何错误消息。

这是我的代码:

protected void btnSend_Click(object sender, EventArgs e)

   MailMessage msg = new MailMessage();
   msg.To.Add(txtFrom.Text);
   msg.Subject = txtSubject.Text;
   msg.Body = txtMessage.Text;

   SmtpClient smtp = new SmtpClient("localhost");
   smtp.Send(msg);

   Response.Write("Your email was sent");

【问题讨论】:

发生了什么/出了什么问题? 我猜localhost 不是真正的 SMTP 服务器或中继点。将其替换为真实的 SMTP 服务器地址,它应该可以工作。 @James 所说的或者您可能需要某种凭据。看this SO question @JesseC.Slicer SmtpClient 在 .net4.0 之前不是 IDisposable。只是想指出这一点,以防该用户使用的是旧版本。 【参考方案1】:

您的本地主机上是否运行了 Smtp 服务?如果没有,您可以使用 Gmail 的 smtp 服务进行测试。

SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.Credentials = new NetworkCredential("<your gmail login>", "<your gmail password>");
client.EnableSsl = true;

【讨论】:

【参考方案2】:

正如其他人所指出的,您可能没有将 localhost 作为真正的邮件服务器。要获得更好的想法,请打开 Tracing 并将您的代码更改为类似这样的内容:

protected void btnSend_Click(object sender, EventArgs e) 
    Trace.Write("btnSend_Click initialized");
    string resp = "An unknown error occured.";
    using (MailMessage msg = new MailMessage()) 
        try 
            msg.To.Add(txtFrom.Text);
            msg.Subject = txtSubject.Text;
            msg.Body = txtMessage.Text;
            SmtpClient smtp = new SmtpClient("localhost");
            Trace.Write("smtp client created.");
            smtp.Send(msg);
            Trace.Write("smtp message sent.");
            resp = "Your message was sent.";
         catch (Exception ex) 
            Trace.Warn("Smtp Error", ex.Message);
            resp = "There was an error sending your message.";
        
    
    Response.Write(resp);
    Trace.Write("btnSend_Click completed");

【讨论】:

启用了页面跟踪并重新编写了我的代码,但仍然没有出现错误。 @TroyBryant 嗯。假设您知道如何阅读跟踪日志,这可能意味着该函数永远不会触发?尝试在protected void 行的正下方添加Trace.Write("function call"); 并再次运行它。不确定我是否见过静默 smtp 失败,所以也许它只是没有被调用。 @TroyBryant 为上面的示例添加了更多跟踪,以潜在地找出它可能死亡的位置。 我不认为按钮被调用。我对追踪和阅读它并不熟悉。但这很奇怪,我希望我的 smptClient("localhost") 会抛出一个错误,但是我编写的那个或其他任何东西都不会抛出一个错误。【参考方案3】:

您必须像这样指定发件人地址:

msg.From = new MailAddress("noreply@noreply"); // Use a real address, of course

因为您没有遇到异常,所以我想知道btnSend_Click 是否被击中...

其他看点:

    您的txtFrom.Text 是否在回发时被覆盖?您可能会在调试期间硬编码您的电子邮件地址。 尝试使用127.0.0.1 而不是localhost

【讨论】:

以上是关于使用 C# 发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

使用 SmtpClient 通过 C# 发送 HTML 电子邮件

使用 C# 发送加密和签名的电子邮件

使用 C# 发送邮件所需的信息? [关闭]

发送匿名电子邮件 C#

C# 发送邮件3

如何通过 Gmail 使用 C# 发送电子邮件