qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          java實(shí)現(xiàn)后臺(tái)自動(dòng)發(fā)郵件功能

          java實(shí)現(xiàn)后臺(tái)自動(dòng)發(fā)郵件功能

          www.diybl.com    時(shí)間 : 2008-09-13  作者:佚名   編輯:本站 點(diǎn)擊:  1390 [ 評(píng)論 ]


          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><!--郵件發(fā)送程序-->
              <servlet-class>com.email.MailSenderServlet</servlet-class>
              <init-param>
                <param-name>server</param-name><!--郵件服務(wù)器SMTP地址-->
                <param-value>smtp.163.com</param-value>
              </init-param>
              <init-param>
                <param-name>port</param-name><!--郵件服務(wù)器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><!--郵件賬號(hào)-->
                <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服務(wù)器是否要求驗(yàn)證-->
                <param-value>true</param-value>
              </init-param>
              <init-param>
                <param-name>time</param-name><!--掃描數(shù)據(jù)庫(kù)時(shí)間間隔(分鐘)-->
                <param-value>5</param-value>
              </init-param>
              <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("系統(tǒng)文件web.xml錯(cuò)誤:郵件發(fā)送程序初始化失敗!");
                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(); //啟動(dòng)郵件發(fā)送線程
            } 
            public void destroy() {
              sender.stop(); //停止郵件發(fā)送線程
              try {
                t.join(1000);
                if (t.isAlive()) {
                  System.out.println("郵件發(fā)送線程未停止。");
                }
              }
              catch (Exception e) {}
            } 

          郵件發(fā)送程序 
          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 flyxxxxx@163.com
           * @version 1.0
           */ 
          public class MailSender
              implements Runnable { 
          private int time = 5 * 60 * 1000; //掃描數(shù)據(jù)庫(kù)時(shí)間間隔
            private boolean flag = true; //停止線程標(biāo)記
            private String server = "127.0.0.1"; //SMTP服務(wù)器地址
            private String port = "25"; //SMTP服務(wù)器端口
            private String address; //用于發(fā)送EMAIL的發(fā)送者地址
            private String username; //發(fā)送者的用戶名
            private String password; //發(fā)送者的密碼
            private boolean validate = true; //郵件服務(wù)器是否要求驗(yàn)證
            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(); //保存前一次發(fā)送郵件的時(shí)間
              while (flag) { //服務(wù)器停止時(shí)退出線程
                long k = new Date().getTime() - lastTime;
                if (k < -1000) { //防止系統(tǒng)修改時(shí)間
                  lastTime = new Date().getTime();
                  continue;
                }
                if (k > time) { //超過(guò)設(shè)定時(shí)間間隔開(kāi)始發(fā)送郵件
                  sendData();
                  lastTime = new Date().getTime();
                }
                try {
                  Thread.sleep(100);
                }
                catch (Exception e) {}
              }
            } 
            public void stop() {
              flag = false; 

            /**
             * 檢索數(shù)據(jù)庫(kù),并發(fā)送郵件
             */
            private void sendData() {
              ResultSet rs=null;//讀取數(shù)據(jù)庫(kù)數(shù)據(jù)
              
              try {
                Session session = Session.getInstance(getProperties(), new Authentic());
                while(flag) {//服務(wù)器停止時(shí)退出線程
                  String toAddress = null;//發(fā)送地址(從rs中得到)
                  String subject = null;//郵件主題
                  String content = null ;//郵件內(nèi)容
                  String file[] = null;//所有附件(絕對(duì)路徑)
                    
                  sendMail(session, toAddress, subject, content, file);//發(fā)送郵件
                }
              }
              catch (Exception e) {
                e.printStackTrace();
              }
              finally {
                if(rs!=null){
                  try{
                    rs.close();
                  }
                  catch(SQLException e){}
                }
              }
            } 
            /**
             * 發(fā)送郵件
             * @param session 會(huì)話
             * @param toAddress 目的地址
             * @param subject 郵件主題
             * @param content 郵件內(nèi)容(HTML)
             * @param files 郵件附件
             * @return 是否發(fā)送成功
             */
            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); //發(fā)送地址
                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內(nèi)容
                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); //郵件全部?jī)?nèi)容
                rs.setSentDate(new Date()); //發(fā)送時(shí)間
                Transport.send(rs); //發(fā)送
                return true;
              }
              catch (Exception e) {
                e.printStackTrace();
                return false;
              }
            } 
            /**
             * 郵件會(huì)話屬性
             * @return 會(huì)話屬性
             */
            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 { //驗(yàn)證密碼 
              public Authentic() {
              } 
              public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
              } 
            } 


          該文章轉(zhuǎn)載自[編程助理站]:http://www.91duoduo.com/jishu/java_xx.html?page=1&noid=ffhjbi&t=

          posted on 2011-12-01 17:47 順其自然EVO 閱讀(4911) 評(píng)論(6)  編輯  收藏

          評(píng)論

          # re: java實(shí)現(xiàn)后臺(tái)自動(dòng)發(fā)郵件功能 2012-11-15 23:52 sss

          sssssssssssss  回復(fù)  更多評(píng)論   

          # re: java實(shí)現(xiàn)后臺(tái)自動(dòng)發(fā)郵件功能[未登錄](méi) 2012-12-16 21:48 a

          lining  回復(fù)  更多評(píng)論   

          # re: java實(shí)現(xiàn)后臺(tái)自動(dòng)發(fā)郵件功能[未登錄](méi) 2012-12-16 21:49 a

          asdafadf  回復(fù)  更多評(píng)論   

          # re: java實(shí)現(xiàn)后臺(tái)自動(dòng)發(fā)郵件功能 2013-02-25 15:28 周星馳v字形

          宣傳v型在  回復(fù)  更多評(píng)論   

          # re: java實(shí)現(xiàn)后臺(tái)自動(dòng)發(fā)郵件功能 2013-04-08 17:07 順豐

          是是  回復(fù)  更多評(píng)論   

          # re: java實(shí)現(xiàn)后臺(tái)自動(dòng)發(fā)郵件功能 2013-05-14 20:28 jhghjg

          ytuytyu  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2011年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 五原县| 岳西县| 重庆市| 邹平县| 巨野县| 宜川县| 望江县| 巴林左旗| 库尔勒市| 北海市| 东山县| 墨脱县| 县级市| 巢湖市| 佛教| 滁州市| 峨眉山市| 哈尔滨市| 皮山县| 行唐县| 大连市| 勐海县| 正宁县| 固安县| 奈曼旗| 景宁| 双辽市| 新巴尔虎右旗| 义乌市| 苗栗市| 松潘县| 乐安县| 双鸭山市| 萝北县| 清涧县| 兴化市| 收藏| 昭觉县| 襄垣县| 大丰市| 岑巩县|