leora
leora

Reputation: 196429

Sending email using .NET

I have the following code but I am getting an exception that a smtp host is not defined. If I am running this and testing on my local machine from visual studio, what do I need to do to be able to send email from my machine. Do I have to turn on some Windows service?

private void SendMailToAdminToApprove(string email_, string name_)
{
    MailMessage msg = new MailMessage();
    msg.From = new MailAddress("[email protected]", "Person's Name");
    msg.To.Add(new MailAddress("[email protected]", "Adam"));
    msg.Subject    = "Message Subject";
    msg.Body       = "Mail body content";
    msg.IsBodyHtml = true;
    msg.Priority   = MailPriority.High;
    try
    {
        SmtpClient c = new SmtpClient();
        c.Send(msg);
    }
    catch (Exception ex)
    {
        Console.Write("T");
    }
}

Upvotes: 0

Views: 1117

Answers (5)

p.campbell
p.campbell

Reputation: 100547

You'll need to specify the SMTP host here:

string smtpHost = "localhost";
//or go to your config file
smtpHost = ConfigurationManager.AppSettings["MySmtpHost"].ToString();

SmtpClient c = new SmtpClient(smtpHost);

Upvotes: 7

Steven Sudit
Steven Sudit

Reputation: 19620

You need to set the SMTP host to point to an actual SMTP server. One option is to run the SMTP service on your own machine, but you could also point to your ISP's server.

edit

As pcampbell and Skeolan mentioned, the actual value should go into app.config. I'm not sure if localhost would be an exception: it would depend on whether you want the option of not running a local server.

Upvotes: 8

Kinze
Kinze

Reputation: 3970

Here is the code I use for sending email with C#. I also commented out code for sending it to a file locally if you need it.

        SmtpClient smtp = new SmtpClient(smtpServer, portNumber);
        // Disable SSL when saving to directory.
        smtp.EnableSsl = true;
        smtp.Credentials = new NetworkCredential(mailFrom, password);

        // Set mail to be delivered to a folder
        //smtp.PickupDirectoryLocation = @"C:\mail\Send";
        //smtp.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;

Upvotes: 0

Reed Copsey
Reed Copsey

Reputation: 564323

You should change this section:

 SmtpClient c = new SmtpClient();
 // Either specify a SMTP server above, or set c.Host
 c.Send(msg);

You need to specify which SMTP server is going to be used for sending this message. If you install a SMTP server locally, this could be localhost - but otherwise, you'll need to have an outgoing mail server set appropriately.

Upvotes: 1

Justin Niessner
Justin Niessner

Reputation: 245389

You need to define the SMTP relay:

SmtpClient c = new SmtpClient("relay.yourdomain.com");

or if you're running the relay locally:

SmtpClient c = new SmtpClient("localhost");

Upvotes: 1

Related Questions