Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何避免发送多封电子邮件给同一个人,当每封电子邮件都被单独触发时_C#_.net_Asp.net - Fatal编程技术网

C# 如何避免发送多封电子邮件给同一个人,当每封电子邮件都被单独触发时

C# 如何避免发送多封电子邮件给同一个人,当每封电子邮件都被单独触发时,c#,.net,asp.net,C#,.net,Asp.net,我有一个网站,可以让一个用户批准其他用户访问某些内容。。我想做的是,当用户的访问权限得到批准时,向该用户发送一封电子邮件 每个访问项都位于gridview中,有人单击一个approve按钮 问题是,如果用户需要完成10次审批,我不希望向用户发送10封电子邮件。 我只想发送一封电子邮件 这在某种程度上需要延迟电子邮件过程,并将其分组 有人知道一种简单易行的方法吗?您可以创建一个数据库,用于存储有关哪个用户可以访问哪个项目的信息 创建用户表、项目表和在用户和项目之间建立关系的中间表 当有人授予对某个

我有一个网站,可以让一个用户批准其他用户访问某些内容。。我想做的是,当用户的访问权限得到批准时,向该用户发送一封电子邮件

每个访问项都位于gridview中,有人单击一个approve按钮

问题是,如果用户需要完成10次审批,我不希望向用户发送10封电子邮件。 我只想发送一封电子邮件

这在某种程度上需要延迟电子邮件过程,并将其分组


有人知道一种简单易行的方法吗?

您可以创建一个数据库,用于存储有关哪个用户可以访问哪个项目的信息

创建用户表、项目表和在用户和项目之间建立关系的中间表

当有人授予对某个项目的另一个项目的访问权限时,您可以查询数据库以了解该人以前是否已经访问过该项目,然后发送电子邮件


只是一个想法。。。也就是说,如果有一个数据库是一个选项,否则。。。我必须多想想。。。让我知道!=)

您可以创建一个数据库,用于存储有关哪个用户访问了哪个项目的信息

创建用户表、项目表和在用户和项目之间建立关系的中间表

当有人授予对某个项目的另一个项目的访问权限时,您可以查询数据库以了解该人以前是否已经访问过该项目,然后发送电子邮件


只是一个想法。。。也就是说,如果有一个数据库是一个选项,否则。。。我必须多想想。。。让我知道!=)

这里有两种简单的方法:

  • 不要在用户点击时发送电子邮件,而是每隔30分钟左右发送一封电子邮件。这需要某种脚本,每30分钟运行一次,检查需要发送的电子邮件,然后发送出去。这可能是最好的方法,但要难一点。如果你真的想避免发送多封电子邮件,那么如果你的脚本定期(每分钟左右)运行,你可以将其扩展到只有那些不活跃的电子邮件用户

  • 对电子邮件进行批处理,以便当存储的电子邮件数量达到(例如)一个用户的10封电子邮件时,该用户的所有电子邮件都会发送。这有一个潜在的主要缺点(取决于您的预期使用情况),即一些电子邮件可能会被大量延迟或根本不发送(如果用户只被要求批准一件事情),因此您真的不应该这样做,除非您100%确定这不会发生(例如,要求所有用户每天至少批准10件事情),即使这样,我还是建议不要这样做

  • 无论您选择哪种方式,您都需要存储哪些电子邮件仍然需要以某种方式发送,我不能在这里给出太多建议,因为我不确定您的设置细节

    更新:由于您使用的是c#,因此您将有一个数据库(如Microsoft SQL Server)支持您的网站,可能还有一个用户表。我假设它被称为
    Users
    ,并且有一个
    id
    列作为主键,还有一个
    email
    列记录该用户的当前电子邮件地址:

  • 创建一个
    Emails
    表,其中包含
    id
    (主键)、
    user\u id
    (外键表示用户表中的用户条目)和
    email\u text
    (要发送的电子邮件文本)列

  • 每次您通常发送电子邮件时,都会在
    电子邮件
    表中添加一条记录,其中
    用户id
    指向
    用户
    表中的正确记录

  • 编写一个单独的C#(或其他语言)应用程序/脚本,执行以下操作:

  • Emails
    表中获取1条记录及其相应的用户条目,使用如下方法:

    选择users.email,emails.email\u来自用户的文本,其中user.id=email.user\u id限制为1的电子邮件(我手头没有SQL server可供测试,因此需要调整语法)

  • 根据从数据库中提取的信息发送电子邮件

  • 电子邮件
    表中删除记录

  • 如果您有更多电子邮件要发送,请返回(子)步骤1

  • 设置计划任务(或任务,如果有人试图将其应用于非windows部署),每30分钟运行一次C#应用程序(或您选择的任何语言)


  • 这里我可以想到两种简单的方法:

  • 不要在用户点击时发送电子邮件,而是每隔30分钟左右发送一封电子邮件。这需要某种脚本,每30分钟运行一次,检查需要发送的电子邮件,然后发送出去。这可能是最好的方法,但要难一点。如果你真的想避免发送多封电子邮件,那么如果你的脚本定期(每分钟左右)运行,你可以将其扩展到只有那些不活跃的电子邮件用户

  • 对电子邮件进行批处理,以便当存储的电子邮件数量达到(例如)一个用户的10封电子邮件时,该用户的所有电子邮件都会发送。这有一个潜在的主要缺点(取决于您的预期使用情况),即一些电子邮件可能会被大量延迟或根本不发送(如果用户只被要求批准一件事情),因此您真的不应该这样做,除非您100%确定这不会发生(例如,要求所有用户每天至少批准10件事情),即使这样,我还是建议不要这样做

  • 无论您选择哪种方式,您都需要存储哪些电子邮件仍然需要以某种方式发送,我不能在这里给出太多建议,因为我不确定您的设置细节

    更新:由于您使用的是c#,因此将有一个数据库(如Microsoft SQL Server)支持您