golang现代化全功能安全邮件服务器插件mox的使用

Golang现代化全功能安全邮件服务器插件mox的使用

概述

Mox是一个现代化的、功能齐全的开源安全邮件服务器,适用于低维护的自托管电子邮件服务。

主要特性

  • 快速轻松地启动/维护邮件服务器,适用于您自己的域名
  • 支持SMTP(含扩展)用于接收、提交和投递邮件
  • 支持IMAP4(含扩展)为邮件客户端提供邮件访问
  • 提供网页邮件界面,可通过浏览器阅读/发送邮件
  • 支持SPF/DKIM/DMARC用于消息/投递认证
  • 基于贝叶斯的垃圾邮件过滤,可针对每个用户学习垃圾/非垃圾邮件
  • 国际化邮件支持(EIA),支持Unicode用户名和IDNA域名
  • 自动TLS与ACME(支持Let’s Encrypt等CA)
  • 提供Web管理界面帮助设置域名、账户和别名列表
  • 支持账户自动发现(通过SRV记录)
  • 内置Web服务器,可同时用于网站服务
  • 提供简单的HTTP/JSON API用于发送事务邮件和接收投递事件
  • 提供Prometheus指标和结构化日志

快速开始

要为您的域名设置邮件服务,最简单的方法是获取一个专门用于邮件服务的(虚拟)机器,命名为[host].[domain]例如mail.example.com)。建议安装支持DNSSEC验证的解析器,如unbound。

以root用户运行以下命令:

# 创建mox用户和主目录(或选择其他名称/目录):
useradd -m -d /home/mox mox

cd /home/mox
# ...在此目录编译或下载mox...

# 为您的地址/域名生成配置文件:
./mox quickstart you@example.com

quickstart命令会:

  • 创建配置文件mox.conf和domains.conf
  • 将域名和账户添加到domains.conf
  • 生成管理员和账户密码
  • 打印需要添加的DNS记录
  • 打印启动mox的命令,以及可选的服务安装命令

示例代码

以下是一个简单的Golang程序示例,展示如何使用mox的API发送邮件:

package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	// 配置mox API端点和管理员凭据
	apiURL := "http://localhost:80/api/send"
	adminUser := "admin"
	adminPass := "your-admin-password"

	// 准备邮件数据
	mailData := map[string]interface{}{
		"From":        "you@example.com",
		"To":          []string{"recipient@example.com"},
		"Subject":     "Test from mox API",
		"Text":        "This is a test email sent via mox API",
		"RequireTLS":  true,
		"FutureRelease": nil,
	}

	// 将数据编码为JSON
	jsonData, err := json.Marshal(mailData)
	if err != nil {
		fmt.Println("Error encoding JSON:", err)
		return
	}

	// 创建HTTP请求
	req, err := http.NewRequest("POST", apiURL, bytes.NewBuffer(jsonData))
	if err != nil {
		fmt.Println("Error creating request:", err)
		return
	}

	// 设置基本认证头
	req.SetBasicAuth(adminUser, adminPass)
	req.Header.Set("Content-Type", "application/json")

	// 发送请求
	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("Error sending request:", err)
		return
	}
	defer resp.Body.Close()

	// 处理响应
	if resp.StatusCode != http.StatusOK {
		fmt.Println("API returned error:", resp.Status)
		return
	}

	fmt.Println("Email sent successfully!")
}

编译安装

您可以使用以下命令下载最新版本的源代码并编译为"mox"二进制文件:

GOBIN=$PWD CGO_ENABLED=0 go install github.com/mjl-/mox@latest

Docker支持

虽然不推荐,但您也可以使用docker镜像r.xmox.nl/mox运行mox。重要的是要使用docker主机网络,这样mox才能使用公共IP并获得正确的远程IP信息。

常见问题

如何更改密码?

普通用户(通过IMAP/SMTP认证)可以在账户页面更改密码,例如http://localhost/。或者您可以使用"mox setaccountpassword"设置密码。

管理员可以通过管理页面更改任何账户的密码,默认在http://localhost/admin/(登录时留空用户名)。

如何保持更新?

请在mox.conf中设置"CheckUpdates: true"。Mox将每24小时通过DNS TXT请求检查_updates.xmox.nl是否有新版本。

如何升级mox安装?

通常只需替换新二进制文件并重启即可。如果需要手动操作,发行说明会提及。升级前,请使用mox backup <destdir>备份配置和数据目录。

最低运行要求是什么?

Mox不需要太多资源。您可以从小型机器开始,如512MB RAM的机器。存储空间应考虑邮件消息的大小(目前不压缩),加上15%的元数据开销,并留出一些余量。


更多关于golang现代化全功能安全邮件服务器插件mox的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang现代化全功能安全邮件服务器插件mox的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用Go语言现代化邮件服务器mox

mox是一个用Go语言编写的现代化全功能安全邮件服务器,它实现了SMTP、IMAP、HTTP (用于管理)等协议,支持TLS、SPF、DKIM、DMARC等安全标准,是一个轻量级但功能完备的邮件服务器解决方案。

mox主要特性

  • 完全用Go编写,单二进制部署
  • 支持SMTP (邮件发送)、IMAP (邮件访问)
  • 内置账户管理和管理界面
  • 自动配置TLS (Let’s Encrypt集成)
  • 支持SPF、DKIM、DMARC等安全协议
  • 支持国际域名(UTF8)和国际化邮件
  • 内存安全设计,避免常见安全问题

安装mox

# 从源码安装
go install github.com/mjl-/mox@latest

# 或者下载预编译二进制
# 从 https://github.com/mjl-/mox/releases 下载对应平台的二进制

快速启动示例

以下是一个简单的mox配置和使用示例:

package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"path/filepath"

	"github.com/mjl-/mox/config"
	"github.com/mjl-/mox/mox-"
)

func main() {
	// 设置工作目录
	workDir := filepath.Join(os.TempDir(), "mox-example")
	os.MkdirAll(workDir, 0770)
	
	// 初始化配置
	conf := config.Config{
		DataDir: workDir,
		Listeners: map[string]config.Listener{
			"public": {
				IPs:        []string{"0.0.0.0"},
				SMTP:       config.SMTP{Enabled: true, Port: 25},
				Submission: config.Submission{Enabled: true, Port: 587},
				IMAP:       config.IMAP{Enabled: true, Port: 143},
			},
		},
		Domains: map[string]config.Domain{
			"example.com": {
				LocalpartCaseSensitive: false,
				DKIM: config.DKIM{
					Selectors: map[string]config.Selector{
						"default": {
							Enabled:      true,
							PrivateKeyFile: "dkim-privatekey.pem",
						},
					},
				},
			},
		},
		Accounts: map[string]config.Account{
			"user@example.com": {
				Enabled: true,
			},
		},
	}

	// 写入配置文件
	configPath := filepath.Join(workDir, "mox.conf")
	if err := config.WriteConfigFile(configPath, &conf); err != nil {
		log.Fatalf("writing config: %v", err)
	}

	// 初始化mox
	if err := mox.LoadConfig(context.Background(), configPath, false); err != nil {
		log.Fatalf("loading config: %v", err)
	}

	// 启动服务器
	fmt.Println("Starting mox mail server...")
	mox.Start(context.Background())
	
	// 等待中断信号
	mox.ShutdownWait()
}

常用操作示例

1. 添加新用户

func addUser(email, password string) error {
	acc, err := mox.OpenAccount(email)
	if err != nil {
		return fmt.Errorf("open account: %v", err)
	}
	
	if err := acc.SetPassword(password); err != nil {
		return fmt.Errorf("set password: %v", err)
	}
	
	return nil
}

2. 发送测试邮件

func sendTestMail(from, to, subject, body string) error {
	msg := &message.Message{
		Header: message.Header{
			From:    []message.Address{{Address: from}},
			To:      []message.Address{{Address: to}},
			Subject: subject,
		},
		Body: body,
	}
	
	// 使用SMTP客户端发送
	client, err := smtpclient.New("localhost:587", smtpclient.Options{})
	if err != nil {
		return fmt.Errorf("smtp client: %v", err)
	}
	defer client.Close()
	
	if err := client.Deliver(from, to, msg); err != nil {
		return fmt.Errorf("deliver: %v", err)
	}
	
	return nil
}

3. 配置TLS证书

func configureTLS(domain string) error {
	// 自动从Let's Encrypt获取证书
	mox.Conf.Static.TLS.ACME = map[string]config.ACME{
		"letsencrypt": {
			DirectoryURL: "https://acme-v02.api.letsencrypt.org/directory",
			Contact:     []string{"mailto:admin@" + domain},
		},
	}
	
	// 重新加载配置
	if err := mox.LoadConfig(context.Background(), mox.ConfigFilepath, true); err != nil {
		return fmt.Errorf("reload config: %v", err)
	}
	
	return nil
}

生产环境建议

  1. 数据目录:不要使用临时目录,指定一个持久化存储位置
  2. 备份:定期备份DataDir目录
  3. 防火墙:只开放必要的端口(25, 587, 143, 993等)
  4. 监控:设置日志监控和性能监控
  5. DNS配置:正确配置MX、SPF、DKIM和DMARC记录

管理界面

mox内置了管理界面,默认在http://localhost:80https://localhost:443可用。你可以通过管理界面:

  • 查看服务器状态
  • 管理账户和域名
  • 查看队列中的邮件
  • 配置安全策略

总结

mox是一个功能强大且安全的现代邮件服务器解决方案,特别适合需要自建邮件服务的Go开发者。它的Go语言实现保证了跨平台兼容性和内存安全性,内置的安全功能符合现代邮件标准。通过简单的配置和API,可以快速搭建起一个生产可用的邮件服务器。

更多详细配置和高级用法可以参考mox的官方文档:https://github.com/mjl-/mox

回到顶部