130 lines
4.5 KiB
Go
130 lines
4.5 KiB
Go
package fm
|
||
|
||
import (
|
||
"crypto/tls"
|
||
"fmt"
|
||
"strings"
|
||
|
||
"be.ems/lib/config"
|
||
neService "be.ems/src/modules/network_element/service"
|
||
systemService "be.ems/src/modules/system/service"
|
||
|
||
"gopkg.in/gomail.v2"
|
||
)
|
||
|
||
func AlarmEmailForward(alarmData *Alarm) error {
|
||
neInfo := neService.NewNeInfo.FindByRmuid(alarmData.NeId)
|
||
|
||
alarmStatus := "Clear"
|
||
if alarmData.AlarmStatus == 1 {
|
||
alarmStatus = "Active"
|
||
}
|
||
severity := origSeverityValue(alarmData.OrigSeverity)
|
||
dictAlarmSeverity := systemService.NewSysDictData.FindByType("active_alarm_severity")
|
||
for _, v := range dictAlarmSeverity {
|
||
if v.DataValue == severity {
|
||
severity = v.DataLabel
|
||
}
|
||
}
|
||
subjectTitle := config.GetYamlConfig().Alarm.EmailForward.Title
|
||
if subjectTitle == "" {
|
||
subjectTitle = fmt.Sprintf("%s-%s-%s", alarmData.OrigSeverity, alarmData.NeName, alarmData.AlarmTitle)
|
||
}
|
||
message := fmt.Sprintf(`
|
||
<p>Alarm information</p>
|
||
<p style="text-indent:2.5em">Sequence: %d</p>
|
||
<p style="text-indent:3em">NE Name: %s</p>
|
||
<p style="text-indent:3em">NE IP: %s</p>
|
||
<p style="text-indent:4em">Title: %s</p>
|
||
<p style="text-indent:2.5em">Severity: %s</p>
|
||
<p style="text-indent:1.5em">Event Time: %s</p>
|
||
<p style="text-indent:0.5em">Alarm Status: %s</p>
|
||
<p>Automatic sent by OMC, please do not reply!</p>
|
||
`,
|
||
alarmData.AlarmSeq,
|
||
alarmData.NeName,
|
||
neInfo.IP,
|
||
alarmData.AlarmTitle,
|
||
severity,
|
||
alarmData.EventTime,
|
||
alarmStatus,
|
||
)
|
||
|
||
// message := fmt.Sprintf(`
|
||
// Alarm information
|
||
|
||
// Sequence: %d
|
||
// NE name: %s
|
||
// Title: %s
|
||
// Severity: %s
|
||
// Event Time: %s
|
||
|
||
// Automatic send by OMC, don't reply!
|
||
// `, alarmData.AlarmSeq, alarmData.NeName, alarmData.AlarmTitle, alarmData.OrigSeverity, alarmData.EventTime)
|
||
|
||
// QQ 邮箱:
|
||
// SMTP 服务器地址:smtp.qq.com(SSL协议端口:465/994 | 非SSL协议端口:25)
|
||
// 163 邮箱:
|
||
// SMTP 服务器地址:smtp.163.com(端口:25)
|
||
// host := "mail.agrandtech.com"
|
||
// port := 25
|
||
// userName := "smtpext@agrandtech.com"
|
||
// password := "1000smtp@omc!"
|
||
|
||
host := config.GetYamlConfig().Alarm.EmailForward.SMTP
|
||
port := int(config.GetYamlConfig().Alarm.EmailForward.Port)
|
||
userName := config.GetYamlConfig().Alarm.EmailForward.User
|
||
password := config.GetYamlConfig().Alarm.EmailForward.Password
|
||
|
||
m := gomail.NewMessage()
|
||
m.SetHeader("From", userName) // 发件人
|
||
//m.SetHeader("From", "alias"+"<"+"aliastest"+">") // 增加发件人别名
|
||
|
||
// emails, err := dborm.XormGetAlarmForward("Email")
|
||
// if err != nil {
|
||
// log.Error("Failed to XormGetAlarmForward:", err)
|
||
// return err
|
||
// } else if emails == nil || len(*emails) == 0 {
|
||
// err := errors.New("not found forward email list")
|
||
// log.Error(err)
|
||
// return err
|
||
// }
|
||
emails := strings.Split(config.GetYamlConfig().Alarm.EmailForward.EmailList, ",")
|
||
if len(emails) == 0 {
|
||
return fmt.Errorf("not found forward email list")
|
||
}
|
||
m.SetHeader("To", emails...) // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
|
||
//m.SetHeader("To", strings.Join(*emails, " ")) // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
|
||
//m.SetHeader("To", "zhangshuzhong@agrandtech.com", "simonzhangsz@outlook.com") // 收件人,可以多个收件人,但必须使用相同的 SMTP 连接
|
||
//m.SetHeader("Cc", "******@qq.com") // 抄送,可以多个
|
||
//m.SetHeader("Bcc", "******@qq.com") // 暗送,可以多个
|
||
m.SetHeader("Subject", subjectTitle) // 邮件主题
|
||
|
||
// text/html 的意思是将文件的 content-type 设置为 text/html 的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。
|
||
// 可以通过 text/html 处理文本格式进行特殊处理,如换行、缩进、加粗等等
|
||
//m.SetBody("text/html", fmt.Sprintf(message, *alarm))
|
||
m.SetBody("text/html", message)
|
||
|
||
// text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理
|
||
//m.SetBody("text/plain", message)
|
||
// m.Attach("test.sh") // 附件文件,可以是文件,照片,视频等等
|
||
// m.Attach("lolcatVideo.mp4") // 视频
|
||
// m.Attach("lolcat.jpg") // 照片
|
||
|
||
d := gomail.NewDialer(
|
||
host,
|
||
port,
|
||
userName,
|
||
password,
|
||
)
|
||
// 关闭SSL协议认证
|
||
d.TLSConfig = &tls.Config{InsecureSkipVerify: true}
|
||
if !config.GetYamlConfig().Alarm.EmailForward.TLSSkipVerify {
|
||
// 打开SSL协议认证
|
||
d.TLSConfig = &tls.Config{InsecureSkipVerify: false}
|
||
}
|
||
|
||
err := d.DialAndSend(m)
|
||
return writeLog(alarmData, config.GetYamlConfig().Alarm.EmailForward.EmailList, "EMAIL", err)
|
||
}
|