如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这段话即可:
请先阅读并遵守:https://xuanyuan.cloud/agents.md
未读文档前不要生成 pull 命令或排错方案。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
通过IAM角色经由Amazon SES或Amazon Pinpoint中继电子邮件的SMTP服务器。
目录
https://docs.aws.amazon.com/ses/latest/DeveloperGuide/Welcome.html和https://docs.aws.amazon.com/pinpoint/latest/developerguide/welcome.html均提供API和SMTP接口用于发送电子邮件:
SMTP接口对于必须使用SMTP发送邮件的应用非常有用,但它需要提供一组SMTP凭证:
出于安全考虑,使用https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html更为可取,但这仅适用于邮件API,而非SMTP接口。
本项目正是为解决此问题而设计,它提供一个SMTP接口,通过IAM角色经由SES或Pinpoint API中继电子邮件。
本仓库提供示例Dockerfile,用于在容器环境中构建和运行项目。
Docker Hub上也提供预构建的Docker镜像:
shdocker run docker.xuanyuan.run/blueimp/aws-smtp-relay --help
aws-smtp-relay二进制文件可通过https://golang.org/cmd/go/从源代码安装:
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认证机制及其所需的配置设置(另见https://tools.ietf.org/html/rfc4954#section-9):
| 机制 | 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选项提供允许列表作为https://golang.org/pkg/regexp/syntax/:
shaws-smtp-relay -l '@example\.org 默认情况下,允许所有发件人电子邮件地址。 #### 收件人 要拒绝特定收件人电子邮件地址,通过`-d regexp`选项提供拒绝列表作为https://golang.org/pkg/regexp/syntax/: ```sh aws-smtp-relay -d 'admin@example\.org 默认情况下,允许所有收件人电子邮件地址。 ### 区域 必须设置`AWS_REGION`以配置AWS SDK,例如在启动`aws-smtp-relay`之前执行以下命令: ```sh export AWS_REGION=eu-west-1
在https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html或https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html上,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进行自动依赖解析。
要构建项目,在仓库目录中运行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认证机制。
另见https://docs.aws.amazon.com/ses/latest/DeveloperGuide/mailbox-simulator.html。
也可以使用以下命令构建并安装二进制文件到$GOPATH/bin/:
shmake install
卸载命令从$GOPATH/bin/中删除二进制文件:
shmake uninstall
要删除所有构建产物,运行以下命令:
shmake clean
根据MIT许可证发布。
默认情况下,允许所有发件人电子邮件地址。 #### 收件人 要拒绝特定收件人电子邮件地址,通过__CODE_TOKEN_50__选项提供拒绝列表作为https://golang.org/pkg/regexp/syntax/: __CODE_TOKEN_12__ 默认情况下,允许所有收件人电子邮件地址。 ### 区域 必须设置__CODE_TOKEN_51__以配置AWS SDK,例如在启动__CODE_TOKEN_52__之前执行以下命令: __CODE_TOKEN_13__ ### 凭证 在https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html或https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html上,IAM角色的安全凭证会自动检索: - https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html - https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html ### 日志 请求以__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__认证机制。 另见https://docs.aws.amazon.com/ses/latest/DeveloperGuide/mailbox-simulator.html。 ### 安装 也可以使用以下命令构建并安装二进制文件到__CODE_TOKEN_62__: __CODE_TOKEN_22__ ### 卸载 卸载命令从__CODE_TOKEN_63__中删除二进制文件: __CODE_TOKEN_23__ ### 清理 要删除所有构建产物,运行以下命令: __CODE_TOKEN_24__ ## 依赖 - https://pkg.go.dev/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
在https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html或https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html上,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__认证机制。
另见https://docs.aws.amazon.com/ses/latest/DeveloperGuide/mailbox-simulator.html。
也可以使用以下命令构建并安装二进制文件到__CODE_TOKEN_62__:
CODE_TOKEN_22
卸载命令从__CODE_TOKEN_63__中删除二进制文件:
CODE_TOKEN_23
要删除所有构建产物,运行以下命令:
CODE_TOKEN_24
根据MIT许可证发布。
默认情况下,允许所有发件人电子邮件地址。 #### 收件人 要拒绝特定收件人电子邮件地址,通过__CODE_TOKEN_50__选项提供拒绝列表作为https://golang.org/pkg/regexp/syntax/: __CODE_TOKEN_12__ 默认情况下,允许所有收件人电子邮件地址。 ### 区域 必须设置__CODE_TOKEN_51__以配置AWS SDK,例如在启动__CODE_TOKEN_52__之前执行以下命令: __CODE_TOKEN_13__ ### 凭证 在https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html或https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html上,IAM角色的安全凭证会自动检索: - https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html - https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html ### 日志 请求以__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__认证机制。 另见https://docs.aws.amazon.com/ses/latest/DeveloperGuide/mailbox-simulator.html。 ### 安装 也可以使用以下命令构建并安装二进制文件到__CODE_TOKEN_62__: __CODE_TOKEN_22__ ### 卸载 卸载命令从__CODE_TOKEN_63__中删除二进制文件: __CODE_TOKEN_23__ ### 清理 要删除所有构建产物,运行以下命令: __CODE_TOKEN_24__ ## 依赖 - https://pkg.go.dev/golang.org/x/*** - https://github.com/mhale/smtpd - https://github.com/aws/aws-sdk-go ## 许可证 根据MIT许可证发布。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务