【问题标题】:Asp.net sending emailAsp.net 发送电子邮件
【发布时间】:2016-09-15 09:34:52
【问题描述】:

当新用户使用 asp.net c# 在我的网站上注册时,如何发送激活电子邮件?我已经尝试了描述的步骤 this link 但我遇到了这个错误:

System.IO.IOException:无法从传输连接读取数据:net_io_connectionclosed。

是否有任何解决方案或任何其他方式发送电子邮件?

这是我的代码

using (MailMessage mm = new MailMessage("sender@gmail.com", txtEmail.Text))
{
    mm.Subject = "Account Activation";
    string body = "Hello " + txtUsername.Text.Trim() + ",";
    body += "<br /><br />Please click the following link to activate your account";
    body += "<br /><a href = '" + Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "'>Click here to activate your account.</a>";
    body += "<br /><br />Thanks";
    mm.Body = body;
    mm.IsBodyHtml = true;
    SmtpClient smtp = new SmtpClient();
    smtp.Host = "smtp.gmail.com";
    smtp.EnableSsl = true;
    NetworkCredential NetworkCred = new NetworkCredential("sender@gmail.com", "<password>");
    smtp.UseDefaultCredentials = true;
    smtp.Credentials = NetworkCred;
    smtp.Port = 587;
    smtp.Send(mm);
}   

建议的副本没有解决问题。我已经在使用 587 端口了。

【问题讨论】:

  • 1) 你需要展示一些代码。 2) 您需要与 ACTUAL EMAIL SERVER 对话,并且该服务器需要能够接受来自您的连接。基于此错误net_io_connectionclosed,听起来这不会发生。
  • 查看此链接以了解有关“net_io_connectionclosed”错误的详细信息:SmtpException: Unable to read data from the transport connection: net_io_connectionclosed
  • 我已经编辑了帖子,请看看是不是错了?? @paulsm4
  • 您的代码不一定是问题 电子邮件服务器可能会非常挑剔他们将与谁交谈,以及他们将如何与您交谈。 Juan Pablo Melgarejo 的回复通过使用 Google 的电子邮件服务器 smtp.gmail.com 绕过了该问题,建议: 1) 联系您的电子邮件管理员。确保您的设置正确;检查他的电子邮件日志是否有错误。 2) 试试谷歌邮箱:emailarchitect.net/easendmail/kb/csharp.aspx?cat=2
  • smtp.UseDefaultCredentials = true; 应该是 smtp.UseDefaultCredentials = false; - 因为你只是给了它非默认凭据

标签: c# html asp.net


【解决方案1】:

请看下面的代码:

public static class email_utility
{
    public static async Task<bool> send_email(this string body, string subject, string email, int try_count)
    {
        return await Task.Run(() =>
        {
            var cli = new SmtpClient();
            using (var message = new MailMessage(config.sender_email, email))
            {
                message.Subject = subject;
                message.SubjectEncoding = UTF8Encoding.UTF8;
                message.Body = body;
                message.BodyEncoding = UTF8Encoding.UTF8;
                message.DeliveryNotificationOptions = DeliveryNotificationOptions.Never;
                for (var count = 0; count < try_count; ++count)
                {
                    try
                    {
                        lock (config.sender_email)
                        {
                            cli.Send(message);
                            return true;
                        }
                    }
                    catch (SmtpFailedRecipientsException)
                    {
                        return false;
                    }
                    catch (SmtpException)
                    {
                        Thread.Sleep(config.send_timeout);
                    }
                }
                return false;
            }
        });
    }
}

【讨论】:

    【解决方案2】:

    试试这个,它工作得很好,你只需要更改 var smtp = newSMTPCient 之前的字段。

    using System.Net;
    using System.Net.Mail;
    
    var fromAddress = new MailAddress("from@gmail.com", "From Name");
    var toAddress = new MailAddress("to@example.com", "To Name");
    const string fromPassword = "fromPassword";
    const string subject = "Subject";
    const string body = "Body";
    
    var smtp = new SmtpClient
               {
                   Host = "smtp.gmail.com",
                   Port = 587,
                   EnableSsl = true,
                   DeliveryMethod = SmtpDeliveryMethod.Network,
                   UseDefaultCredentials = false,
                   Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
               };
    using (var message = new MailMessage(fromAddress, toAddress)
                         {
                             Subject = subject,
                             Body = body
                         })
    {
        smtp.Send(message);
    }
    

    【讨论】:

    • 仅供参考,它对您完美运行的原因(除了您的代码是正确的!)是 1)您使用 GMail 作为电子邮件中继,2)您碰巧没有您在“发件人”地址中指定的有效 gmail 帐户,3) 您正在使用端口 587 和 TLS 加密的 SMTP。 OP 需要做的第一件事是与他的网络管理员合作,并查看他们的“首选”电子邮件服务器可能存在的配置/权限问题。
    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 2012-07-27
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2011-05-24
    相关资源
    最近更新 更多