james源码重新打包部署公网邮件服务器

前言

需求:希望在qq、163、腾讯企业邮箱收到邮箱时能够提示到我的一个小应用上
目前的能想到的实现方案包括:

  1. 定时扫描这三个邮件服务器看有没有收到邮件(可能会被封?如果太频繁了??)
  2. 自己建一个邮件服务器,然后比如qq收到后转发到我自己的邮件服务器,我自己的邮件服务器在给我的小应用推下消息
    目前我这边采用的是第二种方式进行处理,虽然很麻烦,可以学习学习
    注意:我这边是对源代码进行小小修改后重新编译打包部署,如果想直接启动运行一个邮件服务器,可以直接下载发布版本,直接运行就可以得到邮件服务器了,网上很多文章可以参考

准备工作

Foxmail

一个软件,用来接受和发送邮件的

apache james

这是个开源的邮件服务器,完全的java开发的,可以搭建个邮件服务器
我这里下载的版本是目前最新版的源码,3.6.0的在这里插入图片描述

scala2.13

我看源码中有scala(基于java的)的代码,我这安装了个 Scala 2.13.7

java11

james3.6需要java11的版本,1.8不得行呢

mysql

我用的是mysql8版本的,用来存储邮件消息

服务器和本地java11的环境变量、本地maven的环境变量

准备好java11的环境变量+maven的环境变量
java -version的结果是11版本,mvn也是有效的

开始处理

1.先在idea中把james源代码打开

2.找到类JamesAppSpringMain,这个类是启动类,可直接启动项目,注意保证端口别被占用

在这里插入图片描述

3.如果直接运行会报错的,需要做以下几件事

3.1 把所有项目(james源程序项目中包含很多很多很多的子项目)的scala、java文件夹置为源代码目录,把所有test目录下的java、scala目录置为测试文件夹,颜色如下图所示
3.2 点击进入所有项目的scala文件,如果提示没有设置scala的SDK,需要进行设置
3.3 把所有项目进行build以下,一个一个来最好,如下第二张图,保证每一个项目build不报错,完全正确才行
3.4 运行JamesAppSpringMain的main方法,如果报错,就去报错的地方,点击进入具体的子项目目录,对这个项目进行build或者rebuild,保证这个子项目build没问题,如果报错又进入子子项目的进行build,必须保证每个项目build没问题
3.5 如果提示不存在包、没这个类这种错误,其实都是相关的子项目没正确,或者说哪个子项目没有build或者没有走3.1这个步骤

3.6 如果出现创建日志文件失败啥的,可以去下图第三张改下日志文件的配置
3.7 总结起来,就是一个spring项目运行,相关的配置文件都在server-app项目下

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

4.项目运行起来,如下图

在这里插入图片描述

5.源代码修改

经过长时间的debug、测试,终于找到了我需要修改的地方,加上了自己想要加的东西(就是接受消息时调下接口通知我而已/(ㄒoㄒ)/~~)

6.修改配置,让邮件存放到mysql中

server-app目录下有配置文件,james-database.properties改了就行。
注意如果是mysql8.0需要在server-app项目加上mysql8.0的依赖,如下第二张图,注意mysql依赖摆放的位置必须如图所示,不然编译打包时checkstyle检查会出错

在这里插入图片描述在这里插入图片描述

7.编译打包,在命令行执行mvn命令

注意:我这边改代码时把日志文件的目录改了(为了运行成功),所以在打包时需要把目录文件改回去
同时打包时会进行代码checkstyle,很严格的,需要注意

直接执行mvn package -DskipTests,有点久
经过长时间的打包后,得到压缩包,如下图,在server-app目录下的target
在这里插入图片描述

8.上传服务器

服务器保证有java11的环境变量,进入conf目录,修改domainlist文件
defaultDomain改成自己的域名(域名解析处要配个邮件解析),启动项目就好了
在这里插入图片描述
在这里插入图片描述

9.新开个shell窗口(因为之前启动james时不是后台启动会占用之前打开的shell窗口),去bin目录创建个用户,如下图

bash james-cli.sh -h localhost -p 9999 adduser roger@qinjiedomain.xyz 密码
在这里插入图片描述

10.测试接受邮件

如图,我测试了三封邮件,qq邮件发送,都可以接收到,由于改动了源码,同时通知了我的小应用。
在这里插入图片描述

11.后台运行james

启动命令改下,如下,注意下目录,注意下java环境
./bin/james status 当前状态
./bin/james start 开启
./bin/james stop 停止
在这里插入图片描述

最后

满足了我想要的需求,也学习到了,之前看源码以及改源码花了很长时间,第一次改动源码,还是花了很长的时间来找切入点呢,不过最后还是搞定了这个问题,嗯~ o( ̄▽ ̄)o

20220915重新部署

发现本地运行时一直报个错

15-9月-2022 10:43:26.989 WARN [main] org.springframework.context.support.AbstractApplicationContext.refresh:550 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'authenticator' defined in class path resource [META-INF/org/apache/james/spring-mailbox-authenticator.xml]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'usersrepository': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'domainlist': Initialization of bean failed; nested exception is org.springframework.beans.FatalBeanException: Unable to execute lifecycle method on beandomainlist; nested exception is <openjpa-3.1.2-r66d2a72 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: "
org.apache.james.mailbox.jpa.quota.model.MaxGlobalMessageCount
org.apache.james.mailbox.jpa.mail.model.JPAUserFlag
org.apache.james.mailbox.jpa.quota.model.MaxUserStorage
org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMailboxMessage
org.apache.james.mailbox.jpa.quota.model.JpaCurrentQuota
org.apache.james.mailbox.jpa.mail.model.JPAMailboxAnnotation
org.apache.james.mailbox.jpa.user.model.JPASubscription
org.apache.james.rrt.jpa.model.JPARecipientRewrite
org.apache.james.sieve.jpa.model.JPASieveScript
org.apache.james.mailbox.jpa.quota.model.MaxDomainMessageCount
org.apache.james.mailbox.jpa.quota.model.MaxGlobalStorage
org.apache.james.mailbox.jpa.mail.model.JPAMailbox
org.apache.james.sieve.jpa.model.JPASieveQuota
org.apache.james.mailrepository.jpa.JPAUrl
org.apache.james.mailbox.jpa.quota.model.MaxDomainStorage
org.apache.james.mailbox.jpa.quota.model.MaxUserMessageCount
org.apache.james.domainlist.jpa.model.JPADomain
org.apache.james.user.jpa.model.JPAUser
org.apache.james.mailbox.jpa.mail.model.JPAProperty
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMessage".
15-9月-2022 10:43:26.990 INFO [main] org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.destroy:590 - Closing JPA EntityManagerFactory for persistence unit 'James'

加个这个东西,在启动vm上加这个,其中openjpa去官网
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值