Welcome to poste-sdk’s documentation!
部署poste.io
官网安装方式
RSPAMD: 快速、免费和开源的垃圾邮件过滤系统. 查看rspamd
CLAMAV: 病毒扫描 查看clamav
docker-compose, 不关闭垃圾过滤&病毒扫描,会耗费更多的内存,还会不定时的拉取更新病毒库
version: '3'
services:
mailserver:
image: analogic/poste.io
container_name: mailserver
restart: unless-stopped
ports:
- "25:25"
- "80:80"
- "443:443"
- "4190:4190"
- "110:110"
- "143:143"
- "465:465"
- "587:587"
- "993:993"
- "995:995"
privileged: true
environment:
- HTTPS=ON
- DISABLE_RSPAMD=TRUE
- DISABLE_CLAMAV=TRUE
- TZ=Asia/Shanghai
volumes:
- ./mailserver_data:/data
机器配置1C2G 就可以启动,所有服务,要想稳定运行需要加内存。或者关闭病毒扫描CLAMAV内存大户
可以把发信方加入白名单,提高优先级,达到快速接信的目的,有多快?快三倍的样子
Ubuntu安装
安装docker&docker-compose
apt update
apt install docker.io
apt install docker-compose
部署
# 需要垃圾过滤,病毒扫描的可以打开 DISABLE_RSPAMD。DISABLE_CLAMAV
docker-compose up -d
域名申请
修改nameserver,托管到cloudflare
cloudflare操作
Note
A 和 CNAME 记录
mail.your-domain.com A → 外网IP
smtp.your-domain.com CNAME mail.your-domain.com
pop.your-domain.com CNAME mail.your-domain.com
imap.your-domain.com CNAME mail.your-domain.com
MX for your domain
your-domain.com MX mail.your-domain.com
SPF record:your-domain.com. IN TXT “v=spf1 mx ~all”
DMARC record:_dmarc.our-domain.com. IN TXT “v=DMARC1; p=none; rua=mailto:dmarc-reports@our-domain.com”
DKIM record : Virtual domains → your-domain.com→ regenerate key
使用样例
Note
支持 verify_ssl = False 国内无域名 开443端口情况
解析dns 要是在国内托管给cloudflare 会有不稳定的情况,可以修改本地host
主要用途:临时邮箱接受邮件
安装
pip install poste-sdk -U
获取可用域名
from typing import List
from poste_sdk.client import PosteClient
from poste_sdk.models import Domains
from poste_sdk.models import Box
with PosteClient(address='管理账户', password='密码', domain='域名/ip', verify_ssl = False) as client:
# 获取可用域名
domains = client.get_domains()
assert isinstance(domains, List)
assert isinstance(domains[0], Domains)
获取邮箱列表
from typing import List
from poste_sdk.client import PosteClient
from poste_sdk.models import Domains
from poste_sdk.models import Box
with PosteClient(address='管理账户', password='密码', domain='域名') as client:
# 获取邮箱列表
# page=1,paging=14000 分页
# boxes = client.get_boxes(page=1,paging=14000)
boxes = client.get_boxes()
assert isinstance(boxes, List)
assert isinstance(boxes[0], Box)
删除邮箱列表
from typing import List
from poste_sdk.client import PosteClient
from poste_sdk.models import Domains
from poste_sdk.models import Box
with PosteClient(address='管理账户', password='密码', domain='域名') as client:
# 获取邮箱列表
for i in tqdm(EMAIL_CLIENT.get_boxes(page=1,paging=14000)):
# 跳过管理账户
if 'admin' in i.address:
continue
# 删除邮件数量为0的邮箱
v = BoxClient(address=i.address,password=i.user).get_email_cnt()
if v == 0 and 'admin' not in i.address:
EMAIL_CLIENT.delete_box(i.address)
邮箱操作
from poste_sdk.client import PosteClient
from poste_sdk.client import BoxClient
from poste_sdk.models import Mail
with PosteClient(address='管理账户', password='密码', domain='域名') as client:
# 初始化
box_client = client.init_box_client(email_prefix='test', password='test')
assert isinstance(box_client, BoxClient)
# 获取最近1条邮件
mail = box_client.get_latest()
assert isinstance(mail, Mail)
# email 总数量
box_client.get_email_cnt()
# 获取指定邮件
mail = box_client.get_email(id_=1)
assert isinstance(mail, Mail)
# 删除邮件
box_client.delete_by_id(1)
# 清空邮件
box_client.drop_mails()