C# 使用.NET发送电子邮件
我有以下代码,但我得到一个异常,smtp主机未定义。如果我从VisualStudio在本地机器上运行此程序并进行测试,我需要做什么才能从我的机器发送电子邮件。我必须打开一些Windows服务吗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
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即可。