Browse Source

#2954 use text/plain as default email content format

pull/3137/head
Unknwon 9 years ago
parent
commit
8df3ba96f3
  1. 2
      README.md
  2. 2
      conf/app.ini
  3. 2
      gogs.go
  4. 440
      modules/bindata/bindata.go
  5. 18
      modules/mailer/mailer.go
  6. 44
      modules/setting/setting.go
  7. 2
      templates/.VERSION

2
README.md

@ -3,7 +3,7 @@ Gogs - Go Git Service [![Build Status](https://travis-ci.org/gogits/gogs.svg?bra
![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true) ![](https://github.com/gogits/gogs/blob/master/public/img/gogs-large-resize.png?raw=true)
##### Current version: 0.9.28 ##### Current version: 0.9.29
| Web | UI | Preview | | Web | UI | Preview |
|:-------------:|:-------:|:-------:| |:-------------:|:-------:|:-------:|

2
conf/app.ini

@ -185,6 +185,8 @@ FROM =
; Mailer user name and password ; Mailer user name and password
USER = USER =
PASSWD = PASSWD =
; Use text/html as alternative format of content
ENABLE_HTML_ALTERNATIVE = false
[cache] [cache]
; Either "memory", "redis", or "memcache", default is "memory" ; Either "memory", "redis", or "memcache", default is "memory"

2
gogs.go

@ -17,7 +17,7 @@ import (
"github.com/gogits/gogs/modules/setting" "github.com/gogits/gogs/modules/setting"
) )
const APP_VER = "0.9.28.0527" const APP_VER = "0.9.29.0530"
func init() { func init() {
runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GOMAXPROCS(runtime.NumCPU())

440
modules/bindata/bindata.go

File diff suppressed because one or more lines are too long

18
modules/mailer/mailer.go

@ -14,11 +14,11 @@ import (
"strings" "strings"
"time" "time"
"github.com/jaytaylor/html2text"
"gopkg.in/gomail.v2" "gopkg.in/gomail.v2"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/setting" "github.com/gogits/gogs/modules/setting"
"github.com/jaytaylor/html2text"
) )
type Message struct { type Message struct {
@ -27,20 +27,24 @@ type Message struct {
} }
// NewMessageFrom creates new mail message object with custom From header. // NewMessageFrom creates new mail message object with custom From header.
func NewMessageFrom(to []string, from, subject, htmlbody string) *Message { func NewMessageFrom(to []string, from, subject, htmlBody string) *Message {
msg := gomail.NewMessage() msg := gomail.NewMessage()
msg.SetHeader("From", from) msg.SetHeader("From", from)
msg.SetHeader("To", to...) msg.SetHeader("To", to...)
msg.SetHeader("Subject", subject) msg.SetHeader("Subject", subject)
msg.SetDateHeader("Date", time.Now()) msg.SetDateHeader("Date", time.Now())
body, err := html2text.FromString(htmlbody)
body, err := html2text.FromString(htmlBody)
if err != nil { if err != nil {
// TODO: report error ? log.Error(4, "html2text.FromString: %v", err)
msg.SetBody("text/html", htmlbody) msg.SetBody("text/html", htmlBody)
msg.AddAlternative("text/html", htmlBody)
} else { } else {
msg.SetBody("text/plain", body) msg.SetBody("text/plain", body)
// TODO: avoid this (use a configuration switch?) }
msg.AddAlternative("text/html", htmlbody)
if setting.MailService.EnableHTMLAlternative {
msg.AddAlternative("text/html", htmlBody)
} }
return &Message{ return &Message{

44
modules/setting/setting.go

@ -612,16 +612,17 @@ func newSessionService() {
// Mailer represents mail service. // Mailer represents mail service.
type Mailer struct { type Mailer struct {
QueueLength int QueueLength int
Name string Name string
Host string Host string
From string From string
User, Passwd string User, Passwd string
DisableHelo bool DisableHelo bool
HeloHostname string HeloHostname string
SkipVerify bool SkipVerify bool
UseCertificate bool UseCertificate bool
CertFile, KeyFile string CertFile, KeyFile string
EnableHTMLAlternative bool
} }
var ( var (
@ -636,17 +637,18 @@ func newMailService() {
} }
MailService = &Mailer{ MailService = &Mailer{
QueueLength: sec.Key("SEND_BUFFER_LEN").MustInt(100), QueueLength: sec.Key("SEND_BUFFER_LEN").MustInt(100),
Name: sec.Key("NAME").MustString(AppName), Name: sec.Key("NAME").MustString(AppName),
Host: sec.Key("HOST").String(), Host: sec.Key("HOST").String(),
User: sec.Key("USER").String(), User: sec.Key("USER").String(),
Passwd: sec.Key("PASSWD").String(), Passwd: sec.Key("PASSWD").String(),
DisableHelo: sec.Key("DISABLE_HELO").MustBool(), DisableHelo: sec.Key("DISABLE_HELO").MustBool(),
HeloHostname: sec.Key("HELO_HOSTNAME").String(), HeloHostname: sec.Key("HELO_HOSTNAME").String(),
SkipVerify: sec.Key("SKIP_VERIFY").MustBool(), SkipVerify: sec.Key("SKIP_VERIFY").MustBool(),
UseCertificate: sec.Key("USE_CERTIFICATE").MustBool(), UseCertificate: sec.Key("USE_CERTIFICATE").MustBool(),
CertFile: sec.Key("CERT_FILE").String(), CertFile: sec.Key("CERT_FILE").String(),
KeyFile: sec.Key("KEY_FILE").String(), KeyFile: sec.Key("KEY_FILE").String(),
EnableHTMLAlternative: sec.Key("ENABLE_HTML_ALTERNATIVE").MustBool(),
} }
MailService.From = sec.Key("FROM").MustString(MailService.User) MailService.From = sec.Key("FROM").MustString(MailService.User)
log.Info("Mail Service Enabled") log.Info("Mail Service Enabled")

2
templates/.VERSION

@ -1 +1 @@
0.9.28.0527 0.9.29.0530
Loading…
Cancel
Save