如何在web.config中配置SMTP设置

38

我正在尝试修复一个继承的网站上的电子邮件问题,但无法访问代码(即只有编译后的文件)。该网站需要托管在一个新的 Web 服务器上,该服务器具有不同的 SMTP 服务器。

通过反编译代码片段,我可以看到电子邮件是使用以下方法发送的,SMTP 被设置为 smtpMail.SmtpServer="localhost",但我的新 Web 服务器的 SMTP 服务器是 "relay.tagadab.com"。我们如何在 web.config 中配置以使 localhost 被视为 "relay.tagadab.com"?

Imports Microsoft.VisualBasic, System.Web.Mail

Shared Sub SendMail(ByVal ToAdd, ByVal FromAdd, ByVal Message, ByVal Subject)

    Dim msgMail As New MailMessage()

    msgMail.To = ToAdd
    msgMail.From = FromAdd
    msgMail.Subject = Subject
    msgMail.Headers.Add("X-Mailer", "ASP.NET")

    msgMail.BodyFormat = MailFormat.Text
    msgMail.Body = Message
    'SmtpMail.SmtpServer = "mail.the-radiator.com"
    SmtpMail.SmtpServer = "localhost"
    SmtpMail.Send(msgMail)

End Sub

我在web.config中添加了这个部分,但是没有任何变化

<system.net>
    <mailSettings>
        <smtp>
            <network host="relay.tagadab.com" port="25" />
        </smtp>
     </mailSettings>
</system.net>

1
只需配置IIS,使SMTP本地主机将邮件转发到relay.tagadab.com。 - mr_plum
@nunzabar,您能否给我一个示例,说明我们如何进行转发? - rumi
4个回答

84

通过在web.config中的<mailSettings>部分设置值,您可以新建一个SmtpClient并且客户端将使用这些设置。

https://learn.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient.-ctor?view=net-6.0#system-net-mail-smtpclient-ctor

Web.Config文件:

<configuration>
 <system.net>
        <mailSettings>
            <smtp from="yourmail@gmail.com">
                <network host="smtp.gmail.com" 
                 port="587" 
                 userName="yourmail@gmail.com" 
                 password="yourpassword" 
                 enableSsl="true"/>
            </smtp>
        </mailSettings>
</system.net>
</configuration>

C#:

SmtpClient smtpClient = new SmtpClient();
smtpClient.Send(msgMail);

然而,如果需要身份验证,我建议使用更安全的配置提供程序来保护用户名、密码和设置,并使用NetworkCredentials对象进行设置。

C#:

SmtpClient smtpClient = 
    new SmtpClient(_configuration.SmtpHost, _configuration.SmtpPort);
smtpClient.Credentials = 
    new NetworkCredential(_configuration.EmailUsername, _configuration.EmailPassword)
smtpClient.Send(msgMail);

4
C#方面怎么样?请提供代码示例。 - Jack
7
代码示例:SmtpClient smtpClient = new SmtpClient(); smtpClient.Send(msgMail);翻译:这段代码创建了一个名为“smtpClient”的对象,并使用该对象发送了一个电子邮件消息(msgMail)。 - Dilhan Jayathilake
1
@Sanjay Kumar还能用吗?当我尝试使用SMTP与Gmail进行通信时,我收到了以下错误消息:“SMTP服务器需要安全连接或客户端未经身份验证。服务器响应为:5.5.1需要身份验证。”。 - dpant
@dpant 你需要在Gmail中启用不安全的应用程序。 - Quintin Botes

8

我的声望不足以回答ClintEastwood的问题,而已经被接受的答案对于Web.config文件是正确的。添加这个代码区别。

当你的mailSettings设置在Web.config上时,你不需要做任何其他事情,只需新建SmtpClient并使用.Send即可。它会自动找到连接,无需引用。您可以将C#更改为以下内容:

SmtpClient smtpClient = new SmtpClient("smtp.sender.you", Convert.ToInt32(587));
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("username", "password");
smtpClient.Credentials = credentials;
smtpClient.Send(msgMail);  

To this:

SmtpClient smtpClient = new SmtpClient();
smtpClient.Send(msgMail);

1
谢谢您的解释,我差点没有使用上面答案中的代码,因为我不理解它在我的控制器中如何工作。非常感谢。 - Jamie

5

将IIS设置为将您的邮件转发到远程服务器。 具体细节因IIS版本而异。 对于IIS 7.5:

  1. 打开IIS管理器
  2. 如有需要,请连接到您的服务器
  3. 选择服务器节点; 在ASP.NET部分的右侧应该会看到一个SMTP选项
  4. 双击SMTP图标。
  5. 选择“将电子邮件传递到SMTP服务器”选项并输入您的服务器名称,凭据等。

我已经尝试在web.config中添加一个部分(请参见我的问题),但这并没有什么区别。当我打开SMTP电子邮件时,在IIS中看到完全相同的东西。 - rumi
仔细观察,您必须确定如何实例化 SmtpMail。只有在使用默认构造函数时,才会引用 Web.config。 - mr_plum

-1

Screenshot of my web.config email settings

这是我在web.config文件中实际使用的代码,用于发送YetAnotherForum论坛电子邮件,也是我在StarterTrack HelpDesk中使用的相同代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接