我有一个网站让用户批准其他用户访问某些内容。我想要做的是在他们的访问权限获得批准后向该用户发送电子邮件。
每个访问项都在gridview中,并有一个用户点击的批准按钮。
问题在于,如果要完成10个批准,我不希望向用户发送10封电子邮件。 我只想发送一封电子邮件。
这在某种程度上要求延迟电子邮件程序,并将其分组..
有没有人知道一个简单明了的方法呢?
答案 0 :(得分:2)
您可以创建一个数据库,用于存储有关用户有权访问哪个项目的信息。
创建一个User表,一个Item表和一个在User和Item之间建立关系的中间表。
当某人有权访问另一个项目时,您可以查询数据库,以了解此人是否已经有权访问该项目,然后再发送电子邮件!
只是一个想法......也就是说,如果有一个数据库是一个选项,否则......我必须多想想......让我知道! =)
答案 1 :(得分:1)
我可以在这里想到两种简单的方法:
请勿在用户点击时发送电子邮件,而是每30分钟左右发送一封电子邮件。这将需要某种脚本,每30分钟运行一次,以检查需要发送的电子邮件,然后发送并发送电子邮件。这可能是最好的方法,但有点难。如果您的脚本定期运行(每分钟左右),您可以将此扩展一点,以便仅向不活动的用户发送电子邮件,如果您真的想避免发送多封电子邮件。
批量发送电子邮件,以便当存储的电子邮件数量达到(例如)10个用户的电子邮件时,将发送该用户的所有电子邮件。这有一个潜在的主要缺点(取决于您的预期用途),有些电子邮件可能被大量延迟或根本没有发送(如果用户只被要求批准1件事),所以你真的不应该这样做,除非你是100%肯定这种情况永远不会发生(例如,所有用户要求每天至少批准10件物品),即便如此,我也建议不要这样做。
无论您选择哪种方式,您都需要存储仍需要以某种方式发送的电子邮件,而且我在这里无法提供太多建议,因为我不确定您的具体细节设置。
更新:由于您使用的是c#,因此您将拥有一个支持您网站的数据库(例如Microsoft SQL Server),可能还有一个供用户使用的表格。我假设它被称为Users
并且有一个id
列作为其主键,还有一个email
列,用于记录该用户的当前电子邮件地址:
创建一个Emails
表,其中包含id
(主键),user_id
(外键代表users表中的用户条目)和{{1}的列(您要发送的电子邮件的文本)。
每次您通常都会发送电子邮件,而是在email_text
表中添加记录,Emails
指向user_id
表中的正确记录。< / p>
编写单独的C#(或其他语言)应用程序/脚本,执行以下操作:
从Users
表中获取1条记录及其相应的用户条目,使用类似于:
Emails
(我没有便于测试的SQL服务器,因此请根据需要调整语法)
根据您从数据库中提取的信息发送电子邮件
从SELECT users.email, emails.email_text FROM users, emails WHERE user.id = email.user_id LIMIT 1;
表格
如果您要发送更多电子邮件,请返回(子)步骤1.
设置一个计划任务(或Cron任务,如果有人试图将其应用于非Windows部署),每30分钟运行一次C#应用程序(或您选择的任何语言)。< / p>
答案 2 :(得分:1)
最简单的选择,只需很少的重新分解,就是:
将电子邮件存储在数据库中而不是发送。要以非常简单的方式将它们存储在数据库中,只需创建一个包含电子邮件/主题/正文的表格并在那里发送信息。
存储后,您需要一个触发器来发送电子邮件。
如果您希望将其安排为每30分钟发送一次,则需要创建一个服务或预定程序来执行此操作。最好的方法是使用带有计时器的服务。
如果电子邮件不是那么重要,您可以让它由队列触发。像上面提到的例子;当您插入新的电子邮件记录时,请检查是否有10个,如果有,则将其发送出去。
发送电子邮件后,删除记录或将其标记为已发送。