
本文介绍如何使用 Go 的标准库 net/smtp 发送带有“重要”标记的邮件,通过设置标准邮件头字段(如 Importance、X-Priority 和 X-MSMail-Priority)向接收方客户端提示邮件优先级。需注意:该标记仅作为提示,实际高亮效果取决于收件人邮箱客户端(如 Outlook、Thunderbird)是否支持并启用相应渲染逻辑。
本文介绍如何使用 go 的标准库 `net/smtp` 发送带有“重要”标记的邮件,通过设置标准邮件头字段(如 `importance`、`x-priority` 和 `x-msmail-priority`)向接收方客户端提示邮件优先级。需注意:该标记仅作为提示,实际高亮效果取决于收件人邮箱客户端(如 outlook、thunderbird)是否支持并启用相应渲染逻辑。
要在 Go 中将 SMTP 邮件标记为“高优先级”或“重要”,关键在于正确设置 MIME 头部字段。虽然 SMTP 协议本身不定义“优先级”语义,但业界广泛采用以下三个非强制但被主流邮件客户端识别的头部字段:
-
Importance: RFC 2076 标准字段,推荐值为"high"(小写)、"normal"或"low"; -
X-Priority: Microsoft/Outlook 传统扩展字段,取值为"1 (Highest)"、"2 (High)"、"3 (Normal)"等; -
X-MSMail-Priority: Outlook 专用字段,值为"High"、"Normal"或"Low"(首字母大写)。
✅ 正确做法是同时设置这三项,以最大化跨客户端兼容性。以下是整合后的完整示例代码(已修复原始代码中的安全隐患与格式问题):
package main
import (
"fmt"
"log"
"net/smtp"
)
func sendHighPriorityEmail(server string) {
headers := map[string]string{
"Subject": "Hi-Pri# Server " + server + " down",
"From": "YYYY@net",
"To": "XXXX@net",
"Importance": "high", // ✅ 标准化字段(小写)
"X-Priority": "1 (Highest)", // ✅ Outlook 兼容
"X-MSMail-Priority": "High", // ✅ Outlook 明确标识
"MIME-Version": "1.0",
"Content-Type": `text/plain; charset="UTF-8"`,
}
body := "Hello, Test"
// 构建符合 RFC 5322 的邮件消息(注意:头部与正文间需空行,且换行符为 \r\n)
message := ""
for k, v := range headers {
message += fmt.Sprintf("%s: %s\r\n", k, v)
}
message += "\r\n" + body // 空行分隔头部与正文
auth := smtp.PlainAuth("", "YYYY@net", "your-password", "test.com")
err := smtp.SendMail(
"test.com:587", // ✅ 推荐使用加密端口(587/TLS 或 465/SSL)
auth,
"YYYY@net",
[]string{"XXXX@net"},
[]byte(message),
)
if err != nil {
log.Fatal("发送失败:", err)
}
log.Println("高优先级邮件已发出")
}
⚠️ 重要注意事项:
-
客户端依赖性强:Gmail Web 版通常忽略
Importance和X-*字段,而 Outlook Desktop / Outlook for Mac 会显示“高优先级”图标或置顶;Thunderbird 支持Importance: high并可配置高亮规则。 - 避免滥用:频繁发送高优先级邮件会导致用户屏蔽或降低信任度,建议仅用于真正紧急事件(如服务宕机、安全告警)。
-
认证与加密:原始示例未启用身份验证和 TLS,存在明文传输风险。生产环境务必使用
smtp.PlainAuth或smtp.LoginAuth,并通过587(STARTTLS)或465(SMTPS)端口发送。 -
字符编码:若邮件正文含中文等非 ASCII 字符,请确保
Content-Type指定charset="UTF-8",并在body中使用 UTF-8 编码字符串。
总结:Go 本身不提供“设为重要”的封装方法,但通过手动构造标准邮件头即可实现语义标记。真正的“高优先级体验”由接收端决定——因此,与其过度依赖头部字段,不如结合邮件主题(如 [URGENT] 前缀)、清晰正文结构与可靠通知渠道(如短信/IM)构建完整的告警体系。










