How to configure SMTP settings in web.config
Asked Answered
E

4

38

I'm trying to fix an email issue with an inherited website and don't have access to the code (i.e. just the compiled files). This site needs to be hosted on a new web server having a different SMTP server.

Upon decompiling bits of the code I can see emails are sent using method like below in code snippet and SMTP is set as smtpMail.SmtpServer="localhost" but my new webserver's SMTP server is "relay.tagadab.com" how can we possibly configure this in web.config so that localhost is taken as "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

I added this section in my web.config but that does not make a difference

<system.net>
    <mailSettings>
        <smtp>
            <network host="relay.tagadab.com" port="25" />
        </smtp>
     </mailSettings>
</system.net>
Entomologize answered 7/10, 2013 at 19:36 Comment(2)
Just configure IIS so that SMTP localhost fowards mail to relay.tagadab.com.Xanthochroism
@nunzabar can you kindly give me an example how can we forward itEntomologize
G
84

By setting the values <mailSettings> section of the in the web.config you can just new up an SmtpClient and the client will use those settings.

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

Web.Config file:

<configuration>
 <system.net>
        <mailSettings>
            <smtp from="[email protected]">
                <network host="smtp.gmail.com" 
                 port="587" 
                 userName="[email protected]" 
                 password="yourpassword" 
                 enableSsl="true"/>
            </smtp>
        </mailSettings>
</system.net>
</configuration>

C#:

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

However, if authentication is needed, I would suggest using a configuration provider that is more secure for usernames and passwords and settings them with a NetworkCredentials object.

C#:

SmtpClient smtpClient = 
    new SmtpClient(_configuration.SmtpHost, _configuration.SmtpPort);
smtpClient.Credentials = 
    new NetworkCredential(_configuration.EmailUsername, _configuration.EmailPassword)
smtpClient.Send(msgMail);
Garniture answered 11/7, 2015 at 11:14 Comment(4)
What about the C# side? Code sample pls?Nedanedda
Code sample: SmtpClient smtpClient = new SmtpClient(); smtpClient.Send(msgMail);Extravaganza
@Sanjay kumar does it still work? I am receiving the following error when trying to use gmail with smtp: "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required.".Vinnie
@Vinnie you need to enable less secure apps in GmailConfabulate
B
8

I don't have enough rep to answer ClintEastwood, and the accepted answer is correct for the Web.config file. Adding this in for code difference.

When your mailSettings are set on Web.config, you don't need to do anything other than new up your SmtpClient and .Send. It finds the connection itself without needing to be referenced. You would change your C# from this:

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);
Branson answered 5/2, 2017 at 20:33 Comment(1)
Thank you for the explanation, I almost didn't use the code from the answer above because I didn't understand how it was going to work in my controller. Much appreciated.Ginsberg
X
5

Set IIS to forward your mail to the remote server. The specifics vary greatly depending on the version of IIS. For IIS 7.5:

  1. Open IIS Manager
  2. Connect to your server if needed
  3. Select the server node; you should see an SMTP option on the right in the ASP.NET section
  4. Double-click the SMTP icon.
  5. Select the "Deliver e-mail to SMTP server" option and enter your server name, credentials, etc.
Xanthochroism answered 7/10, 2013 at 21:18 Comment(2)
I already tried to add a section in web.config (please see my question )but that does not make a difference. I see exactly the same thing in the IIS when I open SMTP emailEntomologize
Looking a little closer, you have to determine how SmtpMail is instantiated. Web.config will only be referenced if you use the default constructor.Xanthochroism
B
-1

Screenshot of my web.config email settings

This is the actual code in my web.config file sending YetAnotherForum forum emails and also the same code I use in StarterTrack helpDesk.

Bur answered 13/2, 2023 at 17:41 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.