后台自动发送邮件的程序(java mail,web版)②

邮件发送程序:

package  com.email;

import  java.io. * ;
import  java.sql. * ;
import  java.util. * ;
import  java.util.Date;
import  javax.activation. * ;
import  javax.mail. * ;
import  javax.mail.Message. * ;
import  javax.mail.internet. * ;

public   class  MailSender
    
implements  Runnable  {
  
private int time = 5 * 60 * 1000//扫描数据库时间间隔
  private boolean flag = true//停止线程标记
  private String server = "127.0.0.1"//SMTP服务器地址
  private String port = "25"//SMTP服务器端口
  private String address; //用于发送EMAIL的发送者地址
  private String username; //发送者的用户名
  private String password; //发送者的密码
  private boolean validate = true//邮件服务器是否要求验证
  private File root = null//WEB根目录
  MailConfigManager manager = MailConfigManager.getInstance();

  
public MailSender() {
  }


  
public void setAddress(String address) {
    
this.address = address;
  }


  
public void setPassword(String password) {
    
this.password = password;
  }


  
public void setPort(String port) {
    
if (port != null && port.length() > 0{
      
this.port = port;
    }

  }


  
public void setServer(String server) {
    
this.server = server;
  }


  
public void setUsername(String username) {
    
this.username = username;
  }


  
public void setValidate(boolean validate) {
    
this.validate = validate;
  }


  
public void setTime(int minute) {
    
this.time = minute * 60 * 1000;
  }


  
public void run() {
    
long lastTime = new Date().getTime(); //保存前一次发送邮件的时间
    while (flag) //服务器停止时退出线程
      long k = new Date().getTime() - lastTime;
      
if (k < -1000//防止系统修改时间
        lastTime = new Date().getTime();
        
continue;
      }

      
if (k > time) //超过设定时间间隔开始发送邮件
        sendData();
        lastTime 
= new Date().getTime();
      }

      
try {
        Thread.sleep(
100);
      }

      
catch (Exception e) {}
    }

  }


  
public void stop() {
    flag 
= false;
  }


  
/**
   * 检索数据库,并发送邮件
   
*/

  
private void sendData() {
    ResultSet rs
=null;//读取数据库数据
    
    
try {
      Session session 
= Session.getInstance(getProperties(), new Authentic());
      
while(flag) {//服务器停止时退出线程
        String toAddress = null;//发送地址(从rs中得到)
        String subject = null;//邮件主题
        String content = null ;//邮件内容
        String file[] = null;//所有附件(绝对路径)
          
        sendMail(session, toAddress, subject, content, file);
//发送邮件
      }

    }

    
catch (Exception e) {
      e.printStackTrace();
    }

    
finally {
      
if(rs!=null){
        
try{
          rs.close();
        }

        
catch(SQLException e){}
      }

    }

  }


  
/**
   * 发送邮件
   * 
@param session 会话
   * 
@param toAddress 目的地址
   * 
@param subject 邮件主题
   * 
@param content 邮件内容(HTML)
   * 
@param files 邮件附件
   * 
@return 是否发送成功
   
*/

  
private boolean sendMail(Session session, String toAddress, String subject,
                           String content, String[] files) 
{

    toAddress 
= "lijin@regaltec.com.cn";

    
try {
      Message rs 
= new MimeMessage(session);

      Address from 
= new InternetAddress(address);
      rs.setFrom(from); 
//发送地址
      rs.setRecipient(RecipientType.TO, new InternetAddress(toAddress)); //接收地址
      rs.setSubject(subject); //邮件主题
      Multipart mp = new MimeMultipart();
      BodyPart html 
= new MimeBodyPart();
      html.setContent(content, 
"text/html; charset=GBK"); //邮件HTML内容
      mp.addBodyPart(html);
      
if (files != null && files.length > 0//邮件附件
        for (int i = 0; i < files.length; i++{
          MimeBodyPart mbp 
= new MimeBodyPart();
          FileDataSource fds 
= new FileDataSource(files[i]);
          mbp.setDataHandler(
new DataHandler(fds));
          mbp.setFileName(MimeUtility.encodeWord(files[i]), 
"GBK"null));
          mp.addBodyPart(mbp);
        }

      }

      rs.setContent(mp); 
//邮件全部内容
      rs.setSentDate(new Date()); //发送时间
      Transport.send(rs); //发送
      return true;
    }

    
catch (Exception e) {
      e.printStackTrace();
      
return false;
    }

  }


  
/**
   * 邮件会话属性
   * 
@return 会话属性
   
*/

  
private Properties getProperties() {
    Properties rs 
= new Properties();
    rs.put(
"mail.smtp.host", server);
    rs.put(
"mail.smtp.port", port);
    rs.put(
"mail.smtp.auth", validate ? "true" : "false");
    
return rs;
  }


  
public void setRoot(File root) {
    
this.root = root;
  }


  
class Authentic
      
extends Authenticator //验证密码

    
public Authentic() {
    }


    
public PasswordAuthentication getPasswordAuthentication() {
      
return new PasswordAuthentication(username, password);
    }


  }


}
 
定时自动发送邮件服务使用说明 该软件运行环境需要.Net 3.5支持,Win7系统上可以直接运行. 主要功能可以定时自动发送邮件,发送程序做成服务形式,用户无需登录, 只要电脑是开启状态,就会自动执行发送邮件. 包含的文件, 1.AutoSendMail.exe --设置程序 2.AutoSendMail_Log.txt --存放日志的文本文件. 可自动生成 3.AutoSendMail_Setting.xml --配置文件 4.AutoSendMailService.exe --服务程序 5.InstallUtil.exe --微软的安装服务必须程序 6.tasks.mdb --Access数据库文件,用于存放邮箱内容. 可更改文件 7.安装服务.bat 8.使用说明.txt 9.卸载服务.bat 安装步骤: 第一步:安装服务 运行“安装服务.bat”文件。(需要管理员权限) 第二步:修改配置文件 修改好配置文件AutoSendMail_Setting.xml。确保Access数据库连接正确,每个任务的发送时点,和邮件信息。 每次修改配置文件必需重新启动服务才生效。 第三步:启动服务 a.从服务管理控制台启动服务,运行services.msc命令打开控制台。 b.通过设置程序启动服务。(需要管理员权限) 如果删除服务,则运行“卸载服务.bat”。 接口定义: 每个任务需要在指定的Access数据库里设置一个视图或表,用于存放邮件信息, 字段格式: 第一字段:ID 自动编号 第二字段:收件人 文本类型 第三字段:抄送人 文本类型 第四字段:主题 文本类型 第五字段:内容 备注类型 第六字段:发送次数 数字类型 备注:程序通过ID查找记录,来更新发送次数的值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值