跳到主要内容

邮件 / 电话 / 短信

SMTP 设置,以及通过阿里云、腾讯云发电话和短信。

这页办完你会得到:一个能发信的邮件媒介,以及(如果你要)走阿里云或腾讯云的短信、 语音媒介——它们和 IM 群机器人最大的不同是要按人发,所以还得让用户填上邮箱和手机号。

邮件:SMTP 配在媒介上​

告警通知 → 通知媒介,左边的类型面板里点 邮件。开源版自带一个叫 Email 的媒介, 直接编辑它就行,不必新建。

通知媒介通知媒介

SMTP 配置这一块:

字段说明
服务器SMTP 地址,如 smtp.example.com
端口25(明文,不建议)、465(SSL)、587(STARTTLS)
用户名通常是完整邮箱地址
密码登录密码或授权码。SMTP 这几个字段是原样使用的,不支持引用变量,密码只能明文填在这里
发件人alert@example.com,也可以写成 夜莺告警 <alert@example.com>
跳过证书验证自签证书时才开,仅作临时手段
批量发送一次 SMTP 连接里发几封,0 表示每封都新建连接;连接空闲 30 秒也会自动断开

变量配置 → 联系方式 保持 Email。这个字段决定了「接收人是谁」怎么解析成收件地址: Email 取用户的邮箱,Phone 取手机号,其他自定义联系方式取用户资料里对应的那一项。

填完点底部的 测试 真发一封,确认能收到再保存。

常见邮箱的 SMTP 参数​

服务服务器端口密码填什么
阿里企业邮箱smtp.qiye.aliyun.com465登录密码
腾讯企业邮箱smtp.exmail.qq.com465登录密码
163 / 126smtp.163.com / smtp.126.com465授权码(先在网页端开启 SMTP)
QQ 邮箱smtp.qq.com465授权码
Gmailsmtp.gmail.com587App Password(需先开两步验证)
Outlook / Microsoft 365smtp.office365.com587账号密码或 App Password

云主机上常见的一个坑:很多云厂商默认封禁 25 端口出方向,表现为 i/o timeout。 改用 465 或 587。

收件人从哪儿来​

短信、语音、邮件这类媒介在通知规则里会多出 接收人 / 接收团队 两个字段, 两者不能同时为空。发送时的解析规则是:

  1. 把接收人和接收团队里的所有用户展开成一个用户列表,去重;
  2. 按媒介的联系方式取每个用户的对应字段(Email 取邮箱、Phone 取手机号);
  3. 取不到值的用户直接跳过,不报错。

所以第 3 步是最常见的「某些人收不到」的原因。去 人员组织 → 用户管理 编辑用户, 把邮箱和手机号补上。

联系方式的可选项除了内置的 Phone、Email,管理员还能在媒介表单里点 「联系方式」旁边的齿轮,加自定义联系方式(比如企业内部的员工号)。

电话和短信:四张卡片​

类型面板里有四张卡片:阿里云短信、阿里云语音、腾讯云短信、腾讯云语音。 它们都是 http 类型的媒介,签名由夜莺按各家的算法(阿里云 ACS3-HMAC-SHA256、 腾讯云 TC3-HMAC-SHA256)在发送时算好,AK/SK 用完即从日志里抹掉。

四张卡片的共同点:

  • 联系方式固定是 Phone,收件人手机号来自用户资料;
  • 请求里用 {{ $sendto }} 代表当前收件人的号码;
  • 一次调用只发一个号码,多个收件人会循环发送。

它们的差别在于凭证填哪儿:

媒介凭证位置关键字段
阿里云短信请求参数AccessKeyId、AccessKeySecret、SignName、TemplateCode
阿里云语音请求参数AccessKeyId、AccessKeySecret、TtsCode、CalledShowNumber
腾讯云短信请求头Secret_ID、Secret_Key、X-TC-Region,正文里 SignName、SmsSdkAppId、TemplateId
腾讯云语音请求头Secret_ID、Secret_Key,正文里 TemplateId、VoiceSdkAppid

阿里云的两张卡片还预置了 Host 请求头(dysmsapi.aliyuncs.com / dyvmsapi.aliyuncs.com), 签名要用到它,不要删。

需要你替换的占位值​

新建时表单里预置的是中文占位提示,例如「需要改为实际的 access_key_id」「需要改为实际的模板 id」。 一个都不能留,逐个换成你在云控制台申请到的真值:

  • 短信要先申请签名和模板(阿里云叫模板 CODE,腾讯云叫模板 ID),审批通过才能用;
  • 语音要申请 TTS 模板;阿里云的 CalledShowNumber 没有申请到号码时,整行删掉,不要留空值;
  • 腾讯云的 X-TC-Region 要改成你实际的地域,比如 ap-guangzhou。

手机号格式两家不一样:腾讯云要 E.164(+86138…)。腾讯云语音的内置请求体已经写死了 +86{{ $sendto }} 前缀,所以用户资料里的手机号不要再写 +86;腾讯云短信的内置请求体 没有这个前缀,要么在用户资料里存成 +86…,要么自己把请求体改成 "+86{{ $sendto }}"。

短信和语音的模板字段不一样​

媒介请求里怎么引用模板必须有的字段
阿里云短信 / 语音{{$tpl.incident}}incident
腾讯云短信 / 语音{{$tpl.content}}content
邮件固定subject、content

内置的 Aliyun SMS / Aliyun Voice 模板的 incident 字段就是一行 {{$event.RuleName}}, 因为云厂商的短信模板变量长度有限(腾讯云语音的单个变量上限约 30 个字符)。 规则名很长的话,克隆一份模板缩短它,别指望云厂商帮你截断。

常见报错​

报错原因
535 Authentication failed邮箱要用授权码而不是登录密码,或者服务商没开 SMTP
i/o timeout(邮件)25 端口被封,换 465 / 587
x509: certificate signed by unknown authority自签证书,临时开「跳过证书验证」
SignatureDoesNotMatchAK/SK 粘贴时带了空格,或删掉了 Host 请求头
isv.SMS_SIGNATURE_ILLEGAL / FailedOperation.SignatureIncorrectOrUnapproved签名没审批通过,或和控制台里的字不完全一致
isv.MOBILE_NUMBER_ILLEGAL / InvalidParameterValue.InvalidPhoneNumber手机号格式不对,多半是 +86 多写或少写
AuthFailure.SignatureFailure(腾讯云)密钥不对,或服务器时钟偏差超过 5 分钟

失败详情在事件详情的通知记录里,见重试与投递状态。

下一步​