aboutsummaryrefslogtreecommitdiff
path: root/modules/log/smtp.go
diff options
context:
space:
mode:
Diffstat (limited to 'modules/log/smtp.go')
-rw-r--r--modules/log/smtp.go87
1 files changed, 87 insertions, 0 deletions
diff --git a/modules/log/smtp.go b/modules/log/smtp.go
new file mode 100644
index 00000000..0a10e56a
--- /dev/null
+++ b/modules/log/smtp.go
@@ -0,0 +1,87 @@
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package log
+
+import (
+ "encoding/json"
+ "fmt"
+ "net/smtp"
+ "strings"
+ "time"
+)
+
+const (
+ subjectPhrase = "Diagnostic message from server"
+)
+
+// smtpWriter implements LoggerInterface and is used to send emails via given SMTP-server.
+type SmtpWriter struct {
+ Username string `json:"Username"`
+ Password string `json:"password"`
+ Host string `json:"Host"`
+ Subject string `json:"subject"`
+ RecipientAddresses []string `json:"sendTos"`
+ Level int `json:"level"`
+}
+
+// create smtp writer.
+func NewSmtpWriter() LoggerInterface {
+ return &SmtpWriter{Level: TRACE}
+}
+
+// init smtp writer with json config.
+// config like:
+// {
+// "Username":"example@gmail.com",
+// "password:"password",
+// "host":"smtp.gmail.com:465",
+// "subject":"email title",
+// "sendTos":["email1","email2"],
+// "level":LevelError
+// }
+func (sw *SmtpWriter) Init(jsonconfig string) error {
+ return json.Unmarshal([]byte(jsonconfig), sw)
+}
+
+// write message in smtp writer.
+// it will send an email with subject and only this message.
+func (s *SmtpWriter) WriteMsg(msg string, skip, level int) error {
+ if level < s.Level {
+ return nil
+ }
+
+ hp := strings.Split(s.Host, ":")
+
+ // Set up authentication information.
+ auth := smtp.PlainAuth(
+ "",
+ s.Username,
+ s.Password,
+ hp[0],
+ )
+ // Connect to the server, authenticate, set the sender and recipient,
+ // and send the email all in one step.
+ content_type := "Content-Type: text/plain" + "; charset=UTF-8"
+ mailmsg := []byte("To: " + strings.Join(s.RecipientAddresses, ";") + "\r\nFrom: " + s.Username + "<" + s.Username +
+ ">\r\nSubject: " + s.Subject + "\r\n" + content_type + "\r\n\r\n" + fmt.Sprintf(".%s", time.Now().Format("2006-01-02 15:04:05")) + msg)
+
+ return smtp.SendMail(
+ s.Host,
+ auth,
+ s.Username,
+ s.RecipientAddresses,
+ mailmsg,
+ )
+}
+
+func (_ *SmtpWriter) Flush() {
+}
+
+func (_ *SmtpWriter) Destroy() {
+}
+
+func init() {
+ Register("smtp", NewSmtpWriter)
+}