user3141831
user3141831

Reputation: 99

sending mail in asp.net-also using web config

i am tryiung to create a contact us page ,where the user clicks submit and sends an email to me, i looked at some examples, but they seem to be hard coding their email credentials into the code, i found out that for security m you can store the username and password in the webconfig file, below is my web config code and my default aspx.cs code, could anybody please help me solve the problem, this is the error i get

The remote name could not be resolved: 'smtp.gmail.com,587' Line 45: mailClient.Send(message);

Here is my appsettings and code:

        <appSettings>
        <add key="PFUserName" value="[email protected]"/>
    <add key="PFPassWord" value="mypassword"/>
   <add key="MailServerName" value="smtp.gmail.com,587"/>
    </appSettings>


      using System;
   using System.Data;
   using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
      using System.Web.UI.WebControls.WebParts;
      using System.Web.UI.HtmlControls;
    using System.Net.Mail;
    using System.Web.Configuration;
  using System.Net;

 namespace WebApplication2 
        {
public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)
    {
        SendMail(txtEmail.Text, txtComments.Text);
    }

    private void SendMail(string from, string body)
    {
        string Username = WebConfigurationManager.AppSettings["PFUserName"].ToString();
        string Password = WebConfigurationManager.AppSettings["PFPassWord"].ToString();
        string MailServer = WebConfigurationManager.AppSettings["MailServerName"].ToString();
        NetworkCredential cred = new NetworkCredential(Username, Password);
        string mailServerName = ("smtp.gmail.com,587");



        MailMessage message = new MailMessage(from, Username, "feedback", body);
        SmtpClient mailClient = new SmtpClient("smtp.gmail.com,587");
        mailClient.EnableSsl = true;

        mailClient.Host = mailServerName;
        mailClient.UseDefaultCredentials = false;
        mailClient.Credentials = cred;
        mailClient.Send(message);
        message.Dispose();

    }
}

}

Upvotes: 4

Views: 28986

Answers (5)

Jawwad Ali Khan
Jawwad Ali Khan

Reputation: 17

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

  <system.web>
    ...
  </system.web>
</configuration>

above is web.config and here is back-end code :

using System.Net;
using System.Net.Mail;
using System.Drawing;
using System.Configuration;
using System.Data.SqlClient;
using System.Net.Configuration;

private void Email(string email, string pass, string customername)
{
     SmtpSection smtp = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
     MailMessage mm = new MailMessage(smtp.Network.UserName,email);

     mm.Subject = "Thank you for Registering with us";
     mm.Body = string.Format("Dear {0},<br /><br />Thank you for Registering with <b> Us. </b><br /> Your UserID is <b>{1}</b> and Password is <b> {2} </b> <br /><br /><br /><br /><br /><b>Thanks, <br />The Ismara Team </b>", customername, email, pass);            
     mm.IsBodyHtml = true;

   try
   {            
     using (SmtpClient client = new SmtpClient())
   {
      client.Send(mm);
   }


  }
catch (Exception ex)
  {
     throw new Exception("Something went wrong while sending email !");                
   }
}

system will automatically get the details of smtp from web.config

Upvotes: 0

Sachin
Sachin

Reputation: 40970

You need to set SMTP setting inside the mailSettings configuration in web.config like this

  <system.net>
    <mailSettings>
      <smtp deliveryMethod="Network" from="[email protected]">
        <network host="smtp.gmail.com" port="587" userName="[email protected]" password="mypassword" />
      </smtp>
    </mailSettings>
  </system.net>

Your server name is smtp.gmail.com (remove the 587 from there). 587 is the port that smtp is using. So put this value in host property.

C# Code:

SmtpClient smtpClient = new SmtpClient();
MailMessage mailMessage = new MailMessage();

mailMessage.To.Add(new MailAddress("[email protected]"));
mailMessage.Subject = "mailSubject";
mailMessage.Body = "mailBody";

smtpClient.Send(mailMessage);

Upvotes: 9

Camp
Camp

Reputation: 97

This is what I currently use in my Web Config with some obvious edits

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

in the CS file

using System.Net.Mail;

and

    MailMessage myMessage = new MailMessage();
    //subject line
    myMessage.Subject = Your Subject;
    //whats going to be in the body
    myMessage.Body = Your Body Info;
    //who the message is from
    myMessage.From = (new MailAddress("[email protected]"));
    //who the message is to

    myMessage.To.Add(new MailAddress("[email protected]"));

    //sends the message
    SmtpClient mySmtpClient = new SmtpClient();
    mySmtpClient.Send(myMessage);

for sending.

Upvotes: 2

Dietrich Prg
Dietrich Prg

Reputation: 84

why did you dont compile in a class to make a dll?

Well, i use this code, enjoy :)

MailMessage mail = new MailMessage();
try
{
mail.To.Add(destinatario); // where will send
mail.From = new MailAddress("email that will send", "how the email will be displayed");
mail.Subject = "";
mail.SubjectEncoding = System.Text.Encoding.UTF8;
mail.IsBodyHtml = true;

mail.Priority = MailPriority.High;

// mail body
mail.Body = "email body";

 // send email, dont change //
SmtpClient client = new SmtpClient();

client.Credentials = new System.Net.NetworkCredential("gmail account", "gmail pass"); // set 1 email of gmail and password
client.Port = 587; // gmail use this port
client.Host = "smtp.gmail.com"; //define the server that will send email
client.EnableSsl = true; //gmail work with Ssl

client.Send(mail);
mail.Dispose();
return true;
}
catch
{
mail.Dispose();
return false;
}

Upvotes: 0

Delphi.Boy
Delphi.Boy

Reputation: 1216

Your host name should be "smtp.gmail.com" and then set mailClient.Port to 587.

Upvotes: 0

Related Questions