安装Docker
- 更新包列表
首先更新系统的包列表:
apt update
- 安装依赖
确保安装以下必要的依赖包:
apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
- 添加Docker的GPG密钥
使用以下命令添加Docker官方的GPG密钥:
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 设置Docker的APT源
通过以下命令将Docker的APT源添加到系统中:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
- 更新APT包索引
添加Docker源后,更新APT包索引:
apt update
- 安装Docker CE
现在可以安装Docker CE:
apt install docker-ce docker-ce-cli containerd.io -y
- 验证Docker安装
安装完成后,验证Docker是否正确安装:
docker --version
- 启动并配置Docker自启动
启动Docker服务并设置开机自启动:
systemctl start docker
systemctl enable docker
安装Mailu
进入下面页面填写相关参数后提交,按照官方给出的配置安装即可
https://setup.mailu.io/2024.06/
安装成功后配置邮件到达发送给指定API
1、查看sieve目录挂载的路径
cat /mailu/docker-compose.yml
注意看
services:
imap:
image: mailu/dovecot:latest
environment:
- "SIEVE=enabled"
volumes:
- "/path/to/your/sieve/scripts:/data/sieve/global"
其中:
/path/to/your/sieve/scripts 是你服务器上存放Sieve脚本的路径。
/data/sieve/global 是Mailu容器内部的路径,表示Sieve脚本会在这个目录中执行。
若查询结果无/mailu/sieve:挂载,请在/mailu/docker-compose.yml文件内添加一行如下:
imap:
image: ${DOCKER_ORG:-ghcr.io/mailu}/${DOCKER_PREFIX:-}dovecot:${MAILU_VERSION:-2024.06}
restart: always
env_file: mailu.env
logging:
driver: journald
options:
tag: mailu-imap
volumes:
- "/mailu/mail:/mail"
- "/mailu/overrides/dovecot:/overrides:ro"
- "/mailu/sieve:/data/sieve/global" # 添加这个行来挂载 Sieve 脚本目录
- "/data/dovecot/conf.d/90-sieve.conf:/etc/dovecot/conf.d/90-sieve.conf" # 添加这个行持久化配置
networks:
- default
depends_on:
- front
- resolver
dns:
- 192.168.203.254
解释:
- "/mailu/sieve:/data/sieve/global":这行配置将宿主机 /mailu/sieve 目录挂载到容器内部的 /data/sieve/global。你可以将 Sieve 脚本放在 /mailu/sieve 目录下。
修改后重启确保挂载生效:
cd /mailu
docker compose down
docker compose up -d
步骤 1:创建 Sieve 目录
在宿主机上创建目录,用于存放 Sieve 脚本:
mkdir -p /mailu/sieve
步骤 2:编辑或添加 Sieve 脚本
将你的 Sieve 脚本放入 /mailu/sieve 目录中。例如,将 filter.sieve 文件放入该目录。
nano /mailu/sieve/filter.sieve
然后输入你的 Sieve 规则,例如:
require ["fileinto", "regex", "vnd.dovecot.execute"];
if allof (header :regex "from" ".*@example.com", header :regex "subject" "订单") {
execute "post_to_api" "${recipient}";
}
编辑或添加 sh脚本
将你的 sh 脚本放入 /mailu/sieve 目录中。例如,将 post_to_api.sh 文件放入该目录。
#!/bin/bash
# 第一个参数是收件人的邮箱地址
RECIPIENT_EMAIL=$1
# 读取邮件内容
EMAIL_CONTENT=$(cat)
# 使用正则表达式提取邮件中需要的数据,例如订单编号
# 这里匹配 <span> 标签中的数字
MATCHED_CONTENT=$(echo "$EMAIL_CONTENT" | grep -oP ">(\\d+)<\/span>")
# 如果匹配内容为空,发送完整的邮件内容
if [ -z "$MATCHED_CONTENT" ]; then
MATCHED_CONTENT="$EMAIL_CONTENT"
fi
# 发送匹配到的内容到指定API
curl -X POST -H "Content-Type: application/json" \
-d "{\"recipient\": \"$RECIPIENT_EMAIL\", \"content\": \"$MATCHED_CONTENT\"}" \
http://x.x.x.x/receive_mail.php
记得赋予文件权限
# 赋予目录本身适当的权限
chmod 755 /mailu/sieve
# 赋予 Sieve 脚本文件读取权限
chmod 644 /mailu/sieve/filter.sieve
# 赋予外部脚本执行权限
chmod +x /mailu/sieve/post_to_api.sh
nano命令说明:
保存文件:按 Ctrl + O (即按住 Ctrl 键并按下字母 O)。这将提示您确认保存文件名。
按 Enter 以确认文件名(保持默认名 /mailu/sieve/filter.sieve)。
退出编辑器:按 Ctrl + X (即按住 Ctrl 键并按下字母 X)。这将关闭 nano 编辑器并返回命令行。
步骤 3:编译 Sieve 脚本
进入imap容器
docker exec -it mailu-imap /bin/sh
mailu-imap只是示例,每个人的不一定相同,查看方式:
docker ps
在输出的 NAMES 列中,你可以找到 Mailu 的 imap 容器的名称,类似于 mailu-imap。找到正确的名称后,你就可以使用 docker exec 命令进入该容器
执行编译命令会生成filter.svbin文件:
sievec /data/sieve/global/filter.sieve
查看编译文件是否存在:
ls /data/sieve/global/
在主机上创建并编辑配置文件
在主机的 /data/dovecot/conf.d/ 目录下创建或编辑 90-sieve.conf 文件:
mkdir -p /data/dovecot/conf.d
nano /data/dovecot/conf.d/90-sieve.conf
在该文件中写入您的 Sieve 配置,例如:
plugin {
sieve = file:~/sieve;active=~/.dovecot.sieve
sieve_default = /mailu/sieve/filter.sieve
sieve_user_log = /mailu/sieve/dovecot-sieve.log
}
修改90-sieve.conf文件使服务器默认执行的全局脚本:
vi /etc/dovecot/conf.d/90-sieve.conf
#将这一行的注释取消
#sieve_default = /var/lib/dovecot/sieve/default.sieve
#并将原来的路径替换为下方路径
sieve_default = /data/sieve/global/filter.svbin
修改后重启确保生效:
cd /mailu
docker compose down
docker compose up -d