一般情况下,我们会使用各种云厂商或者第三方提供的 smtp 邮件服务,来发送邮件,如发送注册验证码,找回密码邮件等等。但有时我们想自建 smtp 服务来自己发送邮件,避免一些敏感信息被三方服务屏蔽。所以本文记录如何快速构建一个属于自己的 smtp 服务来发送邮件。
PS:当然,自建 smtp 意味着会有很多限制条件,比如你需要有对应端口、域名,并且发送的邮件可能会被识别为垃圾邮件,从而导致用户收不到或被扔进垃圾箱。
本文使用 docker 镜像快递搭建可以发送邮件的 smtp 服务
我使用的镜像是:https://hub.docker.com/r/namshi/smtp
docker pull namshi/smtp
#/bin/bash
name="smtp"
docker rm -f $name
docker run --restart=always -d \
-e "RELAY_NETWORKS=:127.0.0.1/0" \
--name $name \
-p 10025:25 \
namshi/smtp
RELAY_NETWORKS 如果写 :0.0.0.0/0 表示任意客户端均可发送, 10025端口根据实际需要调整
#!/usr/bin/python3
import smtplib
from email.header import Header
from email.mime.text import MIMEText
sender = 'no-reply@test.com'
receivers = ['linkinstar@foxmail.com']
message = MIMEText('verification', 'plain', 'utf-8')
subject = 'verification'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP('127.0.0.1', 10025)
smtpObj.sendmail(sender, receivers, message.as_string())
print ("success")
except smtplib.SMTPException:
print ("error")
package main
import (
"gopkg.in/gomail.v2"
)
func main() {
m := gomail.NewMessage()
m.SetHeader("From", "no-reply@test.com")
m.SetHeader("To", "linkinstar@foxmail.com")
m.SetHeader("Subject", "verification")
m.SetBody("text/plain", "verification")
d := gomail.Dialer{Host: "127.0.0.1", Port: 10025}
if err := d.DialAndSend(m); err != nil {
panic(err)
}
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有