简介
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 代码
1. package com.yy.jamesstudy;
2.
3. import java.util.Date;
4. import java.util.Properties;
5.
6. import javax.mail.Authenticator;
7. import javax.mail.Message;
8. import javax.mail.PasswordAuthentication;
9. import javax.mail.Session;
10. import javax.mail.Transport;
11. import javax.mail.internet.InternetAddress;
12. import javax.mail.internet.MimeMessage;
13.
14. public class Mail {
15. private String mailServer, From, To, mailSubject, MailContent;
16.
17. private String username, password;
18.
19. private Session mailSession;
20.
21. private Properties prop;
22.
23. private Message message;
24.
25. // Authenticator auth;//认证
26. public Mail() {
27. // 设置邮件相关
28. username = "kakaxi";
29. password = "kakaxi";
30. mailServer = "localhost";
31. From = "kakaxi@localhost";
32. To = "mingren@localhost";
33. mailSubject = "Hello Scientist";
34. MailContent = "How are you today!";
35. }
36. public void send(){
37. EmailAuthenticator mailauth =
38. new EmailAuthenticator(username, password);
39. // 设置邮件服务器
40. prop = System.getProperties();
41. prop.put("mail.smtp.auth", "true");
42. prop.put("mail.smtp.host", mailServer);
43. // 产生新的Session服务
44. mailSession = mailSession.getDefaultInstance(prop,
45. (Authenticator) mailauth);
46. message = new MimeMessage(mailSession);
47.
48. try {
49. message.setFrom(new InternetAddress(From)); // 设置发件人
50. message.setRecipient(Message.RecipientType.TO,
51. new InternetAddress(To));// 设置收件人
52. message.setSubject(mailSubject);// 设置主题
53. message.setContent(MailContent, "text/plain");// 设置内容
54. message.setSentDate(new Date());// 设置日期
55. Transport tran = mailSession.getTransport("smtp");
56. tran.connect(mailServer, username, password);
57. tran.send(message, message.getAllRecipients());
58. tran.close();
59. } catch (Exception e) {
60. e.printStackTrace();
61. }
62. }
63. public static void main(String[] args) {
64. Mail mail;
65. mail = new Mail();
66. System.out.println("sending......");
67. mail.send();
68. System.out.println("finished!");
69. }
70.
71. }
72.
73. class EmailAuthenticator extends Authenticator {
74. private String m_username = null;
75.
76. private String m_userpass = null;
77.
78. void setUsername(String username) {
79. m_username = username;
80. }
81.
82. void setUserpass(String userpass) {
83. m_userpass = userpass;
84. }
85.
86. public EmailAuthenticator(String username, String userpass) {
87. super();
88. setUsername(username);
89. setUserpass(userpass);
90. }
91.
92. public PasswordAuthentication getPasswordAuthentication() {
93. return new PasswordAuthentication(m_username, m_userpass);
94. }
95. }
<v:shapetype id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe"
o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600"
o:spt="75"> </v:shapetype>
实现-Matcher 和 Mailet编写
我先解释一下大概的流程:当james
接收到一个smtp请求时首先会交给matcher来进行一系列过滤动作。然后由matcher交给相应的mailet来进行处理。James就相当于一
个matcher和mailet的容器。就像tomcat之于servlet。而mailet和servlet很是相似。
我们这里要完成的功能很简单,就是当james邮件服务器接收到鸣人(人名)后把发送者和邮件正文打印到控制台。我们分析这个需求发现我们需要写一个
matcher以及一个mailet.matcher用来过滤而mailet用来将邮件内容打印到控制台。为了简单起见,我这次只是继承了
GenericMailet 和GenericRecipientMatcher 两个已经实现的 mailet 和
matcher.具体的Matcher和Mailet的使用我以后会整理成另外一篇文章。
Matcher 的实现
1. package com.yy.jamesstudy;
2.
3. import javax.mail.MessagingException;
4. import org.apache.mailet.GenericRecipientMatcher;
5. import org.apache.mailet.MailAddress;
6. /**
7. * System jamesstudy
8. * Package com.yy.jamesstudy
9. *
10. * @author Yang Yang
11. * Created on 2007-9-14下午02:17:07
12. */
13. public class BizMatcher extends GenericRecipientMatcher {
14.
15. public boolean matchRecipient(MailAddress recipient) throws MessagingException {
16. //只接受邮件地址包含鸣人的邮件
17. if (recipient.getUser().indexOf("mingren")!=-1) {
18. return true;
19. }
20. return false;
21. }
22. }
GenericRecipientMatcher 是一个针对收件人进行过滤的matcher.
Mailet 的实现
1. package com.yy.jamesstudy;
2.
3. import java.io.IOException;
4. import javax.mail.MessagingException;
5. import javax.mail.internet.MimeMessage;
6. import org.apache.mailet.GenericMailet;
7. import org.apache.mailet.Mail;
8. import org.apache.mailet.MailAddress;
9. /**
10. * System jamesstudy
11. * Package com.yy.jamesstudy
12. *
13. * @author Yang Yang
14. * Created on 2007-9-14下午02:16:31
15. */
16. public class BizMaillet extends GenericMailet {
17.
18. public void service(Mail mail) {
19. MailAddress ma = mail.getSender();
20. System.out.println("sender:"+ma.toInternetAddress().toString());
21. try {
22. MimeMessage mm = mail.getMessage();
23. System.out.println("content:"+(String)mm.getContent().toString());
24. } catch (IOException e) {
25. e.printStackTrace();
26. } catch (MessagingException e) {
27. e.printStackTrace();
28. }
29. }
30. }
GenericMailet 是一个mailet的基本实现。
编译
我们把这两个java文件的class文件编译成一个名字为:jamesstudy.jar 的jar文件。
发布-Matcher 和 Mailet以及config.xml
1.发布jar文件
我们把这个jar文件发布到C:/james/apps/james/SAR-INF/lib。
注意:如果没有找到相关目录,则需要先启动一遍james,相关的文件夹才会被创建。还有一点需要特别说明:lib目录是通过我们手动创建的。
2.将Matcher 和 Mailet发布到config.xml中,config.xml在james/apps/james/SAR-INF/下
1)我们首先找到如下内容
1. <mailetpackages>
2. <mailetpackage>org.apache.james.transport.mailetsmailetpackage>
3. <mailetpackage>org.apache.james.transport.mailets.smimemailetpackage>
4. mailetpackages>
5. <matcherpackages>
6. <matcherpackage>org.apache.james.transport.matchersmatcherpackage>
7. <matcherpackage>org.apache.james.transport.matchers.smimematcherpackage>
8. matcherpackages>
2)加入包声明
1. <mailetpackages>
2. <mailetpackage>com.yy.jamesstudymailetpackage>
3. <mailetpackage>org.apache.james.transport.mailetsmailetpackage>
4. <mailetpackage>org.apache.james.transport.mailets.smimemailetpackage>
5. mailetpackages>
6.
7. <matcherpackages>
8. <matcherpackage>com.yy.jamesstudy matcherpackage>
9. <matcherpackage>org.apache.james.transport.matchersmatcherpackage>
10. <matcherpackage>org.apache.james.transport.matchers.smimematcherpackage>
11. matcherpackages>
3)加入 Matcher 和 Mailet的关联关系
找到 <processor name="root"></processor> 元素在它的下面加入
xml 代码
1. <mailet match="BizMatcher" class="BizMaillet"/>
Mailet元素代表了一个matcher和一个mailet的组合。Match属性:是指matcher的类名。而class 属性:是指mailet的类名。
最后别忘了,保存退出。并且重新启动james服务器。
测试- 验证我们的mail应用程序
我们主要通过mail类来测试我们的应用。还记得我们刚才写的那个mail类吗?!在那个类中我们初始化了相关的信息.
username = "kakaxi";
password = "kakaxi";
mailServer = "localhost";
From = "kakaxi@localhost";
To = "mingren@localhost";
mailSubject = "Hello Scientist";
MailContent = "How are you today!";
发件人是卡卡西,收件人是mingren.这两个用户我们在前面都已经创建完毕。我们用他们来测试james的邮件收发以及mailet api的应用。
根据需求假设我们发给james
服务器(这里是james的默认配置:localhost)的邮件的收件人是鸣人。那么我们就能通过matcher监测到这封邮件,并且调用相应的
mailet来进行处理。由mailet打印出相应的邮件发送者和正文。运行Mail类后得到
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
sender:kakaxi@localhost
content:How are you today!
总结
最终我们看到发送者和正文的信息。That’s all ! 大功告成。
其实james的功能是非常非常强大的,尤其是它的Mailet
API能够帮助我们完成很多与邮件邮件有关的工作如过滤垃圾邮件。用它我们甚至可以搭建我们自己的企业邮件服务器。我们最近的项目中就使用到了。我们通过
james接收到的邮件,然后用matcher找到我们想要处理的邮件,然后通过mailet做一些业务上的处理。这篇文章涵盖的面很小。如果大家有兴趣
可以研究一下james项目。Config.xml实际上是最重要的文件,如果你把它研究透彻了那么就就算把Mailet
API研究透了。以后我可能会写一篇相关的文章,在这就不多说了。希望这篇文章能够对大家有所启发!有所帮助!祝大家工作顺利!
相关推荐
Dify平台+Excel批量分析实战:5分钟搞定大模型数据处理(附完整代码)
本文详细介绍了如何利用Dify平台的数据集功能,结合Excel和Python脚本,快速构建大模型批量数据处理流水线。通过实战案例演示,读者可在5分钟内完成客户反馈情感分析、产品文案生成等任务,实现从原始数据到结构化洞察的高效转化,极大提升工作效率。
用JAMES实现自己的邮件服务器 (一)
http://james.apache.org/download.cgi 现在让我们开始我们激动人心的james之旅。首先我们将james-binary-2.3.1.zip解压缩下载到你的安装目录。我们可以把这个过程理解为安装的过程。我在这里将它解压到c:/.并且把它改名为james.这样我们的james就安装好了。目录为C:/james。很简单吧! pig@sina.co
轴承寿命预测实战:手把手教你用IEEE PHM2012数据集训练模型(附Python代码)
本文详细介绍了如何利用IEEE PHM2012数据集构建轴承剩余寿命预测模型,从数据预处理、特征工程到LSTM模型训练与部署,提供了完整的Python代码实现。通过实战案例,帮助读者掌握预测性维护中的关键技术,提升工业设备的运行安全与效率。
James2.1文档目录
google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java
【无人机设计与控制】基于PID控制的四旋翼无人机系统Matlab仿真
本文设计并仿真了基于PID控制的四旋翼无人机系统。首先,建立了四旋翼无人机的数学模型,涵盖了无人机的动力学和控制系统。通过PID控制器对四旋翼的姿态和位置进行控制,以实现其稳定飞行。使用MATLAB/Simulink对该系统进行仿真,验证了PID控制算法在四旋翼控制中的有效性。仿真结果表明,PID控制能够较好地调节四旋翼的飞行姿态,并有效抑制外部干扰,使得无人机能够保持平稳飞行。
【OpenStack】OpenStack原理(一)——OpenStack发展及架构
OpenStack目前的七个核心组件,分别是计算(Compute)、对象存储(Object Storage)、认证(Identity)、用户界面(Dashboard)、块存储(Block Storage)、网络(Network)和镜像服务(Image Service)。
构建James
google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java
S7-1200 Modbus TCP客户端配置实战:从基础设置到数据交互详解
本文详细介绍了S7-1200 Modbus TCP客户端的配置方法,从基础设置到数据交互的完整流程。涵盖硬件准备、TIA Portal配置、MB_CLIENT指令参数详解、数据缓冲区管理及实战测试,帮助工程师快速掌握西门子PLC与Modbus TCP通信的关键技术。
Apache James使用入门
Apache James使用入门作者:陈光 文章来源:www.zdnet.com.cn访问次数: 次 加入时间:2004-12-14一、简介Apache James(Java Apache Mail Enterprise Server)是Apache组织的子项目之一,完全采用纯Java技术开发,实现了SMTP、POP3与NNTP等多
FPGA 学习系列(2):Verilog 语法基础
Verilog 由门级建模数据流建模行为建模门级建模(Gate Level Modeling):使用基本逻辑门描述电路,接近硬件物理结构。数据流建模(Data Flow Modeling):使用assign语句进行组合逻辑建模,类似数学方程式。行为建模(Behavioral Modeling):使用always代码块和if-elsecase等控制语句建模,抽象程度较高。Verilog 代码一般由模块(module)组成,每个模块描述一个独立的硬件功能。
2025华为OD面试手撕代码真题目录、八股文真题目录以及面试技巧
1. **华为OD面试技术面准备指南** 2. **华为OD面试技术面常见问题解答** 3. **华为OD面试技术面经验分享** 4. **华为OD面试技术面注意事项** 5. **华为OD面试技术面攻略** 6. **华为OD面试技术面模拟题目与解析** 7. **华为OD面试技术面知识点梳理** 8. **华为OD面试技术面常考**
James Email Server 概念--1.摘要。
Java Apache 企业邮件服务(又名:Apache James) 是利用纯java编写的,支持SMTP和POP3邮件服务和NNTP新闻服务,是完整和便携的企业级邮件引擎解决方案。James当前基于可用的开放协议。 James Server也是一个邮件应用平台。James工程同时开发Apache Mailet API,并且James Server 是一个Mailet容器,这点使得邮件处理更容...
Python爬虫实战:爬取ETF基金持仓变化
在python复制编辑本文详细介绍了如何使用Python的Scrapy框架爬取ETF基金的持仓变化信息,包括项目的搭建、数据的提取与存储、以及数据的可视化分析。通过本项目,读者可以掌握基本的网页爬虫技术,并应用于实际的财经数据采集与分析中。
【James邮件服务器开发】在Linux系统上部署James邮件服务器
1.准备工作 下载james安装包 http://mirrors.cnnic.cn/apache//james/server/james-binary-2.3.2.1.tar.gz 必要的环境JDK 等 2.安装过程 把James上传到服务器(我上传到了/opt/下) 直接解压apache-james-2.3.2.1.tar.gz 安装包 解压后的文件结构如下:
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
探索GitCode上的Geek-James/Blog:一个现代且灵活的个人博客框架
探索GitCode上的Geek-James/Blog:一个现代且灵活的个人博客框架 在今天的数字化世界中,拥有自己的个人博客是一个展示知识、分享经验的好方式。GitCode上由Geek-James创建的提供了一个强大且易于定制的博客解决方案,它结合了现代化的前端技术和强大的后端功能,让每个人都能轻松建立和管理他们的在线空间。 项目简介 Geek-James/Blog是一个基于Node.js和Vue...
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
james 邮件服务器,james 概述_邮件服务器
James 是什么?The Java Apache 企业邮件服务器(a.k.a. Apache James)是一个100%用Java实现的SMTP和POP3邮件服务器,同时,他还实现了NNTP新闻服务器的功能。我们把James设计成一个完整的、可移植的企业邮件引擎解决方案,他完全基于目前可用的开放性协议。James还是一个邮件应用平台。我们提供了一套Java API-mailet API,利用ma...
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
Simple Voxel Engine:一个充满乐趣的体素引擎
Simple Voxel Engine:一个充满乐趣的体素引擎 项目介绍 Simple Voxel Engine 是一个在2016年圣诞假期期间,由开发者James Randall利用短短几天时间开发出来的体素引擎。这个项目的初衷是为了重温编程的乐趣,并且开发者对体素的外观和可构建/可破坏的特性情有独钟,这可能源于他童年时玩乐高的经历。整个项目从零开始,除了使用了一些基本的OpenGL库(如glf...
james设置保存于sql
james如何保存于sql,为什么我设置后就启动不了,看来网上的很多的教程了,都一样的。有谁能帮我,谢谢 biaoxiangye@163.com [url]http://hi.baidu.com/ypxmaomao[/url] 这个问题已经解决了,现在的问题是,我下载了james源码,想修改james,有人对james的源码的各个文件的功能了解吗...
phandango:探索生物信息学数据的可视化利器
phandango:探索生物信息学数据的可视化利器 项目介绍 phandango 是一款专门针对生物信息学领域,特别是基因组学和转录组学数据可视化的开源项目。该项目由James Hadfield和Simon Harris在剑桥的Wellcome Sanger研究所设计并构建,旨在帮助科研人员轻松地探索和展示他们的数据。 项目技术分析 phandango 采用前端技术栈开发,主要使用JavaScri...
启发式测试策略模型
今天学习了探索式测试设计里的一个测试模型策略觉得很不错,自己总结了下发出来与大家一起分享,大家可以在这个启发式测试策略的基础上根据自己的实际工作环境和语境下进行扩展、补充和改善,以达到帮助我们平时工作的目的,下面就来介绍这种模型的方法和理念,启发式测试策略模型(Heuristic Test Strategy Modle,简称HTSM)是James Bach提出的。 HTSM其实就是一个结构化的、...
**FAMFAMFAM-SILK图标集:为您的项目添彩的完美选择**
FAMFAMFAM-SILK图标集:为您的项目添彩的完美选择 在数字化设计与开发领域中,一个图标可能就是决定用户体验好坏的关键细节。今天,我要向大家强烈推荐一款开源图标包——FAMFAMFAM-SILK。它不仅仅是一套图标,更是提升项目视觉感受和功能性的强大工具。 项目介绍 FAMFAMFAM-SILK是基于FAMFAMFAM网站上广受欢迎的“Silk”图标集合的项目。这一系列图标由Mark Ja...
James基本概念介绍
google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java
【亲测免费】 搭建企业邮箱服务器:JavaMail与Apache James的完美结合
搭建企业邮箱服务器:JavaMail与Apache James的完美结合 【下载地址】JAVAMail邮箱服务器搭建步骤详解 电子邮件在我们的日常工作生活中使用地越来越普遍,JAVA邮箱服务器搭建,适合小型企业搭建自己的企业邮箱服务器,简单易学!免费开源的,适合想学习邮箱服务器搭建的同学,拥有自己的邮箱服务器。在邮件系统...
apache james 的配置学习
Apache james是一个开放源代码的完全基于Java开发的邮箱系统.它的介绍说明可以上官网或者百度上面了解.我在这里记录一下我最近尝试使用james遇到的问题. 首先,配置apache james. james 基于Java 依赖于Java,所以要检查 james 所在服务器的JAVA_HOME 环境变量有没有设置. 设置好环境变量之后,...
james 安装
James3.x Apache James(Java Apache Mail Enterprise Server)是Apache组织的子项目之一,完全采用纯Java技术开发,实现了SMTP、POP3与NNTP等多种邮件相关协议。 目前James有稳定版还stable版本2.3.2和beta版beta3.James2.x版本开发于Avalon(Java Apache
316



被折叠的 条评论
为什么被折叠?



