我试图实现发送邮件的代码。我已经尝试了以下程序。
配置
<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
但它不起作用。错误传输无法连接到服务器。
答案 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设置的信息