| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | // 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 logimport (	"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)}
 |