Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.NET发送电子邮件_C#_Email_Smtp - Fatal编程技术网

C# 使用.NET发送电子邮件

C# 使用.NET发送电子邮件,c#,email,smtp,C#,Email,Smtp,我有以下代码,但我得到一个异常,smtp主机未定义。如果我从VisualStudio在本地机器上运行此程序并进行测试,我需要做什么才能从我的机器发送电子邮件。我必须打开一些Windows服务吗 private void SendMailToAdminToApprove(string email_, string name_) { MailMessage msg = new MailMessage(); msg.From = new MailAddress("address@dom

我有以下代码,但我得到一个异常,smtp主机未定义。如果我从VisualStudio在本地机器上运行此程序并进行测试,我需要做什么才能从我的机器发送电子邮件。我必须打开一些Windows服务吗

private void SendMailToAdminToApprove(string email_, string name_)
{
    MailMessage msg = new MailMessage();
    msg.From = new MailAddress("address@domain.com", "Person's Name");
    msg.To.Add(new MailAddress("a@gmail.com", "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");
    }
}

您需要将SMTP主机设置为指向实际的SMTP服务器。一种选择是在自己的机器上运行SMTP服务,但也可以指向ISP的服务器

编辑


正如pcampbell和Skeolan提到的,实际值应该进入app.config。我不确定localhost是否是例外:这取决于您是否希望选择不运行本地服务器。

您需要在此处指定SMTP主机:

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

SmtpClient c = new SmtpClient(smtpHost);

您需要定义SMTP中继:

SmtpClient c = new SmtpClient("relay.yourdomain.com");
或者,如果您正在本地运行继电器:

SmtpClient c = new SmtpClient("localhost");

您应该更改此部分:

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

您需要指定用于发送此邮件的SMTP服务器。如果您在本地安装SMTP服务器,这可能是localhost,但如果不是这样,则需要适当设置一个传出邮件服务器。

以下是我使用C#发送电子邮件的代码。我还注释了在需要时将其发送到本地文件的代码

        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;

确保在完成后处理邮件消息。更好的是,将实际的stmpHost字符串提取到app.config或web.config中,以便可以针对不同的部署对其进行修改。然后,您可以使用“localhost”进行开发(假设您正在本地计算机上运行[virtual?]smtp服务),但仍然可以选择稍后指定外部电子邮件服务器,而无需重新编译。一定要将其放在app.config中。但是,没有必要假装它是一个连接字符串。只需设置或使用传统的API即可。