官网: https://stalw.art/docs/install/platform/docker/

 优秀文章请 参考 ; https://blog.csdn.net/weixin_50841758/article/details/150879147

 

1 安装Stalwart

Stalwart 是一款开源、高性能的现代邮件服务器,由 Rust 语言开发,集成 MTA、IMAP、POP3、JMAP 和 Web 管理界面。它支持 TLS 加密、反垃圾邮件与过滤规则,配置直观且安全性高,适合个人、团队或中小企业自建邮箱系统。

Stalwart支持多种部署方式,本文采用容器化部署,更多部署方式可查看这里,参考如下docker-compose文件创建并启动容器:

services:
  stalwart:
    image: 'stalwartlabs/stalwart:latest'
    container_name: stalwart
    restart: always
    ports:
      - '25:25'       # SMTP (MTA)
      - '465:465'     # SMTPS (隐式 TLS)
      - '587:587'     # Submission (客户端发信)
      - '110:110'     # POP3
      - '995:995'     # POP3S
      - '143:143'     # IMAP
      - '993:993'     # IMAPS
      - '4190:4190'   # ManageSieve (过滤脚本)
      - '443:443'     # Web 管理界面 (HTTPS)
      - '8080:8080'   # Web 管理界面 (HTTP,可跳转到 443)
    volumes:
      - './data:/opt/stalwart'

 

or  直接

sudo  docker run -dti --net host  -p 8443:443 -p 8080:8080  \
             -p 25:25 -p 587:587 -p 465:465 \
             -p 143:143 -p 993:993 -p 4190:4190 \
             -p 110:110 -p 995:995 \
             --name stalwart stalwartlabs/stalwart:latest

 

登录用户名为admin,密码为容器启动时产生的随机密码,使用如下命令查看:

docker logs --tail 1 stalwart

dev@devstar:~$ sudo docker logs c3d0a44b0735b
✅ Configuration file written to /opt/stalwart/etc/config.toml
Your administrator account is 'admin' with password 'PVnhmnjKrn'

image

 

2 添加域名及账号

  • 添加域名

image

 

  • 添加账号
  • image

     

 

image

 

4 测试账号连通性

  • 测试收件连通性,这里以993端口为例:
#  其中:a1 为命令标识符,可任意指定,XXX为邮箱密码,需要替换
printf "a1 LOGIN sea@sea.com XXX\r\n" | openssl s_client -crlf -quiet -connect sea.com:993 2>/dev/null | grep "Authentication successful"

 



  • 测试发件连通性,这里以465端口为例:
#  其中:XXX为邮箱密码,需要替换
printf "EHLO localhost\r\nAUTH LOGIN\r\n$(echo -n sea@sea.com | base64)\r\n$(echo -n XXX | base64)\r\n" | openssl s_client -crlf -quiet -connect sea.com:465 2>/dev/null | grep "235 "

 

 


python 测试发送邮件

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @mail    : lshan523@163.com
# @Time    : 2025/10/10 11:13
# @Author  : Sea
# @File    : MailUtil.py# @Purpose :
# @history : 
# ****************************
#encoding=utf-8
'''
Created on 2019年10月11日
@author: sea
'''
import smtplib
import traceback
from email.mime.text import MIMEText
from email.header import Header

def sendMsg(To, Subject, Content, From='sea@sea.com', Host='192.168.18.126'):
    message = MIMEText(Content, 'plain/html', 'utf-8')  # 修正 MIME 类型
    message['Subject'] = Header(Subject, 'utf-8')
    message['From'] = From
    message['To'] = ', '.join(To)  # 正确设置接收者

    try:
        # 使用 标准 SMTP SSL 端口  连接
        smtpObj = smtplib.SMTP_SSL(Host, 465)
        # 或者使用 STARTTLS
        # smtpObj = smtplib.SMTP(Host, 587)
        # smtpObj.starttls()
        # 应当将登录凭据作为参数传入而非硬编码
        smtpObj.login("sea@sea.com", "123456")
        smtpObj.sendmail(From, To, message.as_string())
        print("邮件发送成功")
    except smtplib.SMTPException as e:
        traceback.print_exc()
        print("Error: 无法发送邮件")

#  printf "a1 LOGIN  sea@sea.com 123456\r\n" | openssl s_client -crlf -quiet -connect sea.com:993 2>/dev/null | grep "Authentication successful"
#  printf "a1 LOGIN sea@sea.com 123456\r\n" | openssl s_client -crlf -quiet -connect sea.com:993 2>/dev/null | grep "Authentication successful"


if __name__ == '__main__':
    To = ["lshan@sea.com","lshan523@163.com"]  # 接收邮件,可设置 QQ邮箱  或者163邮箱,企业邮箱无法接收 由于并没有实际 购买域名和证书
    Subject = '会议12.6 纪要'
    Content="'你好, 会议12.6 纪要已发送,请查收。'"
    sendMsg(To, Subject, Content)

 

 

 

posted on 2025-10-10 11:07  lshan  阅读(16)  评论(0)    收藏  举报