从网站发送电子邮件的智能方式

时间:2012-06-25 02:29:19

标签: asp.net vb.net

我目前正在使用SmtpClient向注册或注册活动的用户发送电子邮件。

当他们点击注册时,它会保存信息并调用发送邮件功能,但发送一封太长的电子邮件需要不到一秒的时间。

有没有办法保存用户信息,加载页面后,它会在后台从vb调用发送邮件功能。

我考虑使用winform发送电子邮件,但是当我使用Godaddy进行托管时,你在哪里运行它?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您可以保存用户信息,当页面加载时,您可以对服务器页面进行ajax调用,该服务器页面将向用户发送电子邮件。这样做的优点是,由于它是异步的,因此用户无需等待此操作完成以继续在站点导航中执行其他操作。但它不会比你的方法更快。

你可以使用dom ready函数在(re?)加载的页面中进行这样的ajax调用。

$(function(){

  //Whatever code inside this will be executed only after the DOM finishes loading
   var userId=45;  //replace this with your new userId
   $.post("Emailer.aspx?userId="+userId,function(data){
      alert("Some alert message if you really want!");
   });

});

假设您有一个名为Emailer.aspx的页面,它将读取查询字符串参数并执行操作(发送电子邮件)。

答案 1 :(得分:1)

我只使用SmtpClient的SendAsync()方法与Send()方法。这将允许代码继续通过电子邮件发送,因为它生成一个新线程来处理发送。这为用户节省了等待时间。只是不要以这种方式循环发送1000个电子邮件。它可能导致您的服务器产生太多线程并阻碍性能。

您还可以研究Smtp服务“分拣目录”选项。如果您对SMTP服务器所在的位置具有文件写入权限,则可以“删除”邮件,以便稍后发送。

答案 2 :(得分:0)

我的第一个答案是nbushnell建议的SendAsync

如果你担心1000封电子邮件,你可以在用户的​​数据库记录上有一个“位”字段,然后写一个Windows服务,读取位为0的用户表,发送电子邮件,然后设置位到1

这消除了等待页面加载的用户的等待时间,但是接收实际电子邮件时会有延迟。