本文分享了如何搭建邮箱服务器以及发送通知类邮件
1. 选型
针对不同的发送邮件需求,有不同的方案选择
- 少量系统邮件发送,可寻找邮箱服务商,设置开启
smtps
等服务发送,一般会有条数等限制,如每日500条 - 云服务,如aws的ses服务可以提供发送邮件服务,使用aws sdk或者
smtps
调用,申请比较费劲 - 自己搭建邮箱服务器,需自己机房或者计算机搭建,不能使用云服务器,如aws,申请开端口比ses更加费劲
- 搭建服务器可以使用
postfix + Dovecot + Roundcube
或者是iRedMail
。推荐使用iRedMail
,iRedMail
集成了这些组件。前一种方法需要自己部署的组件,证书太多,无用功太多。
简单的说,需要有一个完整的域名并使用非云服务器完成以下三步即可完成邮件服务器的搭建,其他问题也可以参考iRedMail
文档
- Install iRedMail ,查看
iRedMail
官方的文档完成安装 iRedMail
是自己生成的ssl
证书,手动替换一下- Setup DNS ,DNS(A, PTR, MX, SPF, DKIM, DMARC)的设置很重要,使邮件安全,并不会被视为垃圾,欺诈邮件。
2. 邮箱服务搭建
以下环境是使用的Ubuntu24,使用的域名是mail.sevndata.com
,发邮件的邮箱地址是nepoly@sevndata.com
- 为服务器设置一个完整域名(FQDN)的主机名
查看主机名
hostname -f
修改主机名
修改/etc/hostname
mail
修改/etc/hosts
127.0.0.1 mail.sevndata.com mail localhost localhost.localdomain
重启
reboot
- 更新
apt
安装tar
和gzip
sudo apt-get install tar gzip
- 下载
iRedMail
软件包下载页面,并上传到服务器,解压,进入目录tar zxf iRedMail-1.7.1.tar.gz cd iRedMail-1.7.1
- 执行
iRedMail
安装脚本bash iRedMail.sh
- 弹出安装界面
- 欢迎界面,按
Enter
确认 - 存储用户邮箱地址默认
/var/vmail
,可选修改并确认 - 指定
web
容器,可选nginx
- 指定数据库,可选
mysql
,空格
选择,Enter
确认 - 如果选择
mysql
输入密码 - 输入域名
- 设置总管理密码也就是
postmaster@sevndata.com
的密码
- 欢迎界面,按
- 安装成功提示
web
访问目录等内容,也可以访问iRedMail.tips
查看,需要先看第七步安装自己的ssl
证书https:/iredadmin/ #iRedAdmin的管理端admin界面,用户postmaster@sevndata.com https:/mail/ #Roundcube的web界面,可在admin创建邮箱用户在这里登录收发邮件 https:/netdata/ #netdata服务器监控界面,用户postmaster@sevndata.com
- 安装
ssl
证书,重启#iRedMail生成的证书备份 mv /etc/ssl/certs/iRedMail.crt{,.bak} mv /etc/ssl/private/iRedMail.key{,.bak} #把自己的证书替换过来 cp /nginx_web/mail.sevndata.com/cert/private.key /etc/ssl/private/iRedMail.key cp /nginx_web/mail.sevndata.com/cert/fullchain.cer /etc/ssl/certs/iRedMail.crt
- 其他一些操作,
iRedMail
集成了这些组件,所以可以单独管理这些组件systemctl restart nginx #stop start status systemctl restart postfix systemctl restart dovecot.service systemctl restart mariadb.service systemctl restart iredapd.service
3. DNS配置
这个步骤很重要,以域名mail.sevndata.com
,ip是111.111.111.111
为例
添加A记录
A mail 111.111.111.111
在你的域名服务商添加prt记录,将域名映射到 IP 地址是正向解析,反向解析是从 IP 地址到域名的映射
添加MX记录
MAX sevndata.com mail.sevndata.com
设置autodiscover
添加SPF记录,发出邮件的服务器ip
TXT sevndata.com v=spf1 ip4:111.111.111.111 -all
添加DKIM记录
- 执行命令显示DKIM KEY
amavisd showkeys amavisd-new showkeys #有些系统用的这个,上面那个不能用可以用这个 amavisd-new testkeys #测试key,测试通过显示pass
- 拷贝显示的key,组成DKIM记录,并添加到DNS中
TXT dkim._domainkey v=DKIM1; p=MIIBdsadsadsadsa
- 执行命令显示DKIM KEY
添加DMARC记录
rua
,ruf
等具体配置可以看Setup DNSTXT _dmarc v=DMARC1; p=reject; rua=mailto:support@sevndata.com; ruf=mailto:support@sevndata.com
如果你安装了
Prosody
作为Jabber/XMPP
服务,你还需要配置_xmpp-client
,_xmpp-server
,不需要就忽略,步骤二和四需要域名服务商,可以先忽略,尝试测试是否正常
4. 调用测试
测试
- 在管理端web上添加测试邮箱用户
- 在邮件收发web上登录测试邮箱用户,测试邮件收发是否正常
调用
package api_libUtils import ( "crypto/tls" "github.com/jordan-wright/email" "net/smtp" ) func SendMail(subject string, mail string, context string) error { mailUserName := "noreply@sevndata.com" mailPassword := "password" addr := "mail.sevndata.com:465" host := "mail.sevndata.com" e := email.NewEmail() e.From = "Sevndata Mail Center<noreply@sevndata.com>" e.To = []string{mail} e.Subject = subject e.HTML = []byte(context) err := e.SendWithTLS(addr, smtp.PlainAuth("", mailUserName, mailPassword, host), &tls.Config{InsecureSkipVerify: true, ServerName: host}) return err }
其他一些内容