0

我有一个 ERP 应用程序的要求,(应用程序是在 asp.net4.0 中使用 c# 和 sql server 2005 开发的)

每当我们收到来自客户的订单时,我们都会使用唯一的序列号注册订单(序列号是自动生成的主键)现在我们要发送一个通知,基本上是一封电子邮件,说明您的订单已使用序列号注册:XXXXXX。

我能知道什么是最好的解决方案吗????

我必须通过数据库还是通过应用程序发送电子邮件。

请帮我 !!!

4

5 回答 5

1

您应该使用sp_send_db_mail并且绝对不要尝试在 C# 应用程序中实例化一种或另一种“SMTP”类。原因是多方面的,但主要是:

  • 您需要确保邮件以事务方式传递:调用sp_send_db_mail必须放在注册序列号的同一个数据库事务中。如果注册回滚,则永远不会发送邮件。
  • 您需要确保可靠地传递邮件:如果尝试联系您的传出 SMTP 端点失败,则必须有重试逻辑。呼叫背后的数据库邮件sp_send_db_mail确保了这一点,并且还提供跟踪和日志记录以用于故障排除(哪些电子邮件无法传递以及原因)。
  • 在您的 HTTP 请求完成后,您需要异步调用 SMTP。您不希望您的页面加载变得无响应,因为页面处理正在空闲以响应来自 SMTP 传出中继的响应。sp_send_db_mail这也确保了这一点,实际的邮件传递发生您的事务完成之后,并且不以任何方式涉及 C# 客户端。
于 2012-04-11T21:03:16.320 回答
1

ScottGu 对此有一篇很棒的文章。它有点旧,但他是这样说的:

.NET 2.0 在 System.Net.Mail 代码命名空间中包含更丰富的电子邮件 API 支持。我看到人们提出了一些关于如何开始使用它的问题。以下是如何将电子邮件从“sender@foo.bar.com”发送给多个电子邮件收件人的简单片段(请注意,To a CC 属性是集合,因此可以处理多个地址目标):

MailMessage message = new MailMessage();
message.From = new MailAddress("sender@foo.bar.com");

message.To.Add(new MailAddress("recipient1@foo.bar.com"));
message.To.Add(new MailAddress("recipient2@foo.bar.com"));
message.To.Add(new MailAddress("recipient3@foo.bar.com"));

message.CC.Add(new MailAddress("carboncopy@foo.bar.com"));
message.Subject = "This is my subject";
message.Body = "This is the content";

SmtpClient client = new SmtpClient();
client.Send(message);

System.Net.Mail 从标准的 .NET 配置系统中读取 SMTP 配置数据(因此对于 ASP.NET 应用程序,您可以在应用程序的 web.config 文件中进行配置)。以下是如何配置它的示例:

  <system.net>
    <mailSettings>
      <smtp from="test@foo.com">
        <network host="smtpserver1" port="25" userName="username" password="secret" defaultCredentials="true" />
      </smtp>
    </mailSettings>
  </system.net>
于 2012-04-11T20:11:46.710 回答
0

如果您想以最少的努力发送电子邮件通知,请使用数据库邮件(配置它!)和 sp_send_mail。您将能够发送带有可能查询结果的简单短信作为附件。

如果您需要带有公司徽标图像的丰富 HTML,请构建 .NET Windows 服务(或 ConsoleApp 并安排它)。我建议您使用 Actionmailer.NET Standalone 来使用 MVC 逻辑、模板和 Razor 引擎构建 HTML 消息。使用 Actionmailer.NET Standalone,您可以在不使用 IIS 的情况下拥有它。见: http: //geeksharp.com/2011/07/06/actionmailer-0-6-released/

于 2012-04-13T01:10:13.647 回答
0

你绝对可以同时做(只要 SQL 是 2005+)

看到这个讨论:

SQL 调用 CLR 例程

从您的应用程序中发送邮件非常简单:

System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
message.To.Add("luckyperson@online.microsoft.com");
message.Subject = "This is the Subject line";
message.From = new System.Net.Mail.MailAddress("From@online.microsoft.com");
message.Body = "This is the message body";
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("yoursmtphost");
smtp.Send(message);
于 2012-04-11T20:09:57.683 回答
0

您绝对可以使用 C# 发送电子邮件。这是关于如何做到这一点的非常全面的文章:

http://www.emailarchitect.net/easeendmail/kb/csharp.aspx

基本上,我所做的是创建一个包装器函数,它使使用为我的环境设计的自定义设置发送电子邮件变得非常简单。例如,您可以创建一个接受新序列号的方法,并根据该序列号查找所有信息。然后,您可以只传递新值并将自动格式化的电子邮件发送给客户。

于 2012-04-11T20:06:55.973 回答