在ASP.NET 2.0中发送电子邮件

时间:2009-09-15 10:32:10

标签: asp.net

我试图实现发送邮件的代码。我已经尝试了以下程序。

配置

<configuration>
  <!-- Add the email settings to the <system.net> element -->
  <system.net>
    <mailSettings>
      <smtp>
        <network 
             host="localhost" 
             port="25"
             userName="?"
             password="?" />
      </smtp>
    </mailSettings>
  </system.net>

HTML

<table border="0">
    <tr>
        <td><b>Your Email:</b></td>
        <td><asp:TextBox runat="server" ID="UsersEmail" Columns="30"></asp:TextBox></td>
    </tr>
    <tr>
        <td><b>Subject:</b></td>
        <td><asp:TextBox runat="server" ID="Subject" Columns="30"></asp:TextBox></td>
    </tr>
    <tr>
        <td colspan="2">
            <b>Body:</b><br />
            <asp:TextBox runat="server" ID="Body" TextMode="MultiLine" Columns="55" Rows="10"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td colspan="2" align="center">
            <asp:Button runat="server" ID="SendEmail" Text="Send Feedback" />
        </td>
    </tr>
</table> 

代码隐藏

protected Sub SendEmail_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SendEmail.Click
    '!!! UPDATE THIS VALUE TO YOUR EMAIL ADDRESS'
    Const ToAddress As String = "you@youremail.com"

    '(1) Create the MailMessage instance'
    Dim mm As New MailMessage(UsersEmail.Text, ToAddress)

    '(2) Assign the MailMessage's properties'
    mm.Subject = Subject.Text
    mm.Body = Body.Text
    mm.IsBodyHtml = False

    '(3) Create the SmtpClient object'
    Dim smtp As New SmtpClient

    '(4) Send the MailMessage (will use the Web.config settings)'
    smtp.Send(mm)
End Sub 

但它不起作用。错误传输无法连接到服务器。

3 个答案:

答案 0 :(得分:5)

您正在使用代码的这一行中的默认(无参数)构造函数来实例化您的SmtpClient对象:

'(3) Create the SmtpClient object'
Dim smtp As New SmtpClient

由于发送电子邮件要求您有权访问有效的SMTP服务器,因此该构造函数将尝试使用web.config文件中定义的SMTP服务器设置来实例化对象,特别是在System.Net部分中。以下是一个例子:

<system.net>
  <mailSettings>
    <smtp>
      <network host="[your smtp server address]" port="[your smtp port - usually 25]"/>
    </smtp>
  </mailSettings>
</system.net>

如果缺少此选项,则您的SmtpClient对象没有要连接的SMTP服务器。这可能会导致您遇到错误消息。

要解决此问题,您可以将此部分添加到web.config文件中,为要连接的SmtpClient对象指定有效的SMTP服务器,也可以在实例化时直接省略和硬编码服务器地址。 SmtpClient对象利用其中一个重载的构造函数接受SMTP服务器地址/端口号作为参数。有关构造函数的详细信息,请参阅here

这方面的一个例子是:

'(3) Create the SmtpClient object'
Dim smtp As New SmtpClient("[your SMTP server address]", 25)

但请注意,尽管您可以在SmtpClient的构造函数中指定SMTP服务器地址/端口,但在web.config文件中配置这些设置并在代码中使用默认(无参数)构造函数通常被认为是更好的做法。 。使用web.config方法可以更新您使用的SMTP服务器地址/端口,而无需重新编译代码。

答案 1 :(得分:0)

web.config中的MailSettings是什么?我说你的主要问题可能是你给它一个无效的主机或端口。

答案 2 :(得分:0)

如果您想使用 gMail 帐户发送它。请更改用户名和密码。 你的web.config应该有以下设置:

   <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="username@gmail.com">
        <network defaultCredentials="false" host="smtp.gmail.com" port="587" userName="username@gmail.com" password="xxxxxxxxxxxx" />
      </smtp>
    </mailSettings>
  </system.net>

您的SendMailFunction应如下所示:

protected void SendMail(String strFrom, String strSubject, String strTo, String  strBody)
{
    MailMessage mm = new MailMessage();


    mm.From = strFrom;

    mm.Subject = strSubject ;
    mm.To.Add(strTo);

    mm.Body = strBody;
    SmtpClient smtp = new SmtpClient();
    smtp.EnableSsl = true;

    smtp.Send(mm);

} 

修改:请检查this SO答案,了解有关在web.config中加密SMTP设置的信息