前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速建立 smtp 服务

快速建立 smtp 服务

作者头像
LinkinStar
发布2022-10-28 10:59:50
1.6K0
发布2022-10-28 10:59:50
举报
文章被收录于专栏:LinkinStar's Blog

一般情况下,我们会使用各种云厂商或者第三方提供的 smtp 邮件服务,来发送邮件,如发送注册验证码,找回密码邮件等等。但有时我们想自建 smtp 服务来自己发送邮件,避免一些敏感信息被三方服务屏蔽。所以本文记录如何快速构建一个属于自己的 smtp 服务来发送邮件。

PS:当然,自建 smtp 意味着会有很多限制条件,比如你需要有对应端口、域名,并且发送的邮件可能会被识别为垃圾邮件,从而导致用户收不到或被扔进垃圾箱。

本文使用 docker 镜像快递搭建可以发送邮件的 smtp 服务

镜像

我使用的镜像是:https://hub.docker.com/r/namshi/smtp

代码语言:javascript
复制
docker pull namshi/smtp
代码语言:javascript
复制
#/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端口根据实际需要调整

python 测试

代码语言:javascript
复制
#!/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")

golang 测试

代码语言:javascript
复制
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)
	}
}

参考链接

https://zhuanlan.zhihu.com/p/34162708

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 镜像
  • python 测试
  • golang 测试
  • 参考链接
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档