james邮件服务器内网搭建及使用

一 搭建

1 前期准备

准备一台服务器,保证安装了jdk,版本1.8及以上,并配置了环境变量,操作步骤略

准备james安装包

准备foxmail等邮件客户端

准备数据库驱动包

2 配置域名

vi /etc/hosts
# 新增代码
# ip 为当前服务器ip,后面的域名为自定义域名
35.1.1.196 hylink.net.cn
# 重启网卡,使域名生效
/etc/init.d/network restart

3 解压james程序包

在服务器找个合适位置,解压即可,代码略

4 修改配置文件

找到解压目录下的conf文件夹

4.1 修改domainlist.xml

localhost替换成之前设置的域名

<domainlist class="org.apache.james.domainlist.jpa.JPADomainList">
   <autodetect>true</autodetect>
   <autodetectIP>true</autodetectIP>
   <!-- <defaultDomain>localhost</defaultDomain> -->
   <defaultDomain>hylink.net.cn</defaultDomain>
</domainlist>

4.2 修改james-database.properties

# Use derby as default
database.driverClassName=org.apache.derby.jdbc.EmbeddedDriver
database.url=jdbc:derby:../var/store/derby;create=true
database.username=app
database.password=app

# Supported adapters are:
# DB2, DERBY, H2, HSQL, INFORMIX, MYSQL, ORACLE, POSTGRESQL, SQL_SERVER, SYBASE 
vendorAdapter.database=DERBY

database.url

指定数据库,因此需要提前创建好数据库,表不用管,james会默认创建系统表

vendorAdapter.database

参考注释,修改成对应的数据库类型

database.driverClassName=org.apache.derby.jdbc.EmbeddedDriver

database.url=jdbc:derby:../var/store/derby;create=true

database.username=app

database.password=app

根据数据库类型,替换成对应参数

4.3 修改mailetcontainer.xml

localhost修改成之前配置的域名

<context>
    <!-- <postmaster>postmaster@localhost</postmaster> -->
    <postmaster>postmaster@hylink.net.cn</postmaster>
</context>

将文件存储替换成数据库存储

<mailet match="All" class="ToRepository">
    <repositoryPath>file://var/mail/error/</repositoryPath>
    <!-- An alternative database repository example follows. -->
    <!--
    <repositoryPath>db://maildb/deadletter/error</repositoryPath>
      -->
</mailet>
# 替换成
<mailet match="All" class="ToRepository">
    <!-- <repositoryPath>file://var/mail/error/</repositoryPath> -->
    <!-- An alternative database repository example follows. -->
    <repositoryPath>db://maildb/deadletter/error</repositoryPath>
</mailet>

4.4 修改smtpserver.xml

取消注释,并修改为之前配置的域名

<!--
<helloName autodetect="true">myMailServer</helloName>
 -->

5 添加数据库驱动包

james默认是文件存储,因为我们修改成了数据库存储,因此需要数据库的驱动包,下载好驱动包,存放到conf文件夹下的lib目录即可

6 后台启动

nohup sh ./run.sh & >james.log

7 添加用户

切换到bin目录下

./james-cli.sh adduser test@hylink.net.cn 123456

因为是内网使用,所以我们需要创建至少两个用户,一个发送、一个接受

8 测试

这里使用的foxmail,安装好之后,随便用一个创建好的账号进行登录,登录进去之后,在设置-账号处,点击新建,将另一个创建好的账号添加进去,在右侧的服务器配置处,收件服务器和发件服务器填当前服务器ip,端口为默认端口(143、25),保存应用即可

之后就可以按照正常发送邮件的方式进行邮件发送、接受测试即可

二 kettle使用

新建作业或转换--核心对象--发送邮件

双击发送邮件,在地址菜单下,收件人地址和发件人地址,分别填写新建james账号,在服务器菜单下,SMTP服务器填写服务器ip,端口号25

之后按照kettle正常的编写逻辑,创建脚本即可

三 java代码调用

直接附上示例代码

package com.hylink.mail;

import lombok.extern.slf4j.Slf4j;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;

/**
 * Created by shengjk1 on 2016/11/4.
 * Blog Address:http://blog.csdn.net/jsjsjs1789
 */
@Slf4j
public class SendMail {

    private static SendMail instance = null;

    private SendMail() {

    }

    public static SendMail getInstance() {
        if (instance == null) {
            instance = new SendMail();
        }
        return instance;
    }

    public void send(String[] to, String[] cs, String[] ms, String subject,
                     String content, String formEmail, String[] fileList) {
        try {
            Properties p = new Properties(); // Properties p =
            // System.getProperties();
            p.put("mail.smtp.auth", "true");
            p.put("mail.transport.protocol", "smtp");
            p.put("mail.smtp.host", "35.1.1.196");//邮件服务器的地址
            p.put("mail.smtp.port", "25");
            // 建立会话
            Session session = Session.getInstance(p);
            Message msg = new MimeMessage(session); // 建立信息
            BodyPart messageBodyPart = new MimeBodyPart();
            Multipart multipart = new MimeMultipart();
            msg.setFrom(new InternetAddress(formEmail)); // 发件人

            String toList = null;
            String toListcs = null;
            String toListms = null;

            // 发送,
            if (to != null) {
                toList = getMailList(to);
                new InternetAddress();
                InternetAddress[] iaToList = InternetAddress
                        .parse(toList);
                msg.setRecipients(Message.RecipientType.TO, iaToList); // 收件人
            }

            // 抄送
            if (cs != null) {
                toListcs = getMailList(cs);
                new InternetAddress();
                InternetAddress[] iaToListcs = InternetAddress
                        .parse(toListcs);
                msg.setRecipients(Message.RecipientType.CC, iaToListcs); // 抄送人
            }

            // 密送
            if (ms != null) {
                toListms = getMailList(ms);
                new InternetAddress();
                InternetAddress[] iaToListms = InternetAddress
                        .parse(toListms);
                msg.setRecipients(Message.RecipientType.BCC, iaToListms); // 密送人
            }
            msg.setSentDate(new Date()); // 发送日期
            msg.setSubject(subject); // 主题
            msg.setText(content); // 内容
            // 显示以html格式的文本内容
            messageBodyPart.setContent(content, "text/html;charset=utf-8");
            multipart.addBodyPart(messageBodyPart);

            // 2.保存多个附件
            if (fileList != null) {
                addTach(fileList, multipart);
            }

            msg.setContent(multipart);
            // 邮件服务器进行验证
            Transport tran = session.getTransport("smtp");
            tran.connect("35.1.1.196", //邮件服务器地址
                    "admin@hylink.net.cn",//邮箱地址
                    "123456");//邮箱的密码
            tran.sendMessage(msg, msg.getAllRecipients()); // 发送
            System.out.println("邮件发送成功");

        } catch (Exception e) {
            log.info("邮件发送时异常", e);
        }
    }

    // 添加多个附件
    public void addTach(String[] fileList, Multipart multipart)
            throws MessagingException, UnsupportedEncodingException {
        for (int index = 0; index < fileList.length; index++) {
            MimeBodyPart mailArchieve = new MimeBodyPart();
            FileDataSource fds = new FileDataSource(fileList[index]);
            mailArchieve.setDataHandler(new DataHandler(fds));
            mailArchieve.setFileName(MimeUtility.encodeText(fds.getName(),
                    "utf-8", "B"));
            multipart.addBodyPart(mailArchieve);
        }
    }

    private String getMailList(String[] mailArray) {

        StringBuffer toList = new StringBuffer();
        int length = mailArray.length;
        if (mailArray != null && length < 2) {
            toList.append(mailArray[0]);
        } else {
            for (int i = 0; i < length; i++) {
                toList.append(mailArray[i]);
                if (i != (length - 1)) {
                    toList.append(",");
                }
            }
        }
        return toList.toString();
    }

    public static void main(String[] args) {
        forSend("测试", null);
    }

    public static void forSend(String subject, String content) {
        SendMail send = SendMail.getInstance();
        String[] to = {"user@hylink.net.cn"};//收件人的地址
        String[] cs = null;
        String[] ms = null;

        if (content == null || content.length() == 0) {
            content = "这是邮件内容,仅仅是测试,不需要回复";
        }
        String fromEmail = "admin@hylink.net.cn";//发件人的地址
        String[] arrArchievList = null;

        // 2.保存多个附件
        send.send(to, cs, ms, subject, content, fromEmail, arrArchievList);
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值