C#带有按钮点击事件的电子邮件

C#带有按钮点击事件的电子邮件,c#,asp.net,email,C#,Asp.net,Email,我正在尝试创建一个按钮点击事件,向gmail帐户发送电子邮件。这就是我得到的错误: 无法从传输连接读取数据:网络io连接已关闭 它指出了第63行,它是: client.Send(mail); 代码如下: protected void Button2_Click(object sender, EventArgs e) { System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(); SmtpClient

我正在尝试创建一个按钮点击事件,向gmail帐户发送电子邮件。这就是我得到的错误:

无法从传输连接读取数据:网络io连接已关闭

它指出了第63行,它是:

client.Send(mail);
代码如下:

protected void Button2_Click(object sender, EventArgs e)
{
    System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
    SmtpClient client = new SmtpClient();
    client.Port = 465;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.UseDefaultCredentials = false;
    client.Host = "smtp.gmail.com";
    mail.IsBodyHtml = true;
    mail.To.Add(new MailAddress("yourclassroomconnection@gmail.com"));
    mail.From = new MailAddress("yourclassroomconnection@gmail.com");
    mail.Subject = "New Order";
    string bodyTemplate = Label2.Text;
    mail.Body = bodyTemplate;
    client.Send(mail);
}

知道我哪里出错了吗?

您可以使用下面的代码作为一个小测试。尝试用最少的选项发送电子邮件。然后添加其他选项,如html支持。因此,当你在试验新事物时,你可以缩小问题的范围

       try {
        MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

            mail.From = new MailAddress("your_email_address@gmail.com");
            mail.To.Add("to_address");
            mail.Subject = "Test Mail";
            mail.Body = "This is for testing SMTP mail from GMAIL";

            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password");
            SmtpServer.EnableSsl = true;

            SmtpServer.Send(mail);

        } catch (Exception ex)
        {

        }
您需要生成特定于应用程序的密码,并在此处使用它,而不是您的gmail密码

也请阅读本教程。

硬编码用户名和密码(即凭据)有时可能会令人沮丧。 您可以做的是,您只能在web.config文件中添加这些凭据一次。你可以走了。这是更好的解决方案

web.config文件代码如下:

<configuration> 
  <appSettings>
   <add key="receiverEmail" value ="ReceiverEmailAddressHere"/>
  </appSettings>
  </appSettings> 
  <system.net>
  <mailSettings>
  <smtp deliveryMethod="Network" from="yourclassroomconnection@gmail.com"> 
    <network host="smtp.gmail.com" port="587" enableSsl="true" 
    userName="YourActualUsername" password="YourActualPassword"/>
  </smtp>
</mailSettings>
</system.net>
</configuration>
这里的关键是访问发件人的电子邮件地址和收件人的电子邮件地址。注意,我使用了(SmtpSection)ConfigurationManager.GetSection(“system.net/mailSettings/smtp”)这将导航您的web.config文件并搜索其中可用的层次结构-获取电子邮件地址,如果未获取电子邮件地址则失败


希望这有帮助。快乐编码

你试过587端口了吗?没有,但我会的。我不知道从何处开始解决问题OK我尝试了一下,但出现了以下错误:SMTP服务器需要安全连接,或者客户端未通过身份验证。服务器响应为:5.7.0必须首先发出STARTTLS命令。e46sm13555277qtc.27-端口为587的GSMTP尝试此操作。启用双因素身份验证,然后生成特定于应用程序的密码。使用新生成的密码通过SMTP进行身份验证。你能帮我解决这个问题吗?你有点失去了我……我对这很陌生这到底有什么帮助?
Asp.net
中的
MessageBox
是什么?实际上,只有你提供的链接可能会有帮助,作为评论。我正在签出链接。该链接也使用MessageBox
 protected void btnSendMail_Click(object sender, EventArgs e)
{
 MailMessage msg = new MailMessage();
 // get the receiver email address from web.config
 msg.To.Add(ConfigurationManager.AppSettings["receiverEmail"]);


 // get sender email address path from web.config file
 var address = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
 string emailAddress = address.Network.UserName;
 string password = address.Network.Password;
 NetworkCredential credential = new NetworkCredential(emailAddress, password);
 msg.Subject = " Subject text here "
}
  SmtpClient client = new SmtpClient();
  client.EnableSsl = true;  
  client.Send(msg);   // send the message