ava實作背景自動發郵件功能
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>
<param-name>port</param-name><!--郵件伺服器smtp端口-->
<param-value>25</param-value>
<param-name>address</param-name><!--郵件位址-->
<param-value>[email protected]</param-value>
<param-name>username</param-name><!--郵件賬号-->
<param-value>username</param-value>
<param-name>password</param-name><!--密碼-->
<param-value>******</param-value>
<param-name>validate</param-name><!--smtp伺服器是否要求驗證-->
<param-value>true</param-value>
<param-name>time</param-name><!--掃描資料庫時間間隔(分鐘)-->
<param-value>5</param-value>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
servlet:
package com.email;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class mailsenderservlet
extends httpservlet {
private mailsender sender;
private thread t;
public void init() throws servletexception {
sender = new mailsender();
sender.setroot(root);
string server = getinitparameter("server");
string port = getinitparameter("port");
string address = getinitparameter("address");
string username = getinitparameter("username");
string password = getinitparameter("password");
if (server == null || port == null || address == null || username == null ||
password == null) {
system.out.println("系統檔案web.xml錯誤:郵件發送程式初始化失敗!");
return;
}
sender.setserver(server);
sender.setport(port);
sender.setaddress(address);
sender.setusername(username);
sender.setpassword(password);
string time = getinitparameter("time");
if (time != null) {
sender.settime(integer.parseint(time));
string validate = getinitparameter("validate");
if (validate != null) {
sender.setvalidate(boolean.valueof(validate).booleanvalue());
t = new thread(sender);
t.start(); //啟動郵件發送線程
}
public void destroy() {
sender.stop(); //停止郵件發送線程
try {
t.join(1000);
if (t.isalive()) {
system.out.println("郵件發送線程未停止。");
}
catch (exception e) {}
}
郵件發送程式
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 [email protected]
* @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();
try {
thread.sleep(100);
catch (exception e) {}
public void stop() {
flag = false;
/**
* 檢索資料庫,并發送郵件
*/
private void senddata() {
resultset rs=null;//讀取資料庫資料
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 = "[email protected]";
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;
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);
本文出自seven的測試人生公衆号最新内容請見作者的github頁:http://qaseven.github.io/