后台自动发送E_mail的程序

本文介绍了一个使用Java实现的邮件发送程序,该程序通过配置web.xml文件来设置邮件服务器参数,并利用多线程定时扫描数据库,将指定数据封装为邮件内容进行发送。

参考地址:http://www.99inf.net/SoftwareDev/Java/40117.htm

 

web.xml文件


<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 
<Servlet> 
<servlet-name>mailsenderservlet</servlet-name>
<!--邮件发送程序-->
 <servlet-class>com.email.MailSenderServlet</servlet-class> 
<init-param> 
<param-name>server</param-name>
<!--邮件服务器SMTP地址--> 
<param-value>smtp.163.com</param-value> 
</init-param> 
<init-param> 
<param-name>port</param-name>
<!--邮件服务器SMTP端口--> 
<param-value>25</param-value> 
</init-param> 
<init-param> <param-name>address</param-name>
<!--邮件地址--> 
<param-value>username@163.com</param-value> 
</init-param> 
<init-param> 
<param-name>username</param-name>
<!--邮件账号--> 
<param-value>username</param-value> 
</init-param> 
<init-param> 
<param-name>password</param-name>
<!--密码--> 
<param-value>******</param-value> 
</init-param>
 <init-param> 
<param-name>validate</param-name>
<!--SMTP服务器是否要求验证--> 
<param-value>true</param-value> 
</init-param> 
<init-param> 
<param-name>time</param-name>
<!--扫描数据库时间间隔(分钟)--> 
<param-value>5</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup>
 </servlet>
 </web-app> 
 

 

 

 

servlet:

 

 

 

 

 邮件发送程序

 


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.*; 
/** 
 *  <p>Copyright: Copyright (c) 2004</p> 
 *   @author 
 *   @version 1.0 
 */ 
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); 
		} 
	} 
}
 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值