瀏覽代碼

New feature: SMTP connection may use client certificate.

New config keys in [mailer] section:
 - CERT_FILE: path to a certificate file.
 - KEY_FILE: path to a key file.
Dmitry Azhichakov 10 年之前
父節點
當前提交
8a6c86644e
共有 2 個文件被更改,包括 14 次插入5 次删除
  1. 6 0
      modules/mailer/mailer.go
  2. 8 5
      modules/setting/setting.go

+ 6 - 0
modules/mailer/mailer.go

@@ -72,9 +72,15 @@ func sendMail(settings *setting.Mailer, recipients []string, msgContent []byte)
 		return err
 	}
 
+	cert, err := tls.LoadX509KeyPair(settings.CertFile, settings.KeyFile)
+	if err != nil {
+		return err
+	}
+
 	tlsconfig := &tls.Config{
 		InsecureSkipVerify: settings.SkipVerify,
 		ServerName:         host,
+		Certificates:       []tls.Certificate{cert},
 	}
 
 	conn, err := net.Dial("tcp", net.JoinHostPort(host, port))

+ 8 - 5
modules/setting/setting.go

@@ -446,11 +446,12 @@ func newSessionService() {
 
 // Mailer represents mail service.
 type Mailer struct {
-	Name         string
-	Host         string
-	From         string
-	User, Passwd string
-	SkipVerify   bool
+	Name              string
+	Host              string
+	From              string
+	User, Passwd      string
+	SkipVerify        bool
+	CertFile, KeyFile string
 }
 
 type OauthInfo struct {
@@ -483,6 +484,8 @@ func newMailService() {
 		User:       sec.Key("USER").String(),
 		Passwd:     sec.Key("PASSWD").String(),
 		SkipVerify: sec.Key("SKIP_VERIFY").MustBool(),
+		CertFile:   sec.Key("CERT_FILE").String(),
+		KeyFile:    sec.Key("KEY_FILE").String(),
 	}
 	MailService.From = sec.Key("FROM").MustString(MailService.User)
 	log.Info("Mail Service Enabled")