導航:首頁 > 編程語言 > 定時發送郵件Java

定時發送郵件Java

發布時間:2023-02-28 05:14:01

1. 如何用javamail定時發送郵件

在Java中發送郵件需要採用javamail實現,定時郵件的發送方法:
其實定時郵件和普通郵件最大的區別就是多了一個定時器,
定時器可以採用線程類的sleep方法實現 睡眠時間為毫秒數,
時間到了之後會自動執行後面代碼,以達到定時效果

2. 怎樣用JavaMail實現郵件的自動回復和定時發送

1 import org.quartz.Job;
2 import org.quartz.JobExecutionContext;
3 import org.quartz.JobExecutionException;
4 import java.util.Calendar;
5 import java.text.SimpleDateFormat;
6 import java.util.Date;
7 import java.lang.InterruptedException;
8 import java.util.Random;
9 import java.util.Properties;
10 import javax.mail.*;
11 import javax.mail.internet.*;
12 public class MailJob implements Job
13 {
14 public void execute(JobExecutionContext context)
15 throws JobExecutionException {
16 //收件人,標題和文本內容
17 String to = "#######@126.com";//填寫你要發給誰
18 String title = createTitle();
19 String text = createText();
20 //設置屬性
21 Properties props = new Properties();
22 //QQ郵箱發件的伺服器和埠
23 props.put("mail.smtp.host", "smtp.qq.com");
24 props.put("mail.smtp.socketFactory.port", "465");
25 props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
26 props.put("mail.smtp.auth", "true");
27 props.put("mail.smtp.port", "25");
28 Session session = Session.getDefaultInstance(props,
29 new javax.mail.Authenticator() {
30 protected PasswordAuthentication getPasswordAuthentication() {
31 //填寫你的qq郵箱用戶名和密碼
32 return new PasswordAuthentication("*******@qq.com", "###***%%%");
33 }
34 });
35 MimeMessage message = new MimeMessage(session);
36 //這里用flag來標記是否發件成功(有時候會連不上伺服器),
37 //如果沒有,繼續發送,直到發送成功為止。
38 int flag = 0;
39 {
40 try {
41 //設置發件人,收件人,主題和文本內容,並發送
42 message.setFrom(new InternetAddress("*******@qq.com"));//填寫你自己的qq郵箱,和上面相同
43 message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
44 message.setSubject(title);
45 message.setText(text);
46 System.out.println("Preparing sending mail...");
47 System.out.println(text);
48 Transport.send(message);
49 flag = 1;
50 System.out.println("message sent successfully");
51 } catch(Exception e) {
52 flag = 0;
53 }
54 } while(flag == 0);
55 }
56 //下面的兩個方法,用來隨機組合標題和文本內容。文本內容由四部分隨機組合。
57 //產生標題
58 public String createTitle() {
59 String[] titles = {"love", "I love you", "Miss you", "My baby"};
60 Random randT = new Random(System.currentTimeMillis());
61 String title = titles[randT.nextInt(titles.length)];
62 return title;
63 }
64 //產生文本內容,文本內容由四部分隨機組合得到。
65 public String createText() {
66 //名字純屬虛構,如有雷同(肯定會有),純屬巧合。
67 String[] parts1 = {"曉靜,你好。", "曉靜,你還好嗎?", "曉靜,你那邊天氣怎麼樣?"};
68 String[] parts2 = {
69 "距離上次見面,我感覺已經好長時間了。",
70 "流去的時間磨不去我對你的愛。",
71 "我仍然記得你在天安門前的那一抹笑容。"
72 };
73 String[] parts3 = {"今天,我大膽地追求你。",
74 "我不怕大膽地對你說,我愛你。",
75 "此刻,月亮代表我的心。"
76 };
77 String[] parts4 = {
78 "未來,我的心依舊屬於你。",
79 "好想在未來陪你一起慢慢變老,當然在我心中你不會老。"
80 };
81 Random randT = new Random(System.currentTimeMillis());
82 String text = parts1[randT.nextInt(parts1.length)]
83 + parts2[randT.nextInt(parts2.length)]
84 + parts3[randT.nextInt(parts3.length)]
85 + parts4[randT.nextInt(parts4.length)];
86 return text;
87 }
88
89 }
復制代碼
觸發器的代碼:
復制代碼
1 import org.quartz.CronScheleBuilder;
2 import org.quartz.JobBuilder;
3 import org.quartz.JobDetail;
4 import org.quartz.Scheler;
5 import org.quartz.Trigger;
6 import org.quartz.TriggerBuilder;
7 import org.quartz.impl.StdSchelerFactory;
8 import java.util.Random;
9 public class CronTriggerExample
10 {
11 public static void main( String[] args ) throws Exception
12 {
13 //創建工作對象
14 JobDetail job = JobBuilder.newJob(MailJob.class)
15 .withIdentity("mmyJobName", "group1").build();
16 //為了立即測試,可以使用下面的代碼,每隔5秒鍾執行一次
17 //int secDelta = 5;
18 //Trigger trigger = TriggerBuilder
19 // .newTrigger()
20 // .withIdentity("mmyTriggerName", "group1")
21 // .withSchele(
22 // CronScheleBuilder.cronSchele("0/" + secDelta + " * * * * ?"))
23 // .build();
24 //在每天早上的9點多(不超過3分鍾)執行
25 Random rand = new Random(System.currentTimeMillis());
26 int secDelta = rand.nextInt(60 * 3);
27 //創建觸發器對象
28 Trigger trigger = TriggerBuilder
29 .newTrigger()
30 .withIdentity("mmyTriggerName", "group1")
31 .withSchele(
32 CronScheleBuilder.cronSchele(secDelta + " 0 9 ? * SUN-SAT"))
33 .build();
34
35 Scheler scheler = new StdSchelerFactory().getScheler();
36 scheler.start();
37 //將觸發器與工作關聯起來
38 scheler.scheleJob(job, trigger);
39 }
40 }

發郵件依賴的包:activation.jar,mail.jar
將發郵件依賴的包和quartz下載得到的lib路徑下的jar包全部放在mylib路徑下,mylib路徑與java文件位於同一個目錄。編譯和運行時,可以使用命令
set classpath=mylib/*;.;
javac CronTriggerExample.java
java CronTriggerExample

3. 關於java定時發送郵件,類似於QQ郵箱中的定時發送功能

建議方法:

  1. 如果你的java會死亡/失去控制, 請用系統的任務調度來發送郵件;

  2. 如果你的java由jboss等之類的託管, 用jboss內部的任務調度來發送郵件.

方法1:

Windws 平台, 在task中添加一個 任務, 命令行執行java 代碼即可, 這樣可靠性由操作系統保證;

Linux等平台, 直接 crontab 處理即可.

4. java中如何實現定時自動發送郵件

可以使用Quartz定時任務使用Cron表達式調用你發送郵件的方法

5. java 指定某個時間發送郵件

既然有了定時,其他的就好辦啦,像你這個需求,肯定得做很多配置,比如表單該如何自動填寫,填寫什麼樣的內容進去,至於發送時間就可以在quartz裡面配置好。總之,你想讓程序幫你自動完成的功能,你必須事先把需要做的事清楚的告訴程序代碼,否則你讓它怎麼下手呢!

6. 如何用javamail定時發送郵件 詳細03

Java 計時器框架的本身在這里不作過多的介紹,詳細信息在IBM developerWorks 中國網站。 我們主要討論如何利用Java 計時器框架在Solaris 平台來實現郵件的定時發送、JavaMail 發送郵件的實現以及在Solaris 平台上如何以後台方式運行整個郵件定時發送的應用。 下載本文的源代碼,參考具體實現。 1.1 形成schele.jar 包 schele.jar 包中的目錄結構如下: 我們將資料庫的連接、日誌、郵件和計劃框架的通用類形成一個與具體應用要求無關的schele.jar 包。利用 javac 將編譯生成的目標 class 文件存在當前目錄的 classes 文件夾下,然後通過 jar -cvf schele.jar ./*命令生成schele.jar 包。 1.1.1 Oracle 資料庫連接的建立 位於db 目錄下,通過thin 方式建立與Oracle 的資料庫連接,具體的實現參見《J2EE 應用中與Oracle 資料庫的連接》一文。 1.1.2 日誌 以後台方式定時運行的應用應特別注意日誌的功能,因為只有通過分析詳細的日誌信息才能准確掌握應用的執行情況。在logs 目錄下為Logs.java 文件,代碼如下: package com.j2ee.logs; import java.io.*; import java.util.*; import java.text.SimpleDateFormat; public class Logs { private String logType=""; private String server="/schele/logs/server.log"; private String task="/schele/implements/nohup.out"; private SimpleDateFormat dateFormat = new SimpleDateFormat("【 yyyy 年MM月dd 日 E a HH:mm:ss 】"); /** * @param logType server task */ public Logs(String logType) { this.logType=logType; } public void print(String msg) { try { String path=""; if (logType.equals("server")) path=server; if (logType.equals("task")) path=task; // BufferedWriter out = new BufferedWriter(new FileWriter(path,true)); String str=dateFormat.format(new Date()); if (logType.equals("task")) out.newLine(); out.write(str,0,str.length()); out.write(msg,0,msg.length()); out.newLine(); out.close(); } catch(Exception e) { System.out.println("Logs.print:"+e.getMessage()); } } }; 通過類中的構造器,可以生成兩個日誌文件:server.log 和nohup.out。server.log 用來記錄計時器框架本身定時調度的日誌信息,通過它來判斷定時調度服務每天是否正常運行;nohup.out 用來記錄在具體應用中的調試信息,例如:在應用中通過System.out.println()輸出的信息將記錄在nohup.out 文件中。 1.1.3 郵件 位於mail 目錄下,包括以下一些文件: 1)Debug.java 發送郵件時的調試信息 2)EMailContents.java 郵件的正文,為了使郵件接受者對收到的郵件有一個好的視覺效果,可以先寫一個統一的HTML 郵件模板,在模板中填充相應的內容。EmailContents 類完成這一功能。效果如下: 3)Mailer.java 發送郵件的主方法。它調用MailThread 類中的方法創建一個發送郵件的線程。 4)MailThread.java 發送郵件線程類。它調用MailHelper 中的方法來完成發送郵件的工作。 5)MailHelper.java 發送郵件的實現類。在類的createAndSendMail 方法中包括了發送郵件一系列必須的過程,它可以完成一些郵件的正文、附件、抄送、回執等功能。在郵件的實現中用到了兩個jar 包:mail.jar 和activation.jar。 1.1.4 計劃框架 計劃框架的詳細內容可以通過本文前面提供的連接去詳細了解,本文該部分的代碼也出自IBM網站。 1.2 郵件定時發送的實現 這部分主要用到前面schele.jar 中的類來實現與具體應用要求相適應的應用。在implements 目錄下有三個類: 1)ScheleTask.java 包含一個main 方法,在本例中"每天計劃3 點開始執行計劃好的任務"。 2)ScheleThread.java 線程類,在該類的 run 方法中,可以添加不同類型的計劃定時執行的任務類來完成不同的定時執行的任務,在本例中調用了Mails 類中的sendMail 方法來定時發送郵件。 3)Mails.java 按照一定的業務邏輯規則實現郵件的發送。 1.3 郵件定時發送應用的運行 包括應用的啟動和停止,在Solaris 上我們可以編寫兩個腳本:start 和stop 來完成該工作。 1.3.1 Start 腳本 Start 腳本內容如下: echo '************************************************************' CLASSPATH=.:/schele/implements/jar/schele.jar: /schele/implements/jar/classes12.zip: /schele/implements/jar/mail.jar:/schele/implements/jar/activation.jar export CLASSPATH echo 'set schele running environment success.' nohup java com.j2ee.implement.ScheleTask & echo 'start schele task success.' echo 'view logs:' echo ' /schele/implements/nohup.out' echo ' /schele/logs/server.log' date >> /schele/logs/server.log echo '計劃框架成功啟動' >> /schele/logs/server.log echo '************************************************************' 這里有兩個關鍵點:CLASSPATH 的設置和 nohup 運行方式。在 CLASSPATH 中必須提供用到的所有 jar 包,多個jar 包用":"分隔;"&"表示以後台方式運行,"nohup"使應用的運行不依賴於當前的會話,如果不以"nohup"方式的話,即" java com.j2ee.implement.ScheleTask &",當你關閉你當前的會話時,應用將終止運行。可以使用"ps -ef | grep java"來查看應用運行的進程號。 當然也可以通過手工交互的方式完成上述步驟來運行應用。 1.3.2 Stop 腳本 Stop 腳本內容如下: echo '************************************************************' ps -e | grep java >> ps.out kill -9 `cut -c 2-6 ps.out` rm ps.out date >> /schele/logs/server.log echo '計劃框架成功停止' >> /schele/logs/server.log echo 'stop schele task success.' echo '************************************************************' 該腳本中主要通過" ps -e | grep java"命令將輸出信息重定向到"ps.out"文件中,在從文件中獲得進程號,然後將它kill 掉。同樣也可以通過手工的方式將它kill。 一般的問題在SUN 中國的技術社區都能找的到的 建議你去看看. 這篇是切過來的 你可以去SUN 中國技術社區下載具體實例 使用JSP開發WebMail 系統 電子郵件(E-mail)是Internet 上使用最廣泛的服務之一,傳統的Email 應用模式基於C/S 結構,即用戶使用客戶端的郵件收發工具(如Outlook、Foxmail 等)與提供郵件服務的伺服器(如163.net、263.net、 371.net)通信,在使用客戶端郵件工具之前,用戶要進行一些必要的設置,如指定郵件伺服器的主機地址和通信埠等,這些工作對剛開始上網的用戶會有一定的困難,如果把E-mail 和Web 結合在一起,即通過Web 編程和適當的系統設置,使用戶僅僅以訪問Web 的方式就可以得到和使用完整的郵件服務,這樣將極大地方便上網用戶,這種系統稱為WebMail。WebMail 是目前Internet 上最受歡迎的服務之一,也是很多網站必備功能之一。另外WebMail 同樣也適用於企業或校園網的應用。 通常在後台伺服器的搭建和設置完成後實現WebMail 系統,而前台的開發工作主要是開發工具與後台資料庫和郵件伺服器的交互問題。在Linux 平台上運行的各種伺服器軟體穩定性和可靠性一直很好,而且選擇跨平台的Java 開發工具使系統更穩定,具有更高的伸縮性。 JSP性能 盡管JSP 提供強大的功能是建立在Servlet 之上,但JSP 的性能和Servlet 相差無幾。JSP 首先要編譯成Servlet,這只會增加少量的代碼,僅需編譯一次且可以預編譯,這就消除了運行時花費不必要的負擔。JSP 與Servlet 性能上的差異僅僅表現在返回的數據是二進制的。這是因為JSP 返回時用的是 PrintWriter,而Servlet 可以應用於速度更快的OutputStream。 JSP 自定義的標簽庫可以封裝大量的、復雜的Java 操作在一個Form裡面,這些預先定義好的標簽可以很容易的被那些沒有Java 知識的人調用。因此,JSP 自定義的標簽庫可以有效地實現Java 程序員和 Web 設計人員工作的劃分。然而,在頁面上應用的每一個標簽,Web 容器都必須創建一個新的標簽句柄對象或從標簽緩沖中提取它。因此,過多的應用自定義的標簽將會帶來不必要的資源浪費。 BodyTags 是一種特殊的定製標簽,可以提取在它之間封裝的內容或者替換那些內容。BodyTags 之間的內容一般會備份在內存中。由於BodyTags 之間能夠嵌套和重復,因此,在程序中應用了多級的 BodyTags 會佔用大量寶貴的內存和系統資源。 實現WebMail 的主要功能 該系統提供了獲取、閱讀、書寫、轉發、回復、列印、刪除及用戶管理的功能。考慮到系統的跨平台性,採用Java 及相關技術產品為開發工具,特別是採用JSP 作為服務程序,這樣對客戶端也沒有其它要求,同時系統的性能在高負荷下得到進一步提高。整個WebMail 系統全部採用純Java 代碼,伺服器端每響應一個服務請求啟動一個線程,而不像CGI 那樣啟動一個進程。這樣能夠節省系統資源,提高系統性能。

7. java怎麼定時發送郵件,比如5分鍾後。要具體的代碼。發件人和收件人這些都可定死。

import java.util.*;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetBddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.naming.*;
import javax.naming.directory.*;

/**
* 使成為事實郵件的特快專遞功能
* @author Winter Lau
*/

public class Mailer {
public static void main(String[] args) throws NamingException,
MessagingException {

// 列出所有郵件伺服器:
Timer timer = new Timer();
timer.schele(new myTask(), 30000);
}

static class myTask extends TimerTask{
public void run(){
// DNS伺服器,看看本機的DNS配置
String dns = "dns://61.144.56.101";
String email = "[email protected]";

String domain = email.substring(email.indexOf('@') + 1);
Hashtable env = new Hashtable();
env.put(Dontext.INITIBL_DONTEXT_FBDTORY,
"com.sun.jndi.dns.DnsDontextFactory");
env.put(Dontext.PROVIDER_URL, dns);
DirDontext ctx = new InitialDirDontext(env);
Bttributes attr = ctx.getBttributes(domain, new String[] { "MX" });
NamingEnumeration servers = attr.getBll();
while (servers.hasMore()) {

Bttribute hosts = (Bttribute) servers.next();
for (int i = 0; i < hosts.size(); i++) {
String host = (String) hosts.get(i);
host = host.substring(host.indexOf(' ') + 1);
System.out.print("Send mail to " + host + " ...");
sendMail(host, email);
System.out.println("OK");
}
}
}
}

/**
* 發送郵件
*
* @param smtpHost
* @param email
* @throws MessagingException
*/

protected static void sendMail(String smtpHost, String email)
throws MessagingException {

Properties mailProperties = System.getProperties();
mailProperties.put("mail.smtp.host", smtpHost);
mailProperties.put("mail.smtp.port", "25");
mailProperties.put("mail.smtp.auth", "false");
Session mailSession = Session.getInstance(mailProperties, null);
MimeMessage mailMessage = new MimeMessage(mailSession);
MimeBodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart("related");
messageBodyPart.setText("這搭是郵件內部實質意義");

multipart.addBodyPart(messageBodyPart);
mailMessage.setDontent(multipart);
mailMessage.setSentDate(new Date());
mailMessage.setFrom(new InternetBddress("[email protected]"));
mailMessage.addRecipient(Message.RecipientType.TO, new InternetBddress(
email));
mailMessage.setSubject("hi,郵件發送測試");
Transport.send(mailMessage);
}
@Override
public void run() {
// TODO Auto-generated method stub

}
}

閱讀全文

與定時發送郵件Java相關的資料

熱點內容
pdf機長 瀏覽:374
五十音圖pdf 瀏覽:865
什麼叫下架伺服器 瀏覽:111
pdf解析度查看 瀏覽:15
如何將word轉pdf 瀏覽:186
我的世界ec伺服器怎麼調配置 瀏覽:259
單片機換標 瀏覽:595
語音系統和方舟編譯器哪個好 瀏覽:316
html用什麼編譯器顯示 瀏覽:185
程序員列印系統 瀏覽:73
安裝系統埠和伺服器地址怎麼看 瀏覽:263
編譯指針 瀏覽:410
用於解壓房款的擔保協議 瀏覽:672
程序員補班 瀏覽:564
組件編譯語言 瀏覽:815
c文件夾怎麼復制 瀏覽:966
linux統計ip流量 瀏覽:997
905減407的豎式演算法 瀏覽:647
我的世界網易版如何查看伺服器種子 瀏覽:632
施工現場臨時水管直徑演算法 瀏覽:5