安裝Docker
- 更新包列表
首先更新系統(tǒng)的包列表:
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源添加到系統(tǒng)中:
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
現(xiàn)在可以安裝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
進入下面頁面填寫相關參數(shù)后提交,按照官方給出的配置安裝即可
https://setup.mailu.io/2024.06/
安裝成功后配置郵件到達發(fā)送給指定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容器內(nèi)部的路徑,表示Sieve腳本會在這個目錄中執(zhí)行。
若查詢結果無/mailu/sieve:掛載,請在/mailu/docker-compose.yml文件內(nèi)添加一行如下:
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 目錄掛載到容器內(nèi)部的 /data/sieve/global。你可以將 Sieve 腳本放在 /mailu/sieve 目錄下。
修改后重啟確保掛載生效:
cd /mailu
docker compose down
docker compose up -d
步驟 1:創(chuàng)建 Sieve 目錄
在宿主機上創(chuàng)建目錄,用于存放 Sieve 腳本:
mkdir -p /mailu/sieve
步驟 2:編輯或添加 Sieve 腳本
將你的 Sieve 腳本放入 /mailu/sieve 目錄中。例如,將 filter.sieve 文件放入該目錄。
nano /mailu/sieve/filter.sieve
然后輸入你的 Sieve 規(guī)則,例如:
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
# 第一個參數(shù)是收件人的郵箱地址
RECIPIENT_EMAIL=$1
# 讀取郵件內(nèi)容
EMAIL_CONTENT=$(cat)
# 使用正則表達式提取郵件中需要的數(shù)據(jù),例如訂單編號
# 這里匹配 <span> 標簽中的數(shù)字
MATCHED_CONTENT=$(echo "$EMAIL_CONTENT" | grep -oP ">(\\d+)<\/span>")
# 如果匹配內(nèi)容為空,發(fā)送完整的郵件內(nèi)容
if [ -z "$MATCHED_CONTENT" ]; then
MATCHED_CONTENT="$EMAIL_CONTENT"
fi
# 發(fā)送匹配到的內(nèi)容到指定API
curl -X POST -H "Content-Type: application/json" \
-d "{\"recipient\": \"$RECIPIENT_EMAIL\", \"content\": \"$MATCHED_CONTENT\"}" \
http://x.x.x.x/receive_mail.php
記得賦予文件權限
# 賦予目錄本身適當?shù)臋嘞?chmod 755 /mailu/sieve
# 賦予 Sieve 腳本文件讀取權限
chmod 644 /mailu/sieve/filter.sieve
# 賦予外部腳本執(zhí)行權限
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 命令進入該容器
執(zhí)行編譯命令會生成filter.svbin文件:
sievec /data/sieve/global/filter.sieve
查看編譯文件是否存在:
ls /data/sieve/global/
在主機上創(chuàng)建并編輯配置文件
在主機的 /data/dovecot/conf.d/ 目錄下創(chuàng)建或編輯 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文件使服務器默認執(zhí)行的全局腳本:
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