星期六, 十月 06, 2007

「轉錄」利用JavaMail收/發Gmail郵件(SSL)

利用JavaMail收/發Gmail郵件(SSL)

Gmail目前已經啟用了POP3和SMTP服務,具體情況請看 http://www.javayou.com/showlog.jspe?log_id=490

與其他郵箱不同的是Gmail提供的POP3和SMTP是使用安全套接字層SSL的,因此常規的JavaMail程序是無法收發郵件的,下面是使用JavaMail如何收取Gmail郵件以及發送郵件的代碼:

1. 郵件收取

package lius.javamail.ssl;

import java.io.UnsupportedEncodingException;
import java.security.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;

/**
* 用於收取Gmail郵件
* @author Winter Lau
*/
public class GmailFetch {

public static void main(String argv[]) throws Exception {

Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

// Get a Properties object
Properties props = System.getProperties();
props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.pop3.socketFactory.fallback", "false");
props.setProperty("mail.pop3.port", "995");
props.setProperty("mail.pop3.socketFactory.port", "995");

//以下步驟跟一般的JavaMail操作相同
Session session = Session.getDefaultInstance(props,null);

//請將紅色部分對應替換成你的郵箱帳號和密碼
URLName urln = new URLName("pop3","pop.gmail.com",995,null,
"[郵箱帳號]", "[郵箱密碼]");
Store store = session.getStore(urln);
Folder inbox = null;
try {
store.connect();
inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
FetchProfile profile = new FetchProfile();
profile.add(FetchProfile.Item.ENVELOPE);
Message[] messages = inbox.getMessages();
inbox.fetch(messages, profile);
System.out.println("收件箱的郵件數:" + messages.length);
for (int i = 0; i < messages.length; i++) {
//郵件發送者
String from = decodeText(messages[i].getFrom()[0].toString());
InternetAddress ia = new InternetAddress(from);
System.out.println("FROM:" + ia.getPersonal()+'('+ia.getAddress()+')');
//郵件標題
System.out.println("TITLE:" + messages[i].getSubject());
//郵件大小
System.out.println("SIZE:" + messages[i].getSize());
//郵件發送時間
System.out.println("DATE:" + messages[i].getSentDate());
}
} finally {
try {
inbox.close(false);
} catch (Exception e) {}
try {
store.close();
} catch (Exception e) {}
}
}

protected static String decodeText(String text)
throws UnsupportedEncodingException {
if (text == null)
return null;
if (text.startsWith("=?GB") || text.startsWith("=?gb"))
text = MimeUtility.decodeText(text);
else
text = new String(text.getBytes("ISO8859_1"));
return text;
}

}

2. 發送郵件

package lius.javamail.ssl;

import java.security.Security;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
* 使用Gmail發送郵件
* @author Winter Lau
*/
public class GmailSender {

public static void main(String[] args) throws AddressException, MessagingException {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
// Get a Properties object
Properties props = System.getProperties();
props.setProperty("mail.smtp.host", "smtp.gmail.com");
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.auth", "true");
final String username = "[郵箱帳號]";
final String password = "[郵箱密碼]";
Session session = Session.getDefaultInstance(props, new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}});

// -- Create a new message --
Message msg = new MimeMessage(session);

// -- Set the FROM and TO fields --
msg.setFrom(new InternetAddress(username + "@mo168.com"));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("[收件人地址]",false));
msg.setSubject("Hello");
msg.setText("How are you");
msg.setSentDate(new Date());
Transport.send(msg);

System.out.println("Message sent.");
}
}

關於郵件的解析請看 http://www.javayou.com/showlog.jspe?log_id=372
更多關於javamail的文章 http://www.javayou.com/main.jspe?query=javamail

星期三, 六月 06, 2007

陳奕迅 月黑風高

看了以後會很有感觸的一首歌,父母對孩子的心意,真的都是不求回報的....

作詞:林夕 作曲:C.Y.Kong 編曲:C.Y.Kong

月黑風高 彎腰在計程車
雨點大 不短的路 給矇蔽
我那司機這樣子 熬夜到天亮 不容易

誰知他說 開完車 還要替
——搭車掃地 才休息
如果能多爭幾個錢 讓兒子上大學 沒關係

他還說 沒關係 再困也沒有問題
只要下一代了不起
下一代 我們在 我們在唉聲嘆氣
在沼澤裡無能為力

*想不到為什麼會在這裡 又想去哪裡
 越懂得多越不滿意 越喜歡回憶
 看到了背影 看不到自己 路還也都懷疑
 一直走千萬公里 忘記了目的*

他笑著說 從來沒 沒唸過書
只懂得出賣勞力 求休息
所以才希望他兒子 將來能行醫 有出息

他說已經 大年紀 開著車
右手有一點麻痹 沒問題
後天有醫生做兒子 每次想到這裡 就歡喜

他還說 再吃力也不要 穿的吃力
否則怎去畢業典禮
下一代 我們在 我們在唉聲嘆氣
在沼澤裡無能為力

REPEAT*

想不到為什麼會在這裡 又想去哪裡
越懂得多越不滿意 越喜歡回憶
看到了路燈 看不到自己 一直到司機說
他老了 忘了問我 你想去哪裡

星期二, 五月 15, 2007

接計畫


最近老闆要我們幫某中心的主任(稱某甲)寫一個問卷的網站,這也算是我第一次幫別人寫這樣的一個問卷網站,一開始其實沒有很想接的意思,畢竟以我的程式能力,要我在兩個月就生出來,實在有點趕!

後來跟老闆還有某甲開過會以後,大致上好像也沒有轉圜的餘地,就是該寫了....囧....,不過還好大致上的感覺不會很困難,現有的系統也有部份可以支援,於是最近開始動工。


也許是之前沒有類似的經驗,寫了以後開始發覺原來最大的問題不是在程式方面,而是在使用者的需求與我們設計者的溝通上面,昨天寫了個大概的入口網頁,並且把題型的大概樣式修改了一下,給對方的某甲學生看一下,沒想到得到的回應是:「我想我們老師應該不會喜歡!...你可能要換別的」。

當下的心情真的是ox#%...,一開始的需求就說得不明不白,某甲:「我們希望做出來的網頁可以讓學生感覺作答很輕鬆,然後可以看起來不像張考卷」,老實說這種需求大概就像是告訴你長大以後要好好作人,不可以殺人放火一樣!

也許這就是文理很難溝通的原因吧,我想要的是你有什麼input,想要什麼樣子的output,如果你有喜歡的美工方式,請給我個範例,畢竟我不梵谷或者畢卡索,我的美術能力可能還停留在小學程度,要我呈現這麼意境的東西,我到不如給你一張我的簽名照!...

星期一, 五月 14, 2007

許茹芸 -好聽-

好聽
演唱 : 許茹芸 詞 / 曲 : 吳克群 編曲 : Op.dan (鴉片丹)



你說的話 我都相信 說得好聽 說得甜蜜
你說的每一句 我都相信

為了愛情 失了聰明 聽你的話 閉上眼睛
這個夢多美麗 讓它繼續

你說的話 總那麼好聽 你愛不愛 我不能確定
也許你只把它當遊戲 我卻愛得太用力

你說的話 我都相信 說得好聽 說得甜蜜
你說的每一句 我都相信

為了愛情 失了聰明 聽你的話 閉上眼睛
這個夢多美麗 讓它繼續

你說的話 總那麼好聽 你愛不愛 我不能確定
也許你只把愛當遊戲 我卻沒有那麼聰明

你說的話 總那麼好聽 你愛不愛 我不想確定
我會關掉你送的手機 然後 靜靜 不去理

你說的話 總那麼好聽 你愛不愛 我不想確定
我會關掉你送的手機 然後 靜靜 靜靜 是再也不去理

我在宜蘭也很有名!

禮拜六跟家人去了宜蘭一趟,真是好山好水好風景,吃得東西也便宜,現在有了雪山隧道以後交通更是方便,最好笑的是看到了路邊的一個攤子,原來我在宜蘭也這麼有名!

很長的雪山隧道,全長共12.9公里,從進去到出來,快的話要花12多分鐘,(速限70..=.=)

星期四, 五月 03, 2007

OPEN小將露點.....激凸


這張小婷你好好收藏吧

星期三, 四月 25, 2007

有感而發

你以為我只是條狗,我卻覺得你們不過是個人...


我覺得人真的是很好笑的動物,
如果今天深入其中,最看不清楚真相的人永遠是自己!
如果等置身於其外時,我們卻又能明白的釐清一切.....

一切的一切就像是做了一場夢醒過來的感覺,
只有在醒著的時候,才會意識到原來剛剛只是場夢!..

星期二, 四月 24, 2007

中毒

昨天整個下午都在作重灌,灌到整個人超不爽,無緣無故就中毒,這大概算我有電腦以來最嚴重的一次吧,以前還真的沒中過毒...推測的原因大概是郵件的關係,一堆垃圾郵件,唉,看來以後還是少用outlook好了...