以下是别人整理的github上最流行的十个邮件系统,有需要的收藏! 方便以后查询部署!
Full-featured, open source mail server solution for mainstream Linux/BSD distributions.
github仓库:https://github.com/iredmail/iRedMail
star数:1.2k
编程语言:shell
仓库创建时间:2011年7月31号,至今仍在更新
系统要求:(1)一个崭新的系统 (2)至少4GB内存才能使用完整的垃圾邮件和病毒扫描功能
📤 An SMTP client & server library written in Go
github仓库:https://github.com/emersion/go-smtp
star数:1.4k
编程语言:go
仓库创建时间:2014年9月28号,至今仍在更新
直接运行go程序即可部署
Stalwart Mail Server is an open-source mail server solution with JMAP, IMAP4, and SMTP support and a wide range of modern features. It is written in Rust and designed to be secure, fast, robust and scalable.
github仓库:https://github.com/stalwartlabs/mail-server
star数:1.8k
编程语言:rust
仓库创建时间:2023年3月5号,至今仍在更新
支持多个平台MacOS/Linux/Windows/Docker,没有Web UI。
Modoboa is a mail hosting and management platform including a modern and simplified Web User Interface. It provides useful components such as an administration panel and webmail.
github仓库:ttps://github.com/modoboa/modoboa
star数:2.7k
编程语言:python
仓库创建时间:2009年3月22号,至今仍在更新
最低系统要求:
CPU: 2 RAM: 2GB Disk: 10GB Python 3.8+ Postgres 12+ or MariaDB 10.4+ or MySQL 8+ or sqlite3 or LDAP 目前仅支持基于Debian的Linux发行版。
modern full-featured open source secure mail server for low-maintenance self-hosted email
github仓库:https://github.com/mjl-/mox
star数:2.9k
编程语言:go
仓库创建时间:2023年1月29号,至今仍在更新
运行编译好的go程序就可以部署,有WebUI,也可以在Docker容器中运行。该项目还处于早期开发阶段,有些功能还没有实现
Composable all-in-one mail server.
github仓库:https://github.com/foxcpp/maddy
star数:4.4k
编程语言:go
仓库创建时间:2016年11月6号,至今仍在更新
没有提最低系统要求。可以在Docker容器中运行
Mailu is a simple yet full-featured mail server as a set of Docker images. It is free software (both as in free beer and as in free speech), open to suggestions and external contributions. The project aims at providing people with an easily setup, easily maintained and full-featured mail server while not shipping proprietary software nor unrelated features often found in popular groupware.
github仓库:https://github.com/Mailu/Mailu
star数:5k
编程语言:python
仓库创建时间:2016年1月10号,至今仍在更新
系统要求:最低1G内存
只能在Docker容器中运行,有 Web UI。Mailu搭建教程
Production-ready fullstack but simple mail server (SMTP, IMAP, LDAP, Antispam, Antivirus, etc.) running inside a container.
github仓库:https://github.com/docker-mailserver/docker-mailserver
star数:12.2k
编程语言:shell
仓库创建时间:2015年3月22号,至今仍在更新
只能运行在Docker容器中,没有 Web UI。占用内存很少。Docker-Mainserver搭建教程
Mail-in-a-Box Mail-in-a-Box helps individuals take back control of their email by defining a one-click, easy-to-deploy SMTP+everything else server: a mail server in a box.
github仓库:https://github.com/mail-in-a-box/mailinabox
star数:12.5k
编程语言:python
仓库创建时间:2013年8月18号,至今仍在更新
最低系统要求:512M,只支持Ubuntu系统
由于
Gmail
邮箱在国内无法使用 且国内手机
号码无法继续注册账号原因,最近想着折腾一下 自建一台邮件服务器
玩玩。正好在国外有台 vps (搬瓦工的),比较空闲,目前且用来做扶墙使用,有点浪费,决定使用此台服务器搭建邮件服务器
。选择的部署方案选择了较为轻便的docker
,在了解网上主流的实现镜像后analogic/poste.io
&mailserver/docker-mailserver
,由于目前 vps 资源为2c 1g
的低配置,试着跑了一下前者,资源占用非常大(可能 默认开了什么功能什么的), 在当前有限的配置下有点跑不动。了解后者这个 项目 后,可以在最低1c 512m
下运行,最后决定选用后者docker-mailserver
进行部署。
Email 服务器:
23.105.194.216
(搬瓦工 vps)使用容器镜像:
mailserver/docker-mailserver:latest
系统版本:
CentOS Linux release 7.9.2009 (Core)
内核版本:
4.14.129-bbrplus
Docker Version:
20.10.7
Docker Compose Version:
1.29.2
DNS 服务商:
aliyun
详细介绍信息, 查看此文档
协议 | 端口 |
---|---|
SMTP | 25/587/465 |
IMAP | 143/993 |
POP3 | 110/995 |
软件名称 | 简介 |
---|---|
sendmail | 用于发邮件。资格最老的邮局,所有Linux发行版基本都带。但是配置麻烦。 |
postfix | Wietse Venema 觉得 sendmail 配置太麻烦了,就开发了一个 “简化配置版 sendmail”,即postfix。支持smtp协议。 |
dovecot | 用于收邮件,支持imap/pop3。 |
spamassasin | 垃圾邮件过滤器。可以自订规则。 |
clamav | 邮件杀毒工具。 |
opendkim | 生成dkim签名。有什么用?详见下面的“反垃圾邮件技术”。 |
fail2ban | 防止别人暴力破解用户名密码的工具。 |
邮件反垃圾技术(Anti-Spam)是指防止垃圾邮件(Spam)的技术手段。垃圾邮件通常是指发送大量不需要或不想要的邮件,这些邮件经常包含欺诈或诈骗信息、色情内容或恶意软件等。为了防止这些邮件占据用户的收件箱,邮件服务提供商和企业采用了一系列技术手段来防止垃圾邮件。常见的邮件反垃圾技术包括:
- SPF(Sender Policy Framework)技术。SPF 用于验证发送邮件的服务器是否在域名的授权列表中。如果不在,则认为是垃圾邮件。通过在域名的 DNS 中添加 TXT 记录,可以指定哪些服务器可以发送该域名的邮件。
- DKIM(DomainKeys Identified Mail)技术。DKIM 是一种数字签名技术,通过在邮件头中添加一个签名,可以验证邮件是否被篡改过。使用 DKIM 技术可以有效防止垃圾邮件和欺诈邮件。
- DMARC(Domain-based Message Authentication, Reporting and Conformance)技术。DMARC 技术是 SPF 和 DKIM 的加强版,它通过在域名的 DNS 中添加 TXT 记录,指定如何处理验证失败的邮件,可以有效地降低垃圾邮件和欺诈邮件的数量。
- 邮件过滤技术。邮件过滤技术是指通过人工智能算法和机器学习技术,对邮件进行分类和判断,判断哪些邮件是垃圾邮件,然后将其过滤掉。
- 黑名单和白名单技术。黑名单和白名单技术是一种基于地址列表的技术,通过将发件人的地址添加到黑名单或白名单中,来防止垃圾邮件。
- Greylisting 技术。Greylisting 是一种基于时间的技术,当服务器接收到一个新的邮件时,将其延迟一段时间(通常是数分钟),然后再重新发送。由于大多数垃圾邮件发送服务器不会尝试重新发送,因此这种技术可以有效地过滤掉垃圾邮件。
通过这些技术的组合应用,可以有效地降低垃圾邮件的数量,保障用户的邮箱安全和隐私。
这里安装部署我们使用
Docker Compose
,使用较低版本还不行,建议是按照下面的步骤安装最新
的版本,如你已安装和配置,对下面部分配置做跳过即可。
bashcurl -fsSL https://get.docker.com -o get-docker.sh # 使用脚本安装
sudo sh get-docker.sh
cat > /etc/docker/daemon.json << EOF `# 配置优化`
{
"oom-score-adjust": -1000,
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"max-concurrent-downloads": 10,
"exec-opts": ["native.cgroupdriver=systemd"],
"max-concurrent-uploads": 10,
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
systemctl start docker \ `# 启动 并设置开机自启`
&& systemctl enable docker \
&& systemctl status docker
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \ && chmod +x /usr/local/bin/docker-compose \ && ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose \ && docker-compose --version
阿里云设置 DNS 记录
这里 设置的 DNS 未包含
DKIM
签名记录。这个记录需要在后面,使用脚本进行生成。
DNS 类型 | 记录名 | 记录值 | TTL |
---|---|---|---|
A | 23.105.194.216 | 30 分钟 | |
MX | @ | mail.treesir.pub | 10 (优先级 10) |
TXT | @ | v=spf1 mx ~all | 30 分钟 |
TXT | _dmarc | v=DMARC1; p=quarantine; rua=mailto.[email protected]; ruf=mailto.[email protected]; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; sp=quarantine | 30 分钟 |
表中
treesir.pub
注意替换为你自己的 主域名。
VPS 服务器设置 反向解析 PTR
(rdns) 记录
certbot
生成 letsencrypt
证书yum install -y certbot certbot certonly --manual --preferred-challenge dns -d mail.treesir.pub # 此 命令会生成 一条 TXT 记录记录用于验证
yum install bind-utils `# 安装 dig 命令` dig TXT _acme-challenge.mail.treesir.pub `# 检查 解析`
注意
注意添加 crontab 定时任务时,检查一下 crond
服务器 是否有在正常运行。
crontab -e `# 打开 crontab 配置文件` 0 5 * * 1 /usr/bin/certbot renew --quiet service crond status `# 检查服务是否正常运行`
docker-mailserver
容器镜像git clone https://github.com/docker-mailserver/docker-mailserver.git
docker-compose.yml
文件
version: '3.8' services: mailserver: image: docker.io/mailserver/docker-mailserver:latest hostname: mail domainname: treesir.pub container_name: mailserver env_file: mailserver.env dns: 223.5.5.5 ports: - "25:25" - "143:143" - "587:587" - "993:993" - "110:110" - "995:995" volumes: - ./data/maildata:/var/mail - ./data/mailstate:/var/mail-state - ./data/maillogs:/var/log/mail - /etc/localtime:/etc/localtime:ro - ./config/:/tmp/docker-mailserver - /etc/letsencrypt/archive/mail.treesir.pub:/tmp/ssl:ro restart: always stop_grace_period: 1m cap_add: [ "NET_ADMIN", "SYS_PTRACE" ]
mailserver.env
文件
这里由于文件较长,不方便演示,且打印未注释的代码段
envcat mailserver.env |egrep -v '^$|^#' OVERRIDE_HOSTNAME= DMS_DEBUG=1 SUPERVISOR_LOGLEVEL= ONE_DIR=1 [email protected] ENABLE_UPDATE_CHECK=1 UPDATE_CHECK_INTERVAL=1d PERMIT_DOCKER=network NETWORK_INTERFACE= TLS_LEVEL= SPOOF_PROTECTION= ENABLE_SRS=0 ENABLE_POP3=1 ENABLE_CLAMAV=0 ENABLE_AMAVIS=1 AMAVIS_LOGLEVEL=0 ENABLE_FAIL2BAN=0 FAIL2BAN_BLOCKTYPE=drop ENABLE_MANAGESIEVE= POSTSCREEN_ACTION=enforce SMTP_ONLY= SSL_TYPE=manual SSL_CERT_PATH=/tmp/ssl/fullchain1.pem SSL_KEY_PATH=/tmp/ssl/privkey1.pem SSL_ALT_CERT_PATH= SSL_ALT_KEY_PATH= VIRUSMAILS_DELETE_DELAY= ENABLE_POSTFIX_VIRTUAL_TRANSPORT= POSTFIX_DAGENT= POSTFIX_MAILBOX_SIZE_LIMIT=102400000 ENABLE_QUOTAS=1 POSTFIX_MESSAGE_SIZE_LIMIT=102400000 PFLOGSUMM_TRIGGER= PFLOGSUMM_RECIPIENT= PFLOGSUMM_SENDER= LOGWATCH_INTERVAL= LOGWATCH_RECIPIENT= REPORT_RECIPIENT=0 REPORT_SENDER= REPORT_INTERVAL=daily POSTFIX_INET_PROTOCOLS=all ENABLE_SPAMASSASSIN=0 SPAMASSASSIN_SPAM_TO_INBOX=1 MOVE_SPAM_TO_JUNK=1 SA_TAG=2.0 SA_TAG2=6.31 SA_KILL=6.31 SA_SPAM_SUBJECT=***SPAM***** ENABLE_FETCHMAIL=0 FETCHMAIL_POLL=300 ENABLE_LDAP= LDAP_START_TLS= LDAP_SERVER_HOST= LDAP_SEARCH_BASE= LDAP_BIND_DN= LDAP_BIND_PW= LDAP_QUERY_FILTER_USER= LDAP_QUERY_FILTER_GROUP= LDAP_QUERY_FILTER_ALIAS= LDAP_QUERY_FILTER_DOMAIN= DOVECOT_TLS= DOVECOT_USER_FILTER= DOVECOT_PASS_FILTER= DOVECOT_MAILBOX_FORMAT=maildir DOVECOT_AUTH_BIND= ENABLE_POSTGREY=0 POSTGREY_DELAY=300 POSTGREY_MAX_AGE=35 POSTGREY_TEXT=Delayed by Postgrey POSTGREY_AUTO_WHITELIST_CLIENTS=5 ENABLE_SASLAUTHD=0 SASLAUTHD_MECHANISMS= SASLAUTHD_MECH_OPTIONS= SASLAUTHD_LDAP_SERVER= SASLAUTHD_LDAP_BIND_DN= SASLAUTHD_LDAP_PASSWORD= SASLAUTHD_LDAP_SEARCH_BASE= SASLAUTHD_LDAP_FILTER= SASLAUTHD_LDAP_START_TLS= SASLAUTHD_LDAP_TLS_CHECK_PEER= SASLAUTHD_LDAP_TLS_CACERT_FILE= SASLAUTHD_LDAP_TLS_CACERT_DIR= SASLAUTHD_LDAP_PASSWORD_ATTR= SASL_PASSWD= SASLAUTHD_LDAP_AUTH_METHOD= SASLAUTHD_LDAP_MECH= SRS_SENDER_CLASSES=envelope_sender SRS_EXCLUDE_DOMAINS= SRS_SECRET= DEFAULT_RELAY_HOST= RELAY_HOST= RELAY_PORT=25 RELAY_USER= RELAY_PASSWORD=
上面的 配置含义说明,请参考 此文档
docker-compose up -d # 启动容器 docker-compose logs -f # 观察容器 相关日志
服务器在公网,这里就不要使用
弱密码
了,防止 hacker 进行 暴力破解。
./setup.sh email add [email protected] "xxx" `# 添加 邮件账号及密码` ./setup.sh email update [email protected] "xxx" `# 更新 邮件账号及密码`
DKIM
签名记录注意下面的配置中,设置了
keysize
参数。原因是默认使用的 keysize 大小为4096
,在aliyun
中 无法进行正常的添加。
./setup.sh config dkim keysize 2048 cat config/opendkim/keys/treesir.pub/mail.txt `# 查看 DKIM 签名记录` mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ojqOcyeDlOn6TcpXCsU92xul6d54wlx/UwPTuE0aywFc+ihyKGAm9D8nmroneN7gf82qTtDbJiHghzRlf6JdpR3kM4ipWKaNRSlUL/64HQqrMeEWx5ErpcgwrXxKWI/rcQ7Rjg2BliP6ayJiEflH0FOtxfgLHnYEcSKupmCV8znM4rZ/LHx9RDwc7o8jWujey6h9zrYPXyqim" "obGSB0PZGNQhe7mWRefMraFGgnNq+PrtEnmaOFxH2rG1Qh2hhMkeqJsH56yx9f1mxWYTX7r9FtvweGRb+GJNfi6a4vpDrTCffxx6XvGrq032i7VqHpmiaUUuM3j2x1DwHrIbpWTQIDAQAB" ) ; ----- DKIM key mail for treesir.pub
注意生成的记录,需要进行合并起来 才能使用。
DNS 类型 | 记录名 | 记录值 | TTL |
---|---|---|---|
TXT | mail._domainkey | v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ojqOcyeDlOn6TcpXCsU92xul6d54wlx/UwPTuE0aywFc+ihyKGAm9D8nmroneN7gf82qTtDbJiHghzRlf6JdpR3kM4ipWKaNRSlUL/64HQqrMeEWx5ErpcgwrXxKWI/rcQ7Rjg2BliP6ayJiEflH0FOtxfgLHnYEcSKupmCV8znM4rZ/LHx9RDwc7o8jWujey6h9zrYPXyqimobGSB0PZGNQhe7mWRefMraFGgnNq+PrtEnmaOFxH2rG1Qh2hhMkeqJsH56yx9f1mxWYTX7r9FtvweGRb+GJNfi6a4vpDrTCffxx6XvGrq032i7VqHpmiaUUuM3j2x1DwHrIbpWTQIDAQAB | 30 分钟 |
测试的平台为
MacOS
&Windows
两个平台 ,由于先前测试使用的工具为Foxmail
会出现无法发送邮件问题 ,所以这里 MacOS 中使用的 邮件工具为 自带应用eM Clien
。
在进行邮件测试前,可以使用 此链接 中的工具,测试 是否支持
tls
验证。
windows
eM Clien
工具会自动为我们配置IMAP
&SMTP
地址信息。
正常收到邮件了
回复一个邮件 进行测试
`测试 邮件收发 一切正常。`
测试发送邮件至 Gmail
> 正常收到邮件
一开始使用的 工具是
Foxmail
工具进行测试,卡在无法发送邮件这里,以为是自己的证书配置出错了,经过一系类的折腾、排错,花了一天左右的时间总算是搭建出来了。看到其相关文档,好像还可以与LDAP
进行集成,这就不错了,有时间 继续研究一下。
✉️ A fully featured open source mail delivery platform for incoming & outgoing e-mail
gitub仓库:https://github.com/postalserver/postal
star数:13.3k
编程语言:ruby
仓库创建时间:2017年4月16号,至今仍在更新
系统要求:至少4G内存,2个CPU,100G磁盘空间
只能在Docker容器中运行,部署流程复杂,功能齐全
这么多框架,应该如何选择 遵循以下原则:
项目存在时间长,star数量多,且项目仍在更新 系统硬件要求低,运行时内存占用小 最好有 Web UI,即可视化界面 部署流程足够简单,最好一条命令就搞定 总结 我自己用过Mailu和Docker-Mailserver,都是在Docker容器中运行的,部署起来贼麻烦,不想折腾了
我现在更倾向于mailinabox这种一键式部署。go项目也不错,单文件运行。想折腾的同学可以选择支持Docker部署的邮件系统
poste.io 邮件服务基于 Docker 搭建,用的是 Haraka + Dovecot + SQLite 邮件系统,能够轻易实现邮件收发、多域名控制、邮箱容量控制、邮件杀毒、邮件过滤以及 Webmail 等基础功能。同时,Poste 还提供了投递统计分析、客户端自动适配、一键安装SSL、邮件转发、邮件别名、Catch-All 等相当有用的功能。
poste.io原生支持docker,占用资源较少,安装简单,适合个人使用。
为了能够正常使用邮件服务,需要配置域名的 MX 记录,将邮件服务器的地址指向你的域名。下文以mail.your-domain.com为例。
记录类型 | 主机记录 | 记录值 |
---|---|---|
MX | your-domain.com | mail.your-domain.com |
TXT | your-domain.com | v=spf1 mx ~all |
A | 1.2.3.4 (your ip) | |
TXT | _dmarc | v=DMARC1; p=none; pct=100; |
CHAME | imap | |
CNAME | smtp | |
CNAME | pop | |
TXT | _s20160910378._domainkey.your-domain.com | k=rsa;p=MII......... |
最后还需要到 VPS 服务商处添加一个反向 DNS,也就是 rDNS 解析,把 IP 解析到 mail.your-domain.com 这个邮件域名就好了,这个为可选项,有些 VPS 商家不提供这种服务。
以上 DNS 解析,至少需要添加前面三个 A 解析和 MX 解析,后面几个解析为可选,不添加也能用。
修改VPS hostname hostnamectl set-hostname mail.your-domain.com
vim /etc/hosts
127.0.1.1 localhost.localdomain mail.your-domain.com 安装docker
curl -sSL https://get.docker.com/ | sh
systemctl start docker
systemctl enable docker 安装poste.io 用docker compose安装,在要部署poste.io的目录下创建docker-compose.yml文件
jsversion: '3.7'
services:
mailserver:
image: analogic/poste.io
hostname: mail.your-domain.com
ports:
- "25:25"
- "110:110"
- "143:143"
- "587:587"
- "993:993"
- "995:995"
- "4190:4190"
- "465:465"
- "8808:80"
- "8843:443"
environment:
- LETSENCRYPT_EMAIL=admin@your-domain.com
- LETSENCRYPT_HOST=mail.your-domain.com
- VIRTUAL_HOST=mail.your-domain.com
- DISABLE_CLAMAV=TRUE
- TZ=Asia/Shanghai
- HTTPS=OFF
volumes:
- /etc/localtime:/etc/localtime:ro
- ./mail-data:/data
服务 | 端口 | 说明 |
---|---|---|
SMTP | 25 | SMTP |
IMAP | 143 | IMAP |
POP3 | 110 | POP3 |
SMTPS | 465 | SMTPS |
IMAPS | 993 | IMAPS |
POP3S | 995 | POP3S |
MSA | 587 | SMTP 端口主要由电子邮件客户端在 STARTTLS 和身份验证之后使用 |
Sieve | 4190 | 远程筛子设置 |
Webmail | 8808 | Webmail |
Webmail | 8843 | Webmail |
注意
请注意修改里面的域名和存储路径。
禁用反病毒功能(DISABLE_CLAMAV=TRUE)、禁用反垃圾邮件功能(DISABLE_RSPAMD=TRUE),可以大幅减低内存和CPU占用,请酌情设置禁用选项。
禁用WEB收发功能(DISABLE_ROUNDCUBE=TRUE),可以进一步减少资源占用,不过非必要不建议禁止。
8808为http端口,可以根据自己的需求修改。
docker-compose up -d
upstream poste_backend { server 127.0.0.1:8808; } server { listen 80; listen 443 ssl http2; server_name mail.your-domain.com; ssl_certificate /etc/nginx/conf.d/ssl/cert.pem; ssl_certificate_key /etc/nginx/conf.d/ssl/key.pem; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;"; access_log /var/log/nginx/mail.log main; location ^~ /.well-known { proxy_pass http://poste_backend; } location / { proxy_pass http://poste_backend; proxy_set_header Host $host; proxy_intercept_errors off; # real-ip proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; # websocket proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_read_timeout 86400; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } if ($server_port = 80 ) { return 301 https://$host$request_uri; } }
https://mail.your-domain.com,进入poste.io
的配置页面,按照提示进行配置即可。配置 Let’s Encrypt 证书。
_s20160910378._domainkey.your-domain.com
协议 | 服务器地址 | 端口 | SSL |
---|---|---|---|
SMTP | mail.your-domain.com,smtp.your-domain.com | 25, 465, 587 | STARTTLS |
IMAP | mail.your-domain.com,imap.your-domain.com | 993, 143 | STARTTLS |
POP3 | mail.your-domain.com,pop.your-domain.com | 995, 110 | STARTTLS |
本文作者:我本无罪
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!