❶ java郵件功能自動發送郵件,outloook可以顯示圖片,gmail卻不顯示
Google Calendar發布後,我還在奇怪怎麼沒有和Gmail整合起來,成為一個在web上運行的Outlook。結果今天版晚上回家上網回復郵件,發權現在gmail的輸入框上已經有了一個"Add event info",再往上看,gmail的圖標上也新加了Calendar的鏈接。
❷ 如何用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 那樣啟動一個進程。這樣能夠節省系統資源,提高系統性能。
❸ 如何使用javamail 接收含有圖片和附件的唷考
參考代碼如下:
import javax.mail.*;
import java.util.*;
import java.io.*;
public class ReceiveMail {
//處理任何一種郵件都需要的方法
private void handle(Message msg) throws Exception {
System.out.println("郵件主題:" + msg.getSubject());
System.out.println("郵件作者:" + msg.getFrom()[0].toString());
System.out.println("發送日期:" + msg.getSentDate());
}
//處理文本郵件
private void handleText(Message msg) throws Exception {
this.handle(msg);
System.out.println("郵件內容:"+msg.getContent());
}
//處理Multipart郵件,包括了保存附件的功能
private static void handleMultipart(Message msg) throws Exception {
String disposition;
BodyPart part;
Multipart mp = (Multipart) msg.getContent();
//Miltipart的數量,用於除了多個part,比如多個附件
int mpCount = mp.getCount();
for (int m = 0; m < mpCount; m++) {
this.handle(msg);
part = mp.getBodyPart(m);
disposition = part.getDisposition();
//判斷是否有附件
if (disposition != null && disposition.equals(Part.ATTACHMENT))
{
//這個方法負責保存附件
saveAttach(part);
} else {
//不是附件,就只顯示文本內容
System.out.println(part.getContent());
}
}
}
private static void saveAttach(BodyPart part) throws Exception {
//得到未經處理的附件名字
String temp = part.getFileName();
//除去發送郵件時,對中文附件名編碼的頭和尾,得到正確的附件名
//(請參考發送郵件程序SendMail的附件名編碼部分)
String s = temp.substring(8, temp.indexOf("?="));
//文件名經過了base64編碼,下面是解碼
String fileName = base64Decoder(s);
System.out.println("有附件:" + fileName);
InputStream in = part.getInputStream();
FileOutputStream writer = new FileOutputStream(new File(
"保存附件的本地路徑"+ "\\"+fileName));
byte[] content = new byte[255];
int read = 0;
while ((read = in.read(content)) != -1) {
writer.write(content);
}
writer.close();
in.close();
}
//base64解碼
private static String base64Decoder(String s) throws Exception {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] b = decoder.decodeBuffer(s);
return (new String(b));
}
public static void receive(String receiverMailBoxAddress, String username,String password) {
//本人用的是yahoo郵箱,故接受郵件使用yahoo的pop3郵件伺服器
String host = "pop.mail.yahoo.com.cn";
try {
//連接到郵件伺服器並獲得郵件
Properties prop = new Properties();
prop.put("mail.pop3.host", host);
Session session = Session.getDefaultInstance(prop);
Store store = session.getStore("pop3");
store.connect(host, username, password);
Folder inbox = store.getDefaultFolder().getFolder("INBOX");
//設置inbox對象屬性為可讀寫,這樣可以控制在讀完郵件後直接刪除該附件
inbox.open(Folder.READ_WRITE);
Message[] msg = inbox.getMessages();
FetchProfile profile = new FetchProfile();
profile.add(FetchProfile.Item.ENVELOPE);
inbox.fetch(msg, profile);
for (int i = 0; i < msg.length; i++) {
//標記此郵件的flag標志對象的DELETED位為true,可以在讀完郵件後直接刪除該附件,具體執行時間是在調用
//inbox.close()方法的時候
msg[i].setFlag(Flags.Flag.DELETED, true);
handleMultipart(msg[i]);
System.out.println("****************************");
}
if (inbox != null) {
//參數為true表明閱讀完此郵件後將其刪除,更多的屬性請參考mail.jar的API
inbox.close(true);
}
if (store != null) {
store.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
❹ JavaMail發送帶圖片的html郵件,OutLook 2007無法顯示圖片,Foxmail正常
你在 javamail 裡面設置附件的時候,需要注意兩個地方:
1)設置 subType 為 related (這個是必須的,否則有些程序會將內置的圖當成附件來處理了)
2) 使用 MimeMultipart 來將各個內容分別 add 進去。
你可以直接參考下面鏈接的內容:
http://stackoverflow.com/questions/2996514/inline-images-in-email-using-javamail
這裡面給你把部分內容直接復制出來了:
MimeMultipartrootContainer=newMimeMultipart();
rootContainer.setSubType("related");
rootContainer.addBodyPart();//notinfocushere
rootContainer.addBodyPart(createInlineImagePart());
...
message.setContent(rootContainer);
message.setHeader("MIME-Version","1.0");
message.setHeader("Content-Type",rootContainer.getContentType());
...
BodyPartcreateInlineImagePart(byte[])throwsMessagingException{
InternetHeadersheaders=newInternetHeaders();
headers.addHeader("Content-Type","image/jpeg");
headers.addHeader("Content-Transfer-Encoding","base64");
MimeBodyPartimagePart=newMimeBodyPart(headers,);
imagePart.setDisposition(MimeBodyPart.INLINE);
imagePart.setContentID("<image>");
imagePart.setFileName("image.jpg");
returnimagePart;
❺ 如何利用javamail發送帶圖片跟鏈接的郵件
代碼如下:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class EmailTest {
public static void main(String[] args) throws Exception{
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "smtp.163.com");
Session session = Session.getInstance(props,
new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication("xxx","xxx");//這里分別填寫發送email的用戶名、密碼
}
}
);
session.setDebug(true);
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("xxx"));//這里是發送方的email地址如:[email protected]
msg.setSubject("test javamail");
msg.setRecipients(RecipientType.TO,
InternetAddress.parse("xxx"));//這里是接收方的email地址如:[email protected]
msg.setContent("<a href=\"http://www.google.cn\">谷歌</a>","text/html;charset=gb2312");
Transport.send(msg);
}
}