package com.action.indices;import java.util.Timer;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class MyTimerTask implements ServletContextListener { private Timer timer = null; ? public void contextDestroyed(ServletContextEvent event)? { ? ?timer.cancel();? ?event.getServletContext().log("定時器銷毀"); ? } ?? public void contextInitialized(ServletContextEvent event)? {? ?//在這里初始化監聽器,在tomcat啟動的時候監聽器啟動,可以在這里實現定時器功能? ?timer = new Timer(true);? ?event.getServletContext().log("定時器已啟動");//添加日志,可在tomcat日志中查看到? ?//調用exportHistoryBean,0表示任務無延遲,5*1000表示每隔5秒執行任務,60*60*1000表示一個小時; ?timer.schedule(new SendEmail(event.getServletContext()),0,10000); ? }?}===================================================package com.action.indices;import java.util.Date;import java.util.Properties;import java.util.TimerTask;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import javax.servlet.ServletContext;public class SendEmail extends TimerTask { private ServletContext context = null;? public SendEmail(ServletContext context)? {? ?this.context = context;? }? @Override? public void run() { try{ ? ? ?/* ? ? ?* 以下為javamail的郵件發送 ? ? ?*/ ? ? ? System.out.println("正在發送郵件"); ? ? ? ?Properties props=new Properties(); ? ? ? ?props.put("mail.smtp.host","smtp.qq.com");//發件人使用發郵件的電子信箱服務器我使用的是163的服務器 ? ? ? ?props.put("mail.smtp.auth","true"); //這樣才能通過驗證 ? ? ? ?Session s=Session.getInstance(props); ? ? ? ?s.setDebug(true); ? ? ? ?MimeMessage message=new MimeMessage(s); ? ? ? ?//給消息對象設置發件人/收件人/主題/發信時間 ? ? ? ?InternetAddress from=new InternetAddress("[email protected]"); ?//發郵件的出發地(發件人的信箱),這是我的郵箱地址,使用請改成你的有效地址 ? ? ? ?message.setFrom(from); ? ? ? ?String tto = "[email protected]"; ? ? ? ?InternetAddress to=new InternetAddress(tto);// tto為發郵件的目的地(收件人信箱) ? ? ? ?System.out.println("正在發送郵件2"); ? ? ? ?message.setRecipient(Message.RecipientType.TO,to); ? ? ? ?String ttitle = "郵件測試使用"; ? ? ? ?message.setSubject(ttitle);// ttitle為郵件的標題 ? ? ? ?message.setSentDate(new Date()); ? ? ? ?BodyPart mdp=new MimeBodyPart();//新建一個存放信件內容的BodyPart對象 ? ? ? ?System.out.println("正在發送郵件3"); ? ? ? ?String tcontent = "附件測試用"; ? ? ? ?mdp.setContent(tcontent,"text/html;charset=utf-8");//給BodyPart對象設置內容和格式/編碼方式tcontent為郵件內容 ? ? ? ?Multipart mm=new MimeMultipart();//新建一個MimeMultipart對象用來存放BodyPart對 ? ? ? ?//象(事實上可以存放多個) ? ? ? ?mm.addBodyPart(mdp);//將BodyPart加入到MimeMultipart對象中(可以加入多個BodyPart) ? ? ? ?message.setContent(mm);//把mm作為消息對象的內容 ? ? ? ?System.out.println("正在發送郵件4"); ? ? ? ?message.saveChanges(); ? ? ? ?Transport transport=s.getTransport("smtp"); ? ? ? ?System.out.println("正在發送郵件5"); ? ? ? ?transport.connect("smtp.qq.com","799788525","15824619896");//發郵件人帳戶密碼,此外是我的帳戶密碼,使用時請修改。 ? ? ? ?System.out.println("正在發送郵件66"); ? ? ? ?transport.sendMessage(message,message.getAllRecipients()); ? ? ? ?System.out.println("正在發送郵件6"); ? ? ? ?transport.close(); ? ?}catch(Exception e){? ? ? ?e.printStackTrace();? ? } ? ? ??? ? ?}}=============================? ? <!-- 郵件使用 -->? ? <listener>? ? ? ? <listener-class>com.action.indices.MyTimerTask</listener-class>? ? </listener>?哪里有錯誤,請大神指點!下面面是執行結果和錯誤信息:【做的是定時發送】============================正在發送郵件DEBUG: setDebug: JavaMail version 1.5.0-b01正在發送郵件2正在發送郵件3正在發送郵件4DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]正在發送郵件5DEBUG SMTP: useEhlo true, useAuth trueDEBUG SMTP: trying to connect to host "smtp.qq.com", port 25, isSSL false220 ********************************DEBUG SMTP: connected to host "smtp.qq.com", port: 25EHLO WIN-6EEE2PLGBOR250-smtp.qq.com250-PIPELINING250-SIZE 73400320250-XXXXXXXA250-AUTH LOGIN PLAIN250-AUTH=LOGIN250-XXXXXXXXXXXB250 8BITMIMEDEBUG SMTP: Found extension "PIPELINING", arg ""DEBUG SMTP: Found extension "SIZE", arg "73400320"DEBUG SMTP: Found extension "XXXXXXXA", arg ""DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"DEBUG SMTP: Found extension "AUTH=LOGIN", arg ""DEBUG SMTP: Found extension "XXXXXXXXXXXB", arg ""DEBUG SMTP: Found extension "8BITMIME", arg ""DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM?DEBUG SMTP: AUTH LOGIN command trace suppressedDEBUG SMTP: EOF: [EOF]DEBUG SMTP: AUTH LOGIN failedjavax.mail.AuthenticationFailedException: [EOF] at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826) at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685) at javax.mail.Service.connect(Service.java:295) at javax.mail.Service.connect(Service.java:176) at com.cmcc.bdp.action.indices.SendEmail.run(SendEmail.java:63) at java.util.TimerThread.mainLoop(Unknown Source) at java.util.TimerThread.run(Unknown Source)============================
JAVA 定時發送郵件
NeverGiveUp7
2015-07-01 17:59:01