hasCorp的集中式电子邮件自动化服务(附实例)

75 阅读2分钟

hasMail

hasCorp的集中式电子邮件自动化服务。

在本地运行

一个完整的例子:

go run cmd/mailservice/main.go -bypass -port=2564

认证

SendGrid

将你的SendGrid API密钥存储在 repo根部的credentials.json (这在.gitignore )。看一下./credentials.json.template,作为一个例子。

{
    "SENDGRID_API_KEY": "Your API key goes here",
    "FROM_NAME": "Friendly Name",
    "FROM_ADDR": "some-email@fake.dev"
}
    

如果你不想把凭证和配置存储在项目 repo 中的 JSON 文件中,你可以用相同的密钥名称暴露环境变量。

# for Linux/Unix systems
export SENDGRID_API_KEY="Your API key goes here",
export FROM_NAME="Friendly Name",
export FROM_ADDR="some-email@fake.dev"
# for Windows systems
set SENDGRID_API_KEY="Your API key goes here",
set FROM_NAME="Friendly Name",
set FROM_ADDR="some-email@fake.dev"

绕过客户端认证

对于本地开发,做一些测试是有意义的,不需要硬性依赖认证服务来验证传入的请求。 在本地运行时,传入-bypass 标志以忽略客户端认证验证

go run cmd/mailservice/main.go -bypass

侦听端口

默认情况下,HTTP服务器的监听端口是8000 。这可以在运行时通过-port 标志来改变:

go run cmd/mailservice/main.go -bypass -port=2564

构建

你可以通过运行在本地构建该项目:

go build .

或者你可以使用 repo 根目录下的Dockerfile 来构建一个镜像:

docker build -t hascorp/hasmail -f Dockerfile .

运行

你可以使用go 在本地运行该项目:

go run ./cmd/mailservice

或者你可以使用构建的Docker镜像来运行一个容器:

docker run -it -p 8000:8000 hascorp/hasmail

测试

用cURL或你喜欢的客户端平移服务器:

# ping healthcheck endpoint

发布

管线

TODO:这个

Dockerize

用生产的Dockerfile进行构建:

docker build -t hascorp/hasmail-prod -f Dockerfile.production .

这可以像常规Dockerfile一样在本地进行测试:

docker run -it -p 8000:8000 hascorp/hasmail-prod

测试

单元测试

在本地运行单元测试:

# ping healthcheck endpoint
curl localhost:8000/

# verify routes work with no-op endpoint
curl -d '{"a": "b"}' -H 'Content-Type: application/json' localhost:8000/mail/noop

# send a sample mail
curl -d '{"name": "Hank Pecker", "vars": {"foo": "bar"}, "recipient": "hank@hascorp.dev"}' -H 'Content-Type: application/json' localhost:8000/mail/sample