文章目录
  1. 1. 安装并初始化
    1. 1.1. 需要有自定义域名和修改域名解析的权限
    2. 1.2. 全局安装haraka
    3. 1.3. 生成配置文件
    4. 1.4. 启动测试
    5. 1.5. 安装测试工具 swaks (非必须, 但是安装后测试方便)
  2. 2. 接受邮件配置
    1. 2.1. 进入配置文件夹
    2. 2.2. 修改日志level, 方便查看错误
    3. 2.3. 修改QUEUE配置为 test_queue
    4. 2.4. 修改 host_list, 设置允许接受哪些后缀的 email 地址, 将你的域名填入
    5. 2.5. 测试接受邮件
      1. 2.5.1. a) 使用 swaks 测试接受邮件 (如果有域名, 可看下一步, 直接用外网域名测试)
      2. 2.5.2. b) 配置MX记录,接收外部邮件 (如果没有域名, 请看上一步)
  3. 3. 发送邮件配置 (必须有域名和 MX 记录)
    1. 3.1. 配置 MX 记录 (上面已经做过了), 进入配置目录 cd ~/.haraka/config
    2. 3.2. 启用 auth/flat_file 配置
    3. 3.3. 添加 auth_flat_file 配置文件
    4. 3.4. 启动haraka服务
    5. 3.5. 使用 swaks 测试发送邮件
    6. 3.6. 指定非localhost地址发送邮件
    7. 3.7. 新建 plugin 忽略 TSL 要求
      1. 3.7.1. 创建 新plugin
      2. 3.7.2. 复制 flat_file 并修改成忽略TSL 要求
      3. 3.7.3. 修改 plugins, 使用 insecure_flat_file
      4. 3.7.4. 启动haraka服务 并测试
  4. 4. 参考文档

安装并初始化

需要有自定义域名和修改域名解析的权限

本地测试接收邮件可以不使用自定义域名, 外网接收邮件, 本地/外网发送邮件都需要设置域名解析 MX 设置

全局安装haraka

1
2
# 注意 H 为大写
npm install -g Haraka

生成配置文件

1
2
# ~/.haraka 为配置文件目录, 自行更改
haraka -i ~/.haraka

启动测试

1
2
# 因为需要监听25端口, 部分账户需要sudo,   ~/.haraka为配置目录
haraka -c ~/.haraka

安装测试工具 swaks (非必须, 但是安装后测试方便)

1
apt -y install swaks

接受邮件配置

进入配置文件夹

1
cd ~/.haraka/config

修改日志level, 方便查看错误

vim log.ini, 将 level 改成debug, 保存并退出

1
level=debug

修改QUEUE配置为 test_queue

vim plugins, 注释 queue/smtp_forward, 添加 test_queue, 使用之后,接收到的邮件内容会写入/tmp/mail.eml文件

1
2
3
4
5
# QUEUE
# queues: discard qmail-queue quarantine smtp_forward smtp_proxy
# Queue mail via smtp - see config/smtp_forward.ini for where your mail goes
# queue/smtp_forward
test_queue

修改 host_list, 设置允许接受哪些后缀的 email 地址, 将你的域名填入

vim host_list, 添加你的域名, 比如 example.com

1
2
# 第一行是原来的host
example.com

测试接受邮件

a) 使用 swaks 测试接受邮件 (如果有域名, 可看下一步, 直接用外网域名测试)

下面命令中-t to@example.com 为本地接受地址, 域名后缀需要在host_list中存在 -s localhost为指定使用本地服务

1
swaks -f from@qq.com -t to@example.com -s localhost

查看是否收到邮件: cat /tmp/mail.eml

b) 配置MX记录,接收外部邮件 (如果没有域名, 请看上一步)

  1. 将 MX 解析到安装 Haraka 的服务器, 以下为阿里云解析设置, 其它请自行谷歌配置

  2. 把你的域名地址写入到 host_list (上面已经做过了)
  3. haraka -c ~/.haraka 启动服务
  4. 使用qq邮箱发送邮件
  5. 查看是否收到邮件 cat /tmp/mail.eml
    如下图对 suLK1CBoYXJha2Eg1f3OxA== 使用GBK的base64解密后为测试 haraka 正文. 解密地址 https://1024tools.com/base64


发送邮件配置 (必须有域名和 MX 记录)

配置 MX 记录 (上面已经做过了), 进入配置目录 cd ~/.haraka/config

启用 auth/flat_file 配置

vim plugins, 放开 auth/flat_file 的注释

添加 auth_flat_file 配置文件

vim auth_flat_file.ini(新建文件), 其中 users 为配置用户名和密码

1
2
3
4
[core]
methods=PLAIN,LOGIN
[users]
username=password

启动haraka服务

haraka -c ~/.haraka

使用 swaks 测试发送邮件

其中from@example.com改成你域名后缀, to@qq.com改成你要接收的地址, -s localhost使用本地服务

1
swaks -f from@example.com -t to@qq.com -au username -ap password -s localhost

指定非localhost地址发送邮件

因为 auth/flat_file 针对 localhost 地址会忽略 TLS 要求, 当指定server后会发送失败, 从日志中可以看到 [auth/flat_file] Auth disabled for insecure public connection

1
2
# 指定sever 发送
swaks -f from@example.com -t to@qq.com -au username -ap password -s example.com

新建 plugin 忽略 TSL 要求

创建 新plugin

1
haraka -c ~/.haraka -p auth/insecure_flat_file

复制 flat_file 并修改成忽略TSL 要求

原来flat_file.js, 注释掉如图所示的这一行, 然后将内容写入 insecure_flat_file.js

vim ~/.haraka/plugins/auth/insecure_flat_file.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Auth against a flat file

exports.register = function () {
const plugin = this;
plugin.inherits('auth/auth_base');
plugin.load_flat_ini();
};

exports.load_flat_ini = function () {
const plugin = this;
plugin.cfg = plugin.config.get('auth_flat_file.ini', function () {
plugin.load_flat_ini();
});
};

exports.hook_capabilities = function (next, connection) {
const plugin = this;
// don't allow AUTH unless private IP or encrypted
if (!connection.remote.is_private && !connection.tls.enabled) {
connection.logdebug(plugin,"Auth continue, but insecure public connection");
}

let methods = null;
if (plugin.cfg.core && plugin.cfg.core.methods ) {
methods = plugin.cfg.core.methods.split(',');
}
if (methods && methods.length > 0) {
connection.capabilities.push('AUTH ' + methods.join(' '));
connection.notes.allowed_auth_methods = methods;
}
next();
};

exports.get_plain_passwd = function (user, connection, cb) {
const plugin = this;
if (plugin.cfg.users[user]) {
return cb(plugin.cfg.users[user].toString());
}
return cb();
};

修改 plugins, 使用 insecure_flat_file

vim ~/.haraka/config/plugins, 添加auth/insecure_flat_file

1
2
3
4
5
6
# AUTH plugins require TLS before AUTH is advertised, see
# https://github.com/haraka/Haraka/wiki/Require-SSL-TLS
# auth/flat_file
# auth/auth_proxy
# auth/auth_ldap
auth/insecure_flat_file

启动haraka服务 并测试

1
2
haraka -c ~/.haraka
swaks -f from@example.com -t to@qq.com -au username -ap password -s example.com

参考文档


文章若有纰漏请大家补充指正,谢谢~~

http://blog.xinshangshangxin.com SHANG殇

文章目录
  1. 1. 安装并初始化
    1. 1.1. 需要有自定义域名和修改域名解析的权限
    2. 1.2. 全局安装haraka
    3. 1.3. 生成配置文件
    4. 1.4. 启动测试
    5. 1.5. 安装测试工具 swaks (非必须, 但是安装后测试方便)
  2. 2. 接受邮件配置
    1. 2.1. 进入配置文件夹
    2. 2.2. 修改日志level, 方便查看错误
    3. 2.3. 修改QUEUE配置为 test_queue
    4. 2.4. 修改 host_list, 设置允许接受哪些后缀的 email 地址, 将你的域名填入
    5. 2.5. 测试接受邮件
      1. 2.5.1. a) 使用 swaks 测试接受邮件 (如果有域名, 可看下一步, 直接用外网域名测试)
      2. 2.5.2. b) 配置MX记录,接收外部邮件 (如果没有域名, 请看上一步)
  3. 3. 发送邮件配置 (必须有域名和 MX 记录)
    1. 3.1. 配置 MX 记录 (上面已经做过了), 进入配置目录 cd ~/.haraka/config
    2. 3.2. 启用 auth/flat_file 配置
    3. 3.3. 添加 auth_flat_file 配置文件
    4. 3.4. 启动haraka服务
    5. 3.5. 使用 swaks 测试发送邮件
    6. 3.6. 指定非localhost地址发送邮件
    7. 3.7. 新建 plugin 忽略 TSL 要求
      1. 3.7.1. 创建 新plugin
      2. 3.7.2. 复制 flat_file 并修改成忽略TSL 要求
      3. 3.7.3. 修改 plugins, 使用 insecure_flat_file
      4. 3.7.4. 启动haraka服务 并测试
  4. 4. 参考文档