【发布时间】:2010-11-25 17:27:55
【问题描述】:
我在 ASP.NET 中开发了一个 Web 应用程序。我想在我的应用程序中集成电子邮件解决方案。
这是我的核心要求: 1. 用户在网站注册后立即发送电子邮件。 2. 向所有注册用户发送通知邮件。
对于第二个要求,我们可以将其视为批量电子邮件,因为我们正在向所有用户发送邮件。
请给我最好的解决方案。我们需要设置 SMTP 服务器吗?
【问题讨论】:
标签: asp.net email integration
我在 ASP.NET 中开发了一个 Web 应用程序。我想在我的应用程序中集成电子邮件解决方案。
这是我的核心要求: 1. 用户在网站注册后立即发送电子邮件。 2. 向所有注册用户发送通知邮件。
对于第二个要求,我们可以将其视为批量电子邮件,因为我们正在向所有用户发送邮件。
请给我最好的解决方案。我们需要设置 SMTP 服务器吗?
【问题讨论】:
标签: asp.net email integration
是的,您需要有一个 SMTP 服务器,尽管它不必与网络服务器设置在同一台机器上(它甚至可以由第三方服务提供)。
我个人建议您创建一个电子邮件队列系统 - 而不是直接使用 System.Net 命名空间的 ASP.NET 脚本使用特定的 SMTP 服务器创建和发送电子邮件,您有一个数据库表(即主题,正文,收件人地址)。
然后一个单独的作业从该表中读取并发送电子邮件。单独表/作业的原因是:
它避免了 SMTP 操作 发生在 HTTP 事务中 - 如果 SMTP 服务器过载或 更糟糕的是,不可用,您的网页将 似乎挂起。
如果 SMTP 服务器是临时的 不可用或过载,你有 添加重试列的能力 你的桌子。
如果您的 SMTP 服务器限制了 可以发送的电子邮件数量 一个时间段(垃圾邮件预防)你 可以将您的工作配置为仅 尝试发送前 x 封电子邮件 每次互动。
如果您想发送延迟的电子邮件, 只需添加一个 “发送后”列
【讨论】:
通常不会。确保 Web 服务器在系统上安装了 SMTP 服务,并且您可以使用 system.net.mail 类。这应该可以满足您所有基本的电子邮件发送需求。
如果您开始遇到大量注册用户的问题或批量邮件中有太多密件抄送地址的问题,那么您将需要研究一个基本的邮件管理器(可以将您的批量邮件发送到爆发)或成熟的电子邮件服务器。
【讨论】:
我发现将 System.Net.Mail 库包装在帮助程序类中是最简单的方法,这样我就可以将我的 EmailHelper 类简单地包含在任何需要能够发送电子邮件的项目中。
这是我在 EmailHelper 中反刍的 Send() 方法。您可以看到它非常易于使用。
public bool Send() {
bool emailSent = false;
if (_to.Count > 0) {
MailMessage msg = new MailMessage();
SmtpClient mail = new SmtpClient("your.email.host");
msg.From = new MailAddress(_fromAddress, _fromName);
foreach (String to in _to) {
msg.To.Add(new MailAddress(to));
}
foreach (String cc in _cc) {
msg.CC.Add(new MailAddress(cc));
}
msg.Subject = _subject;
msg.Body = _body;
msg.IsBodyHtml = true;
mail.Send(msg);
emailSent = true;
}
return emailSent;
}
请注意,_fromAddress、_fromName 等只是 EmailHelper 类的私有属性。私有属性 _to 和 _cc 都是字符串类型的列表。
【讨论】:
我在 asp.net 中找到了最简单的方法,并且它在很多地方都可以使用。我是 System.Net.Mail 库,用于发送电子邮件。
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
MailMessage msg = new MailMessage();
msg.From = new MailAddress("fromEmailAddress@domain.com");
msg.To.Add("toEmailAddress@domain.com);
msg.IsBodyHtml = true;
msg.Subject = "Example Email";
msg.Priority = MailPriority.High;
msg.Body = "Hello world...";
smtp.Host = "smtp.domainName";
smtp.EnableSsl = true;
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = "fromEmailAddress@domain.com";
NetworkCred.Password = "password";
smtp.UseDefaultCredentials = true;
smtp.Credentials = NetworkCred;
try
{
ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
smtp.Send(msg);
}
catch (Exception ex)
{}
我希望这段代码对你有用...
祝你好运,编码愉快:)
【讨论】: