问题如下:
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小时内未做任务响应,则再发送一封邮件,不知这个功能如何实现..各位帮忙看看,谢谢了...

解决方案 »

  1.   

    这里的this.template 和 this.info 是不是每个线程都是不一样的 已经有变化了?
    你可以构造一个参数类 把它们作为参数传进SendMailThread方法里面
    用System.Threading.ParameterizedThreadStart
      

  2.   


    嗯,是每个线程都不一样,以前没用过ParameterizedThreadStart这个,我去试试,谢谢!
      

  3.   

    第一个问题在邮件发送到客户后,记录下客户邮件和发送时间。第二个问题:
    可以做成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来编程,非常恐怖,小心加小心。
      

  4.   

    楼上的,谢谢,第二题看不懂,,看来是要放弃了..第一题 用了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;
        ......
    }
    这样写可以么??还有,如在线程里出现异常,系统会不会自动抛出??
      

  5.   

    把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控件。
      

  6.   

    2:定时发邮件 
    在第一次给客户发邮件后,如客户在48小时内未做任务响应,则再发送一封邮件,不知这个功能如何实现.. 各位帮忙看看,谢谢了...
    ------------
    数据库或者XML记录第一次发送邮件的时间data1 标志0
    当data1+48小时后.你的打开邮箱(机器打开也行,去读发件人)
    如果有.标志改为:1else
    重发
      

  7.   

    你什么时候启动线程的?
    你什么时候以哪种方式结束线程?
    当你发送邮件时post到服务器,如果邮件发送后线程处于休眠状态,用户如何得到响应?
      

  8.   

    利用數據庫裡的質變化來trigger email會比較好 也比thread來的省
    在利用window service (假如使用sql server或是oracle 可用裡面的scheuler 去寫 stored procedure)
      

  9.   

    像 这种需要定时发送的 我觉得 还是独立写一个 EXE 的后台应用程序 放在服务器上 一直运行当用户需要定时发送的时候  把具体发送的时间写入数据库由后台的应用程序 定时读取数据库中的时间 然后调用邮件发送程序 或者 直接发送