qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          java實現后臺自動發郵件功能

          java實現后臺自動發郵件功能

          www.diybl.com    時間 : 2008-09-13  作者:佚名   編輯:本站 點擊:  1390 [ 評論 ]


          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 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) {}
            } 

          郵件發送程序 
          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; //掃描數據庫時間間隔
            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);
              } 
            } 


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

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

          評論

          # re: java實現后臺自動發郵件功能 2012-11-15 23:52 sss

          sssssssssssss  回復  更多評論   

          # re: java實現后臺自動發郵件功能[未登錄] 2012-12-16 21:48 a

          lining  回復  更多評論   

          # re: java實現后臺自動發郵件功能[未登錄] 2012-12-16 21:49 a

          asdafadf  回復  更多評論   

          # re: java實現后臺自動發郵件功能 2013-02-25 15:28 周星馳v字形

          宣傳v型在  回復  更多評論   

          # re: java實現后臺自動發郵件功能 2013-04-08 17:07 順豐

          是是  回復  更多評論   

          # re: java實現后臺自動發郵件功能 2013-05-14 20:28 jhghjg

          ytuytyu  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2011年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 仪陇县| 远安县| 自治县| 松潘县| 昆山市| 乌苏市| 安庆市| 龙州县| 尼勒克县| 惠来县| 革吉县| 敦煌市| 灯塔市| 龙南县| 正阳县| 南雄市| 临潭县| 陇川县| 徐水县| 九龙城区| 应用必备| 中宁县| 陇南市| 舞钢市| 全州县| 本溪市| 临夏市| 昌邑市| 达尔| 平原县| 苏尼特右旗| 沙雅县| 金华市| 迭部县| 象山县| 仪陇县| 陕西省| 麻阳| 西青区| 永济市| 莱州市|