Asp.Net 多线程 和 定时发邮件问题

2008-07-07 05:34:32
问题如下:
1.多线程发邮件
我现在做的比较简单,就是直接创建一个线程
public void SendMail(MailTemplate template, object info){
this.template = template;
this.info = info;

Thread thread = new Thread(new ThreadStart(SendMailThread));
thread.Start();
}
public void SendMailThread(){
//这里用到了this.template 和 this.info
}

当发送一个邮件时候没问题,
如果连续调用2次,就出问题了,不知如何解决...

2.定时发邮件
在第一次给客户发邮件后,如客户在48小时内未做任务响应,则再发送一封邮件,不知这个功能如何实现..

各位帮忙看看,谢谢了...
...全文
1825 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
极地_雪狼 2008-12-15
  • 打赏
  • 举报
回复
应该是端口被占用了吧。
gongyun724 2008-11-17
  • 打赏
  • 举报
回复
specter_zero 2008-10-19
  • 打赏
  • 举报
回复
像 这种需要定时发送的 我觉得 还是独立写一个 EXE 的后台应用程序 放在服务器上 一直运行

当用户需要定时发送的时候 把具体发送的时间写入数据库

由后台的应用程序 定时读取数据库中的时间 然后调用邮件发送程序 或者 直接发送
sdshg2008 2008-09-01
  • 打赏
  • 举报
回复
cheekman 2008-08-26
  • 打赏
  • 举报
回复
利用數據庫裡的質變化來trigger email會比較好 也比thread來的省
在利用window service (假如使用sql server或是oracle 可用裡面的scheuler 去寫 stored procedure)
helloDongXiu 2008-08-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wenle1229 的回复:]
好好想想,帮顶~
[/Quote]
hbboyllh 2008-08-21
  • 打赏
  • 举报
回复
lonkong 2008-08-06
  • 打赏
  • 举报
回复
你想要客户如何响应你呢?
如果是链接,改变下存储的客户状态。
如果是回邮件...不是自己的邮件服务器可能麻烦多了。
我还是菜鸟。学习中
2008-07-08
  • 打赏
  • 举报
回复
定时发邮件主要是时间的控制

比较笨的方法是一直开着一个页面,让他间隔一断时间去刷新

我想要一种比较好点的方法.
qq22345111 2008-07-08
  • 打赏
  • 举报
回复
2:定时发邮件
在第一次给客户发邮件后,如客户在48小时内未做任务响应,则再发送一封邮件,不知这个功能如何实现..

各位帮忙看看,谢谢了...
------------
数据库或者XML记录第一次发送邮件的时间data1 标志0
当data1+48小时后.你的打开邮箱(机器打开也行,去读发件人)
如果有.标志改为:1

else
重发
wenle 2008-07-08
  • 打赏
  • 举报
回复
好好想想,帮顶~
2008-07-08
  • 打赏
  • 举报
回复
全局的也出错,,郁闷了...
aiyumen 2008-07-08
  • 打赏
  • 举报
回复
你什么时候启动线程的?
你什么时候以哪种方式结束线程?
当你发送邮件时post到服务器,如果邮件发送后线程处于休眠状态,用户如何得到响应?
2008-07-08
  • 打赏
  • 举报
回复
谁有好点的办法啊...
tootto 2008-07-07
  • 打赏
  • 举报
回复
把Thread定义成全局变量

public class MailParameter {
public MailTemplate template;
public object info;
Thread thread;
}

public void SendMail(MailTemplate template, object info){


MailParameter para = new MailParameter();
para.template = template;
para.info = info;

thread = new Thread(new ParameterizedThreadStart(SendMailThread));
thread.Start(para);
}
....
....




如果不想跟线程揪缠,查阅一下BackgroundWorker控件。
2008-07-07
  • 打赏
  • 举报
回复
楼上的,谢谢,第二题看不懂,,看来是要放弃了..

第一题 用了ParameterizedThreadStart 后,原来正常的都出错了...
不知道是不是程序没写好.
改动如下:
新建了一个类,保存2个参数
public class MailParameter {
public MailTemplate template;
public object info;
}
public void SendMail(MailTemplate template, object info){


MailParameter para = new MailParameter();
para.template = template;
para.info = info;

Thread thread = new Thread(new ParameterizedThreadStart(SendMailThread));
thread.Start(para);
}

protected void SendMailThread(object para) {

MailParameter mp = (MailParameter)para;
MailTemplate template = mp.template;
object info = mp.info;
......
}
这样写可以么??

还有,如在线程里出现异常,系统会不会自动抛出??
tootto 2008-07-07
  • 打赏
  • 举报
回复
第一个问题
[Quote=引用 2 楼 hubblebubblepig 的回复:]
这里的this.template 和 this.info 是不是每个线程都是不一样的 已经有变化了?
你可以构造一个参数类 把它们作为参数传进SendMailThread方法里面
用System.Threading.ParameterizedThreadStart
[/Quote]

在邮件发送到客户后,记录下客户邮件和发送时间。

第二个问题:
可以做成windows service; 或console application然后放在'计划任务'里,设定成每48小时运行一次。

如果收件箱是你们自己的exchange server, 那比较好办,用exchange API来查看 exchange server 的收件地址,对比被记录的邮件地址的的发送时间。

exchange server 2007版以前,有一套API方法来提供exchange server编程,2007则提供了一套web service 来对exchange 2007编程,或叫web method,
引用的'web reference'。

如果不是exchange则很麻烦,必须引用outlook的dll库,作为客户端来检测收件箱。客户端的意思是每一次运行这个程序都必须要登陆到这台电脑。因为outlook是以
个人账号为工作基础的,它不是server程序。如果硬把它当server程序来运行将会有很多很多麻烦,安全性问题,从未的见过的错误提示等等。

一般类似的程序都是以exchange server为基础的,如果你的帐号是web mail (如hotmail, gmail等),必须先下载下来到你的outlook,然后以outlook的dll
来实现。不过,outlook 的dll当成server来编程,非常恐怖,小心加小心。

terry915 2008-07-07
  • 打赏
  • 举报
回复
定时发邮件这个功能实现了吗?正好公司要找一个这个东西。
2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hubblebubblepig 的回复:]
这里的this.template 和 this.info 是不是每个线程都是不一样的 已经有变化了?
你可以构造一个参数类 把它们作为参数传进SendMailThread方法里面
用System.Threading.ParameterizedThreadStart
[/Quote]

嗯,是每个线程都不一样,以前没用过ParameterizedThreadStart这个,我去试试,谢谢!
Mapleleaf123 2008-07-07
  • 打赏
  • 举报
回复
帮顶。。
加载更多回复(2)

62,133

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧