Vigil 默认是只能发送单人邮件,但是我们有需要发送多个的场景。
解决方法:

  • 大家使用一样的账户登陆
  • 使用邮件组
  • 修改下源码
    为了学习下Vigil 的构建,以及原理,我简单通过修改源码的方式(目前支持4个人,但是代码是写死的)
    后边可以进一步优化

项目github 代码

代码我已经提交github 了
https://github.com/rongfengliang/myvigil-multiemail

修改部分说明

Vigil 使用toml 进行配置管理,我们需要做的是添加新的邮件发送字段(struct 结构体中)

src/config/config.rs 文件

  • 代码如下
 
#[derive(Deserialize)]
pub struct ConfigNotifyEmail {
    pub to: String,
    pub from: String,
    pub to2: String,
    pub to3: String,
    pub to4: String,
    pub to5: String,
    #[serde(default = "defaults::notify_email_smtp_host")]
    pub smtp_host: String,
    #[serde(default = "defaults::notify_email_smtp_port")]
    pub smtp_port: u16,
    pub smtp_username: Option<String>,
    pub smtp_password: Option<String>,
    #[serde(default = "defaults::notify_email_smtp_encrypt")]
    pub smtp_encrypt: bool,
    #[serde(default = "defaults::notify_email_reminders_only")]
    pub reminders_only: bool,
}
  • email 发送部分

    email 使用了lettre 包,但是新旧版本有点不一样,需要注意使用的是0.8,此处代码写死了4个人

            let email_message = EmailBuilder::new()
                .to(email_config.to.as_str())
                .to(email_config.to2.as_str())
                .to(email_config.to3.as_str())
                .to(email_config.to4.as_str())
                .from((
                    email_config.from.as_str(),
                    APP_CONF.branding.page_title.as_str(),
                ))
                .subject(format!(
                    "{} | {}",
                    notification.status.as_str().to_uppercase(),
                    &nodes_label
                ))
                .text(message)
                .build()
                .or(Err(true))?;
 

关于构建

Vigil 需要使用nightly 版本,但应该是1.36起对于lettre 有破坏行影响,同时官方也修改了代码
兼容问题很多,解决方法, 安装指定日志版本的nightly 版本,我构建使用docker 多阶段处理
参考dockerfile

FROM rustlang/rust:nightly AS build
USER root
WORKDIR /app
COPY . /app
# 处理构建工具版本的核心部分
RUN rustup install nightly-2019-01-17
RUN rustup default nightly-2019-01-17-x86_64-unknown-linux-gnu
RUN cargo -V
RUN cargo build --release
FROM debian:stretch-slim
WORKDIR /usr/src/vigil
COPY ./res/assets/ ./res/assets/
COPY --from=build /app/target/release/vigil /usr/local/bin/vigil
COPY ./res/assets/ ./res/assets/
RUN apt-get update
RUN apt-get install -y libstrophe-dev libssl-dev
CMD [ "vigil", "-c", "/etc/vigil.cfg" ]
EXPOSE 8080
 

配置文件说明

现在我们可以配置4个可以发送的邮箱了,参考格式

[notify.email]
from = "status@crisp.chat"
to = "status@crisp.chat"
to2 = "status@crisp.chat"
to3 = "status@crisp.chat"
to4 = "status@crisp.chat"
to5 = "status@crisp.chat"
smtp_host = "localhost"
smtp_port = 587
smtp_username = "user-access"
smtp_password = "user-password"
smtp_encrypt = false

说明

修改的代码部分很简单,也很low,主要是关于构建工具的问题,版本依赖太严重,实际上碰到问题还是
多看看官方文档,深入了解下工具,这样可以加速我们解决问题,比如上边的关于构建工具版本的,主要
就是下载指定版本的

 
rustup install nightly-2019-01-17
rustup default nightly-2019-01-17-x86_64-unknown-linux-gnu

参考资料

https://github.com/rongfengliang/myvigil-multiemail
https://www.rust-lang.org/tools/install
https://forge.rust-lang.org/other-installation-methods.html

Vigil 发送多人邮件通知的处理的更多相关文章

  1. golang 发送多人邮件 textproto.Error{Code:554, Msg:"Transaction failed: Illegal semicolon, not in group"

    网上很多版本发送邮件都是用; 号,关键在于,多个邮件分割不能用; 号,需要用,号 // send mail func SendMail(subject string, message string, ...

  2. centos 7 keepalived故障邮件通知实战(附Python邮件发送脚本)

    centos 7 keepalived故障邮件通知实战(附Python邮件发送脚本) #####################     sendmail.py  begin     ######## ...

  3. ping通谷歌后发送QQ邮件通知

    前言   国庆期间,据说是为了防止有人在重大节日发表不正当言论,很多可以kxsw的ip都被封了,可是什么时候才会解封呢,不能没事就去ping一下吧,所以我写了个定时任务,定时ping谷歌服务器,如果p ...

  4. SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 邮件作为一种非常便利的预警实现方式,在及时性和易用性 ...

  5. Jenkins进阶系列之——01使用email-ext替换Jenkins的默认邮件通知

    1 简述 众所周知,Jenkins默认提供了一个邮件通知,能在构建失败.构建不稳定等状态后发送邮件.但是它本身有很多局限性,比如它的邮件通知无法提供详细的邮件内容.无法定义发送邮件的格式.无法定义灵活 ...

  6. Jenkins系列之四——设置邮件通知

    Jenkins持续集成,当我们自动打包部署完,我们可以发送一封邮件给相关的负责人.现介绍一下如何在Jenkins中配置实现邮件通知. 在Jenkins中配置实现邮件通知,Jenkins提供了两种方式的 ...

  7. 环境部署(八):jenkins配置邮件通知

    完成基于jenkins的持续集成部署后,任务构建执行完成,测试结果需要通知到相关人员.这篇博客,介绍如何在jenkins中配置邮件通知的方法... 一.安装邮件插件 由于Jenkins自带的邮件功能比 ...

  8. jmeter+Jenkins持续集成(邮件通知)

    jmeter构建后,自送发送邮件到指定的邮箱,配置如下 1)Jenkins Location配置 jenkins首页->系统管理->系统配置页面 其中Jenkins URL有默认值,最好修 ...

  9. Jenkins进阶-邮件通知(9)

    公司内部每天大概会发布N多版本,也不能派员工一直去盯着版本发布,所以希望发布完成后通知相关人员,Jenkins最早采用通知机制就是短信和邮件,由于短信成本很高,所以我们一般在发布结束后会采用邮件.现在 ...

随机推荐

  1. Python中NumPy的使用一

    NumPy简介: 一个用python实现的科学计算,包括:1.一个强大的N维数组对象Array:2.比较成熟的(广播)函数库:3.用于整合C/C++和Fortran代码的工具包:4.实用的线性代数.傅 ...

  2. Idea中类实现Serializable接口 引入 serialVersionUID

    idea实现Serializable接口,然后打出serialVersionUID的办法 setting>editor>Inspection>Java>Serializatio ...

  3. windows操作系统更改 <远程桌面> 端口号

    windows远程桌面连接默认使用的是3389端口,为了避免被他人扫描从而暴力破解远程服务器或者病毒入侵.可以将默认端口修改为其它端口,如8888,11111等.最好修改为10000以后的端口,这样可 ...

  4. SSO实现机制

    引言 单点登录有许多开发商提供解决方案,本文以yale大学SSO开源项目CAS为例,介绍单点登录实现机制. 术语解释 SSO-Single Sign On,单点登录 TGT-Ticket Granti ...

  5. NEST 自定义分析器

    public void SetAnalysis() { if (!client.IndexExists("employee").Exists) { client.CreateInd ...

  6. 2-python元组和列表

    目录 元组 列表 1.元组 - 元素有序排列 - 一个元组中的元素不需要具有相同的类型 - 元素不可增添.修改和删除 1.1.创建元组 # 创建元组 tup1 = (1,2,3,4) tup2 = t ...

  7. np.newaxis的使用及有趣的数组相乘

    a=np.array([1,2,3,4])a=a[np.newaxis,:] #固定行,相当于1行多列b=np.array([2,4,6]) b=b[:,np.newaxis] #固定列,相当与多行1 ...

  8. AngularJS重型前端框架

    一.AngularJs AngularJs是一种前端的重型框架,而现在正在被Aue.js所取代.而Aue的和AngularJs大同小异. AngularJs核心功能有MVC.模块化.自动化双向数据绑定 ...

  9. That IP address can't be assigned to.的问题

    That IP address can't be assigned to. 烦恼了很久,现在知道了,解决的办法如下 首先确定端口号是不是开放,阿里云的直接在控制台修改 其次 看看 你的地址是不是输入错 ...

  10. JSP内置对象(下)

    session的生命周期 创建 活动 销毁 application对象 Page对象