0

我有一个我正在调用的电子邮件方法OnPageLoadC# 4.0当页面加载时,它会将电子邮件发送给用户。问题是当用户刷新页面时,每次它都会向用户生成电子邮件,这是不可接受的。有没有什么方法可以让我的方法只在页面打开时第一次执行。我正在调用这样的方法

if (!IsPostBack)
{
  Sendemail(emailid, "ibrahim.cheema@shakarganj.com.pk", "SML Dashboards Access", "<b><font color=red>Dashboard Access Alert!</font></b> <br></br>Note: If the access is by yourself, then please ignore this email.<br><br>SML Dashboards accessed using your credentials<br><b>" + emailid + "<br><b>Location / IP Address :</b>" + GetUserIP());
}

这样,用户在刷新页面时总是会收到电子邮件。我怎样才能避免它?

4

3 回答 3

1

您可以选择存储 cookie 并在发送电子邮件之前检查 cookie 是否存在。这是最简单的方法,最好的方法是将变量保存在数据库的用户配置文件表中(如果有的话)。这是最安全的方式,因为 cookie 和会话不是无限的。

于 2013-02-22T12:30:28.993 回答
0
if(Session[emailid]==null)
{
  // SEND

  Session[emailid]==true;
} 

请记住,会话可能会在超时或 IIS 重新启动等不同情况下重置,并且电子邮件将在下次会话启动时再次发送。如果您希望这封电子邮件一生只发送一次 - 您必须将已发送标志保留在数据库中。

于 2013-02-22T12:27:18.163 回答
0

正如stack-starTrekkers所提到的,方法是

在客户端系统上存储信息——明显的危险:(

维护会话变量——重置事件会妨碍它的可用性——这种情况可以通过持久化到本地磁盘来处理,或者由于服务可以由多台服务器机器处理,到全局可见的(对于服务服务器)持久层,可以是一个流, db, 在云中的位置。

其他解决方案可能是将这个逻辑从页面移动到邮件服务 - 这是更多的工作,但更清洁的方法。

于 2013-02-22T23:58:12.983 回答