用JAMES實現自己的郵件服務器
應用服務器Apache企業應用XMLC簡介
James 是一個企業級的郵件服務器,它完全實現了smtp 和 pops 以及nntp 協議。同時,james服務器又是一個郵件應用程序平臺。James的核心是Mailet API,而james 服務齊是一個mailet的容器。它可以讓你非常容易的實現出很強大的郵件應用程序。James開源項目被廣泛的應用于與郵件有關的項目中。你可以通過它來搭建自己的郵件服務器。我們可以利用Mailet API,編程接口來實現自己所需的業務。James集成了Avalon 應用程序框架以及Phoenix Avalon 框架容器。Phoenix為james 服務器提供了強大的支持。需要說明的是Avalon開源項目目前已經關閉。
快速上手
安裝james
我這次使用的安裝包是james 2.3.1。大家可以從這里下載到http://james.apache.org/download.cgi
現在讓我們開始我們激動人心的james之旅。首先我們將james-binary-2.3.1.zip解壓縮下載到你的安裝目錄。我們可以把這個過程理解為安裝的過程。我在這里將它解壓到c:\.并且把它改名為james.這樣我們的james就安裝好了。目錄為C:\james。很簡單吧!
準備知識 - 學習一些必要的知識
在我使用james的時候讓我感覺首先理解james的應用程序結構是很重要的。否則你會在使用中感到很困惑。
它的應用程序結構是這樣的:
James
|_ _apps
|_ _bin
|_ _conf
|_ _ext
|_ _lib
|_ _logs
|_ _tools
我們重點介紹一下兩個文件夾bin 和 apps.
bin目錄中的run.bat和run.sh是James的啟動程序。只要記住這個重要文件就可以。
啟動之后控制臺顯示如下:
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 目錄下有個james的子目錄這個目錄是它的核心。
james
|_ _SAR-INF
|_ _conf
|_ _logs
|_ _var
|_mail
|_address-error
|_error
|_indexes
|_outgoing
|_relay-denied
|_spam
|_spool
|_nntp
|_....
…
|_users
SAR-INF 下有一個config.xml是james中的核心配置文件。
Logs 包含了與james有關的Log。調試全靠它了。
Var 包含了一些文件夾通過它們的名字我們大概也能猜測出它們的用途。Mail主要用于存儲郵件。nntp主要用于新聞服務器。Users用于存儲所有郵件服務器的用戶。也就是郵件地址前面的東東。如:pig@sina.com的pig就是所謂用用戶。
創建用戶:
我們在James上建若干用戶,用來測試收發郵件。當然如果你不用james本身的用戶也可以。James以telnet 的方式提供了接口用來添加用戶。下面我來演示一下。
首先使用telnet來連接james的remote manager .
1.telnet localhost 4555 回車
2.然后輸入管理員用戶名和密碼(user/pwd : root/root 是默認設置這個可以在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
得到上面的信息說明我們已經添加成功。
發送器
這個類主要用來測試我們的郵件服務器,可以不用將其打入包中。
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;//認證
public Mail() {
// 設置郵件相關
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);
// 設置郵件服務器
prop = System.getProperties();
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.host", mailServer);
// 產生新的Session服務
mailSession = mailSession.getDefaultInstance(prop,
(Authenticator) mailauth);
message = new MimeMessage(mailSession);
try {
message.setFrom(new InternetAddress(From)); // 設置發件人
message.setRecipient(Message.RecipientType.TO,
new InternetAddress(To));// 設置收件人
message.setSubject(mailSubject);// 設置主題
message.setContent(MailContent, "text/plain");// 設置內容
message.setSentDate(new Date());// 設置日期
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);
}
}
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;//認證
public Mail() {
// 設置郵件相關
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);
// 設置郵件服務器
prop = System.getProperties();
prop.put("mail.smtp.auth", "true");
prop.put("mail.smtp.host", mailServer);
// 產生新的Session服務
mailSession = mailSession.getDefaultInstance(prop,
(Authenticator) mailauth);
message = new MimeMessage(mailSession);
try {
message.setFrom(new InternetAddress(From)); // 設置發件人
message.setRecipient(Message.RecipientType.TO,
new InternetAddress(To));// 設置收件人
message.setSubject(mailSubject);// 設置主題
message.setContent(MailContent, "text/plain");// 設置內容
message.setSentDate(new Date());// 設置日期
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);
}
}
posted on 2012-12-16 13:14 paulwong 閱讀(908) 評論(0) 編輯 收藏 所屬分類: SPRING INTERGRATION