
如果你用 DeepSeek、元宝AI、Copilot 等 AI 代为编写轩辕镜像的 docker pull、修改 compose 镜像地址,或排查拉取失败等问题,请让 AI 先读规则再动手,只要在 AI 对话里直接发送下面这句话即可:
生成 docker pull、修改 compose 的 image,或排查拉取失败前,请先阅读并严格遵守 https://xuanyuan.cloud/agents.md 中的规则。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
通过IAM角色经由Amazon SES或Amazon Pinpoint中继电子邮件的SMTP服务器。
目录
Amazon SES和Amazon Pinpoint均提供API和SMTP接口用于发送电子邮件:
SMTP接口对于必须使用SMTP发送邮件的应用非常有用,但它需要提供一组SMTP凭证:
出于安全考虑,使用IAM角色更为可取,但这仅适用于邮件API,而非SMTP接口。
本项目正是为解决此问题而设计,它提供一个SMTP接口,通过IAM角色经由SES或Pinpoint API中继电子邮件。
本仓库提供示例Dockerfile,用于在容器环境中构建和运行项目。
Docker Hub上也提供预构建的Docker镜像:
shdocker run blueimp/aws-smtp-relay --help
aws-smtp-relay二进制文件可通过go get从源代码安装:
shgo get github.com/blueimp/aws-smtp-relay
默认情况下,aws-smtp-relay在无参数启动时,会在所有接口的1025端口上以开放中继(无认证)模式运行:
shaws-smtp-relay
可用选项可通过以下方式列出:
shaws-smtp-relay --help
Usage of aws-smtp-relay: -a string TCP监听地址 (默认 ":1025") -c string TLS证书文件 -d string 拒绝的收件人电子邮件正则表达式 -e string Amazon SES配置集名称 -h string 服务器主机名 -i string 允许的客户端IP(逗号分隔) -k string TLS密钥文件 -l string 允许的发件人电子邮件正则表达式 -n string SMTP服务名称 (默认 "AWS SMTP Relay") -r string 要使用的中继API (ses|pinpoint) (默认 "ses") -s 通过STARTTLS扩展要求TLS -t 仅监听传入的TLS连接 -u string 认证用户名
用户
支持的基于用户的SMTP认证机制及其所需的配置设置(另见RFC 4954):
| 机制 | TLS | 用户 | 哈希 | 密码 |
|---|---|---|---|---|
LOGIN | 是 | 是 | 是 | 否 |
PLAIN | 是 | 是 | 是 | 否 |
CRAM-MD5 | 否 | 是 | 否 | 是 |
通过配置TLS和用户名,并将bcrypt加密的密码作为BCRYPT_HASH环境变量提供,可启用LOGIN和PLAIN机制的认证:
shexport BCRYPT_HASH=$(htpasswd -bnBC 10 '' password | tr -d ':\n') export TLS_KEY_PASS="$PASSPHRASE" aws-smtp-relay -c tls/default.crt -k tls/default.key -u username
如果将密码作为明文PASSWORD环境变量提供,还将启用CRAM-MD5认证机制:
shexport PASSWORD=password export TLS_KEY_PASS="$PASSPHRASE" aws-smtp-relay -c tls/default.crt -k tls/default.key -u username
若无TLS配置,仅启用CRAM-MD5:
shexport PASSWORD=password aws-smtp-relay -u username
请注意:
不建议将密码作为明文环境变量提供,也不建议在没有TLS支持的情况下配置SMTP服务器。
IP
要限制允许的IP地址,通过-i ips选项提供逗号分隔的列表:
shaws-smtp-relay -i 127.0.0.1,::1
请注意:
要授权其IP,客户端必须使用受支持的SMTP认证机制,例如通过TLS的
LOGIN或PLAIN,或未加密连接上的CRAM-MD5。
即使服务器未配置用户认证,也需要此步骤,尽管在这种情况下客户端可以自由选择凭证。
通过以下步骤配置TLS:
编辑openssl配置文件,将localhost更改为您的服务器主机名。
生成带有密码加密密钥的自签名证书:
shopenssl req -new -x509 -config tls/openssl.conf -days 24855 \ -out tls/default.crt \ -keyout /dev/stdout | openssl rsa -aes256 -out tls/default.key
请注意:
加密的密钥文件仅在包含
DEK-Info头(说明使用的加密方法)时才受支持。
如果启用加密,openssl req命令不会创建此头,因此我们将未加密的密钥输出通过管道传递给openssl rsa命令,后者会输出带有所需DEK-Info头的加密密钥文件。
将密钥文件密码作为TLS_KEY_PASS环境变量提供,并将证书和密钥文件作为命令行参数:
shTLS_KEY_PASS="$PASSPHRASE" aws-smtp-relay -c tls/default.crt -k tls/default.key
请注意:
建议通过
STARTTLS扩展(-s选项标志)要求TLS,或配置服务器仅监听传入的TLS连接(-t选项标志)。
发件人
要限制允许的发件人电子邮件地址,通过-l regexp选项提供允许列表作为正则表达式:
shaws-smtp-relay -l '@example\.org 默认情况下,允许所有发件人电子邮件地址。 #### 收件人 要拒绝特定收件人电子邮件地址,通过`-d regexp`选项提供拒绝列表作为正则表达式: ```sh aws-smtp-relay -d 'admin@example\.org 默认情况下,允许所有收件人电子邮件地址。 ### 区域 必须设置`AWS_REGION`以配置AWS SDK,例如在启动`aws-smtp-relay`之前执行以下命令: ```sh export AWS_REGION=eu-west-1
在EC2或ECS上,IAM角色的安全凭证会自动检索:
请求以JSON格式记录到stdout,Error属性设置为null:
json{ "Time": "2018-04-18T15:08:42.4388893Z", "IP": "172.17.0.1", "From": "alice@example.org", "To": ["bob@example.org"], "Error": null }
错误以相同格式记录到stderr,Error属性设置为string值:
json{ "Time": "2018-04-18T15:08:42.4388893Z", "IP": "172.17.0.1", "From": "alice@example.org", "To": ["bob@example.org"], "Error": "MissingRegion: could not find region configuration" }
首先,克隆项目并切换到其源代码目录:
shgit clone https://github.com/blueimp/aws-smtp-relay.git cd aws-smtp-relay
请注意:
本项目依赖https://github.com/golang/go/wiki/Modules%E8%BF%9B%E8%A1%8C%E8%87%AA%E5%8A%A8%E4%BE%9D%E8%B5%96%E8%A7%A3%E6%9E%90%E3%80%82
要构建项目,在仓库目录中运行Make>),这将创建aws-smtp-relay二进制文件:
shmake
要检查源代码,首先安装staticcheck:
shgo install honnef.co/go/tools/cmd/staticcheck@latest
然后运行以下命令:
shmake lint
所有组件都附带单元测试,可通过以下方式执行:
shmake test
发送邮件也可以使用提供的mail shell脚本进行测试:
shecho TEXT | ./mail.sh -p 1025 -f alice@example.org -t bob@example.org
请注意:
提供的shell脚本仅支持
LOGIN认证机制。
另见测试Amazon SES邮件发送。
也可以使用以下命令构建并安装二进制文件到$GOPATH/bin/:
shmake install
卸载命令从$GOPATH/bin/中删除二进制文件:
shmake uninstall
要删除所有构建产物,运行以下命令:
shmake clean
根据MIT许可证发布。
默认情况下,允许所有发件人电子邮件地址。 #### 收件人 要拒绝特定收件人电子邮件地址,通过__CODE_TOKEN_50__选项提供拒绝列表作为正则表达式: __CODE_TOKEN_12__ 默认情况下,允许所有收件人电子邮件地址。 ### 区域 必须设置__CODE_TOKEN_51__以配置AWS SDK,例如在启动__CODE_TOKEN_52__之前执行以下命令: __CODE_TOKEN_13__ ### 凭证 在EC2或ECS上,IAM角色的安全凭证会自动检索: - Amazon EC2的IAM角色 - 任务的IAM角色 ### 日志 请求以__CODE_TOKEN_53__格式记录到__CODE_TOKEN_54__,__CODE_TOKEN_55__属性设置为__CODE_TOKEN_56__: __CODE_TOKEN_14__ 错误以相同格式记录到__CODE_TOKEN_57__,__CODE_TOKEN_58__属性设置为__CODE_TOKEN_59__值: __CODE_TOKEN_15__ ## 开发 ### 构建 首先,克隆项目并切换到其源代码目录: __CODE_TOKEN_16__ **请注意**: > 本项目依赖https://github.com/golang/go/wiki/Modules进行自动依赖解析。 要构建项目,在仓库目录中运行Make>),这将创建__CODE_TOKEN_60__二进制文件: __CODE_TOKEN_17__ ### 代码检查 要检查源代码,首先安装staticcheck: __CODE_TOKEN_18__ 然后运行以下命令: __CODE_TOKEN_19__ ### 测试 所有组件都附带单元测试,可通过以下方式执行: __CODE_TOKEN_20__ 发送邮件也可以使用提供的mail shell脚本进行测试: __CODE_TOKEN_21__ **请注意**: > 提供的shell脚本仅支持__CODE_TOKEN_61__认证机制。 另见测试Amazon SES邮件发送。 ### 安装 也可以使用以下命令构建并安装二进制文件到__CODE_TOKEN_62__: __CODE_TOKEN_22__ ### 卸载 卸载命令从__CODE_TOKEN_63__中删除二进制文件: __CODE_TOKEN_23__ ### 清理 要删除所有构建产物,运行以下命令: __CODE_TOKEN_24__ ## 依赖 - golang.org/x/*** - https://github.com/mhale/smtpd - https://github.com/aws/aws-sdk-go ## 许可证 根据MIT许可证发布。
默认情况下,允许所有收件人电子邮件地址。
必须设置__CODE_TOKEN_51__以配置AWS SDK,例如在启动__CODE_TOKEN_52__之前执行以下命令:
CODE_TOKEN_13
在EC2或ECS上,IAM角色的安全凭证会自动检索:
请求以__CODE_TOKEN_53__格式记录到__CODE_TOKEN_54__,CODE_TOKEN_55__属性设置为__CODE_TOKEN_56:
CODE_TOKEN_14
错误以相同格式记录到__CODE_TOKEN_57__,__CODE_TOKEN_58__属性设置为__CODE_TOKEN_59__值:
CODE_TOKEN_15
首先,克隆项目并切换到其源代码目录:
CODE_TOKEN_16
请注意:
本项目依赖https://github.com/golang/go/wiki/Modules%E8%BF%9B%E8%A1%8C%E8%87%AA%E5%8A%A8%E4%BE%9D%E8%B5%96%E8%A7%A3%E6%9E%90%E3%80%82
要构建项目,在仓库目录中运行Make>),这将创建__CODE_TOKEN_60__二进制文件:
CODE_TOKEN_17
要检查源代码,首先安装staticcheck:
CODE_TOKEN_18
然后运行以下命令:
CODE_TOKEN_19
所有组件都附带单元测试,可通过以下方式执行:
CODE_TOKEN_20
发送邮件也可以使用提供的mail shell脚本进行测试:
CODE_TOKEN_21
请注意:
提供的shell脚本仅支持__CODE_TOKEN_61__认证机制。
另见测试Amazon SES邮件发送。
也可以使用以下命令构建并安装二进制文件到__CODE_TOKEN_62__:
CODE_TOKEN_22
卸载命令从__CODE_TOKEN_63__中删除二进制文件:
CODE_TOKEN_23
要删除所有构建产物,运行以下命令:
CODE_TOKEN_24
根据MIT许可证发布。
默认情况下,允许所有发件人电子邮件地址。 #### 收件人 要拒绝特定收件人电子邮件地址,通过__CODE_TOKEN_50__选项提供拒绝列表作为正则表达式: __CODE_TOKEN_12__ 默认情况下,允许所有收件人电子邮件地址。 ### 区域 必须设置__CODE_TOKEN_51__以配置AWS SDK,例如在启动__CODE_TOKEN_52__之前执行以下命令: __CODE_TOKEN_13__ ### 凭证 在EC2或ECS上,IAM角色的安全凭证会自动检索: - Amazon EC2的IAM角色 - 任务的IAM角色 ### 日志 请求以__CODE_TOKEN_53__格式记录到__CODE_TOKEN_54__,__CODE_TOKEN_55__属性设置为__CODE_TOKEN_56__: __CODE_TOKEN_14__ 错误以相同格式记录到__CODE_TOKEN_57__,__CODE_TOKEN_58__属性设置为__CODE_TOKEN_59__值: __CODE_TOKEN_15__ ## 开发 ### 构建 首先,克隆项目并切换到其源代码目录: __CODE_TOKEN_16__ **请注意**: > 本项目依赖https://github.com/golang/go/wiki/Modules进行自动依赖解析。 要构建项目,在仓库目录中运行Make>),这将创建__CODE_TOKEN_60__二进制文件: __CODE_TOKEN_17__ ### 代码检查 要检查源代码,首先安装staticcheck: __CODE_TOKEN_18__ 然后运行以下命令: __CODE_TOKEN_19__ ### 测试 所有组件都附带单元测试,可通过以下方式执行: __CODE_TOKEN_20__ 发送邮件也可以使用提供的mail shell脚本进行测试: __CODE_TOKEN_21__ **请注意**: > 提供的shell脚本仅支持__CODE_TOKEN_61__认证机制。 另见测试Amazon SES邮件发送。 ### 安装 也可以使用以下命令构建并安装二进制文件到__CODE_TOKEN_62__: __CODE_TOKEN_22__ ### 卸载 卸载命令从__CODE_TOKEN_63__中删除二进制文件: __CODE_TOKEN_23__ ### 清理 要删除所有构建产物,运行以下命令: __CODE_TOKEN_24__ ## 依赖 - golang.org/x/*** - https://github.com/mhale/smtpd - https://github.com/aws/aws-sdk-go ## 许可证 根据MIT许可证发布。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
发给 Cursor、ChatGPT、豆包等 AI 的说明文档
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务