應(yīng)用服務(wù)器Apache企業(yè)應(yīng)用XMLC
簡(jiǎn)介
James 是一個(gè)企業(yè)級(jí)的郵件服務(wù)器,它完全實(shí)現(xiàn)了smtp 和 pops 以及nntp 協(xié)議。同時(shí),james服務(wù)器又是一個(gè)郵件應(yīng)用程序平臺(tái)。James的核心是Mailet API,而james 服務(wù)齊是一個(gè)mailet的容器。它可以讓你非常容易的實(shí)現(xiàn)出很強(qiáng)大的郵件應(yīng)用程序。James開(kāi)源項(xiàng)目被廣泛的應(yīng)用于與郵件有關(guān)的項(xiàng)目中。你可以通過(guò)它來(lái)搭建自己的郵件服務(wù)器。我們可以利用Mailet API,編程接口來(lái)實(shí)現(xiàn)自己所需的業(yè)務(wù)。James集成了Avalon 應(yīng)用程序框架以及Phoenix Avalon 框架容器。Phoenix為james 服務(wù)器提供了強(qiáng)大的支持。需要說(shuō)明的是Avalon開(kāi)源項(xiàng)目目前已經(jīng)關(guān)閉。
快速上手
安裝james
我這次使用的安裝包是james 2.3.1。大家可以從這里下載到http://james.apache.org/download.cgi
現(xiàn)在讓我們開(kāi)始我們激動(dòng)人心的james之旅。首先我們將james-binary-2.3.1.zip解壓縮下載到你的安裝目錄。我們可以把這個(gè)過(guò)程理解為安裝的過(guò)程。我在這里將它解壓到c:\.并且把它改名為james.這樣我們的james就安裝好了。目錄為C:\james。很簡(jiǎn)單吧!
準(zhǔn)備知識(shí) - 學(xué)習(xí)一些必要的知識(shí)
在我使用james的時(shí)候讓我感覺(jué)首先理解james的應(yīng)用程序結(jié)構(gòu)是很重要的。否則你會(huì)在使用中感到很困惑。
它的應(yīng)用程序結(jié)構(gòu)是這樣的:
James
|_ _apps
|_ _bin
|_ _conf
|_ _ext
|_ _lib
|_ _logs
|_ _tools
我們重點(diǎn)介紹一下兩個(gè)文件夾bin 和 apps.
bin目錄中的run.bat和run.sh是James的啟動(dòng)程序。只要記住這個(gè)重要文件就可以。
啟動(dòng)之后控制臺(tái)顯示如下:
Using PHOENIX_HOME: C:\james
Using PHOENIX_TMPDIR: C:\james\temp
Using JAVA_HOME: C:\j2sdk1.4.2_02
Phoenix 4.2
James Mail Server 2.3.1
Remote Manager Service started plain:4555
POP3 Service started plain:110
SMTP Service started plain:25
NNTP Service started plain:119
FetchMail Disabled
Apps 目錄下有個(gè)james的子目錄這個(gè)目錄是它的核心。
james
|_ _SAR-INF
|_ _conf
|_ _logs
|_ _var
|_mail
|_address-error
|_error
|_indexes
|_outgoing
|_relay-denied
|_spam
|_spool
|_nntp
|_....
…
|_users
SAR-INF 下有一個(gè)config.xml是james中的核心配置文件。
Logs 包含了與james有關(guān)的Log。調(diào)試全靠它了。
Var 包含了一些文件夾通過(guò)它們的名字我們大概也能猜測(cè)出它們的用途。Mail主要用于存儲(chǔ)郵件。nntp主要用于新聞服務(wù)器。Users用于存儲(chǔ)所有郵件服務(wù)器的用戶。也就是郵件地址前面的東東。如:pig@sina.com的pig就是所謂用用戶。
創(chuàng)建用戶:
我們?cè)贘ames上建若干用戶,用來(lái)測(cè)試收發(fā)郵件。當(dāng)然如果你不用james本身的用戶也可以。James以telnet 的方式提供了接口用來(lái)添加用戶。下面我來(lái)演示一下。
首先使用telnet來(lái)連接james的remote manager .
1.telnet localhost 4555 回車(chē)
2.然后輸入管理員用戶名和密碼(user/pwd : root/root 是默認(rèn)設(shè)置這個(gè)可以在config.xml中修改)
JAMES Remote Administration Tool 2.3.1
Please enter your login and password
Login id:
root
Password:
root
Welcome root. HELP for a list of commands
3.添加用戶
adduser kakaxi kakaxi
User kakaxi added
Adduser mingren mingren
User mingren added
4.查看添加情況
listusers
Existing accounts 2
user: mingren
user: kakaxi
得到上面的信息說(shuō)明我們已經(jīng)添加成功。
發(fā)送器
這個(gè)類(lèi)主要用來(lái)測(cè)試我們的郵件服務(wù)器,可以不用將其打入包中。
java 代碼
package com.paul.jamesstudy;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Mail {
private String mailServer, From, To, mailSubject, MailContent;
private String username, password;
private Session mailSession;
private Properties prop;
private Message message;
// Authenticator auth;//認(rèn)證
public Mail() {
// 設(shè)置郵件相關(guān)
username = "kakaxi";
password = "kakaxi";
mailServer = "localhost";
From = "kakaxi@localhost";
To = "mingren@localhost";
mailSubject = "Hello Scientist";
MailContent = "How are you today!";
}
public void send(){
EmailAuthenticator mailauth =
new EmailAuthenticator(username, password);
// 設(shè)置郵件服務(wù)器
prop = System.getProperties();
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.host", mailServer);
// 產(chǎn)生新的Session服務(wù)
mailSession = mailSession.getDefaultInstance(prop,
(Authenticator) mailauth);
message = new MimeMessage(mailSession);
try {
message.setFrom(new InternetAddress(From)); // 設(shè)置發(fā)件人
message.setRecipient(Message.RecipientType.TO,
new InternetAddress(To));// 設(shè)置收件人
message.setSubject(mailSubject);// 設(shè)置主題
message.setContent(MailContent, "text/plain");// 設(shè)置內(nèi)容
message.setSentDate(new Date());// 設(shè)置日期
Transport tran = mailSession.getTransport("smtp");
tran.connect(mailServer, username, password);
tran.send(message, message.getAllRecipients());
tran.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Mail mail;
mail = new Mail();
System.out.println("sending");
mail.send();
System.out.println("finished!");
}
}
class EmailAuthenticator extends Authenticator {
private String m_username = null;
private String m_userpass = null;
void setUsername(String username) {
m_username = username;
}
void setUserpass(String userpass) {
m_userpass = userpass;
}
public EmailAuthenticator(String username, String userpass) {
super();
setUsername(username);
setUserpass(userpass);
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(m_username, m_userpass);
}
}