带有Button_Click事件的C#电子邮件

时间:2018-04-09 01:49:58

标签: c# asp.net email

我正在尝试创建一个发送电子邮件到Gmail帐户的Button_Click事件。这是我得到的错误:

无法从传输连接中读取数据:net_io_connectionclosed。

指出第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);
}

知道我哪里出错了吗?

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码作为小型测试。尝试以最少的选项发送电子邮件然后添加其他选项,如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密码。

请同时阅读本教程。 http://csharp.net-informations.com/communications/csharp-smtp-mail.htm

答案 1 :(得分:0)

有时很难对用户名和密码(即凭据)进行编码。 您可以做的是,可以仅在一次中将这些凭据添加到 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>

请注意,您必须根据自己的gmail帐户更改主机。我不确定主机是否正确。我正在使用Outlook发送电子邮件,因此主机将是 smtp-mail.outlook.com

这是您的web.config文件如何一次具有一个位置定义的所有必要连接凭据的方式。您不必每次在应用程序中使用“电子邮件”功能时都使用它。

 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

此处的关键点是访问发件人的电子邮件地址和收件人的电子邮件地址。请注意,我已经使用(SmtpSection)ConfigurationManager.GetSection(“ system.net/mailSettings/smtp”); ,它将导航您的web.config文件并搜索其中可用的层次结构-抓取电子邮件地址,如果没有电子邮件地址,则失败。

希望这会有所帮助。编码愉快!