1

我必须将电子邮件通知添加到客户端服务器应用程序。

当用户在客户端 UI 上执行某些特定操作时会发生通知。

如果我有一个中间层或在服务器上运行的服务,我可以想象如何做到这一点:

1)我只是创建一个带有“待处理通知”的数据库表

2)当用户执行生成通知的操作时,我将记录添加到表中

3)服务器端我会不断尝试发送这些邮件并在发送成功后将它们从表中删除

现在我现在不能这样做,我计划稍后添加服务,但现在我必须走快速而肮脏的方式。

所以不知何故,我想的是实现这样的事情:

1)当客户端发生通知价值事件时,同一个客户端(我的 exe)尝试发送通知,失败时会将通知记录在“待处理通知”表中(失败可能是因为缺乏互联网连接或任何其他问题)

2)我添加了一个计时器,它可以在任何客户端机器上工作,以检查待处理的通知。如果有任何客户端将尝试发送电子邮件(使用事务:我将一个字段标记为“TryngToSendFromClientX”,如果失败,我将该字段重置为 NULL)

我认为这种方法会起作用,它有明显的局限性(如果失败后没有人登录系统,则不会发送任何通知 - 如果服务“关闭”也是如此)。但是你能评论一下这种方法并提出更好的方法吗?

附加说明(为了更好地理解场景):

a) 注意:所有通知都是从同一个电子邮件帐户发送的。

b) 我不需要跟踪谁发送了电子邮件。

c)现在创建服务的问题是它基本上会使部署复杂化,我需要创建用于监控服务状态的工具。我将来会做的事情,但不是现在,将来我计划向服务添加更多功能(不仅仅是发送通知),所以在这种情况下创建它更有意义。

d) 我将使用 Indy 组件和 SMTP 服务器发送电子邮件。

4

5 回答 5

2

如果您现在不愿意创建服务,我认为您会被您描述的场景所困扰。尽管您可以采取一些措施来规避在仍有待处理消息时没有用户启动客户端的问题。

您可以添加一个命令行实用程序(或 bepe4711 建议的命令行参数),它只会检查待处理的消息并尝试发送它们。

将此命令行实用程序添加到注册表中的 StartUp 文件夹或 Run 项。这种方式至少会在计算机重新启动时发送消息,即使用户没有启动您的应用程序。

添加计划任务以每天至少运行一次此实用程序。可以通过代码或安装程序添加计划任务。

如果您两者都做,您将只需要担心那些永远不会再次启动计算机的用户的未决消息。

于 2010-06-24T07:59:56.363 回答
1

也许您可以向您的客户端添加一个参数,使其只查看待处理的通知并发送它们。在此之后,它可以自行终止。它就像某种服务一样。

然后在服务器上安装客户端并每 x 分钟启动一次。

于 2010-06-24T07:40:01.453 回答
1

我做的事情与您描述的方法非常相似。我需要调用网络服务,而不是发送电子邮件。我的应用程序安装在几台笔记本电脑上,它们通常没有连接到任何网络。

当我的应用程序引发异常时,我会收集各种信息,包括用户评论和屏幕截图。然后我尝试将其发送到我们的网络服务。如果碰巧网络服务不可用。(即未连接到 Internet 或 Web 服务已关闭)我将结果写入磁盘上用户配置文件 (App_Data) 目录中的 XML 文件。

一个主要区别是我不轮询以检查服务器是否已启动。我尝试在应用程序启动时再次发送它们。

于 2010-06-24T09:52:30.653 回答
0

如果两个系统都在 Windows 上运行,请查看 MS Message Queue。它旨在向并非总是在线的系统发送通知。我是在 .Net 中完成的,已经实现了易于使用的类。不确定德尔福。

于 2010-06-24T08:49:55.070 回答
0

最新版本的 Windows 使用了更多的 Windows 任务计划程序,现在可以在事件上触发任务(即当连接网卡时......)。即使没有人登录,您也可以编写一个单独的实用程序来尝试发送待处理的通知。

于 2010-06-24T10:51:22.367 回答