Make log mailer for testing (#5893)
* Create log mailer for testing email settings Signed-off-by: Andrew Thornton <art27@cantab.net> * Switch on the log mailer for the integration tests This ensures that the sending mail process works Signed-off-by: Andrew Thornton <art27@cantab.net> * rename the from user for mysql/mssql * rename log sender to dummy sender * update the integration tests
This commit is contained in:
parent
67567eff0e
commit
3d91bb2f2d
8 changed files with 60 additions and 12 deletions
|
@ -414,8 +414,8 @@ USER =
|
||||||
PASSWD =
|
PASSWD =
|
||||||
; Send mails as plain text
|
; Send mails as plain text
|
||||||
SEND_AS_PLAIN_TEXT = false
|
SEND_AS_PLAIN_TEXT = false
|
||||||
; Enable sendmail (override SMTP)
|
; Set Mailer Type (either SMTP, sendmail or dummy to just send to the log)
|
||||||
USE_SENDMAIL = false
|
MAILER_TYPE = smtp
|
||||||
; Specify an alternative sendmail binary
|
; Specify an alternative sendmail binary
|
||||||
SENDMAIL_PATH = sendmail
|
SENDMAIL_PATH = sendmail
|
||||||
; Specify any extra sendmail arguments
|
; Specify any extra sendmail arguments
|
||||||
|
|
|
@ -228,10 +228,14 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`.
|
||||||
- `PASSWD`: **\<empty\>**: Password of mailing user. Use \`your password\` for quoting if you use special characters in the password.
|
- `PASSWD`: **\<empty\>**: Password of mailing user. Use \`your password\` for quoting if you use special characters in the password.
|
||||||
- `SKIP_VERIFY`: **\<empty\>**: Do not verify the self-signed certificates.
|
- `SKIP_VERIFY`: **\<empty\>**: Do not verify the self-signed certificates.
|
||||||
- **Note:** Gitea only supports SMTP with STARTTLS.
|
- **Note:** Gitea only supports SMTP with STARTTLS.
|
||||||
- `USE_SENDMAIL`: **false** Use the operating system's `sendmail` command instead of SMTP.
|
- `MAILER_TYPE`: **smtp**: \[smtp, sendmail, dummy\]
|
||||||
|
- **smtp** Use SMTP to send mail
|
||||||
|
- **sendmail** Use the operating system's `sendmail` command instead of SMTP.
|
||||||
This is common on linux systems.
|
This is common on linux systems.
|
||||||
|
- **dummy** Send email messages to the log as a testing phase.
|
||||||
- Note that enabling sendmail will ignore all other `mailer` settings except `ENABLED`,
|
- Note that enabling sendmail will ignore all other `mailer` settings except `ENABLED`,
|
||||||
`FROM` and `SENDMAIL_PATH`.
|
`FROM` and `SENDMAIL_PATH`.
|
||||||
|
- Enabling dummy will ignore all settings except `ENABLED` and `FROM`.
|
||||||
- `SENDMAIL_PATH`: **sendmail**: The location of sendmail on the operating system (can be
|
- `SENDMAIL_PATH`: **sendmail**: The location of sendmail on the operating system (can be
|
||||||
command or full path).
|
command or full path).
|
||||||
- ``IS_TLS_ENABLED`` : **false** : Decide if SMTP connections should use TLS.
|
- ``IS_TLS_ENABLED`` : **false** : Decide if SMTP connections should use TLS.
|
||||||
|
|
|
@ -36,7 +36,9 @@ LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
|
||||||
APP_DATA_PATH = integrations/gitea-integration-mssql/data
|
APP_DATA_PATH = integrations/gitea-integration-mssql/data
|
||||||
|
|
||||||
[mailer]
|
[mailer]
|
||||||
ENABLED = false
|
ENABLED = true
|
||||||
|
MAILER_TYPE = dummy
|
||||||
|
FROM = mssql-integration-test@gitea.io
|
||||||
|
|
||||||
[service]
|
[service]
|
||||||
REGISTER_EMAIL_CONFIRM = false
|
REGISTER_EMAIL_CONFIRM = false
|
||||||
|
@ -47,6 +49,7 @@ REQUIRE_SIGNIN_VIEW = false
|
||||||
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
||||||
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
||||||
NO_REPLY_ADDRESS = noreply.example.org
|
NO_REPLY_ADDRESS = noreply.example.org
|
||||||
|
ENABLE_NOTIFY_MAIL = true
|
||||||
|
|
||||||
[picture]
|
[picture]
|
||||||
DISABLE_GRAVATAR = false
|
DISABLE_GRAVATAR = false
|
||||||
|
|
|
@ -36,7 +36,9 @@ LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
|
||||||
APP_DATA_PATH = integrations/gitea-integration-mysql/data
|
APP_DATA_PATH = integrations/gitea-integration-mysql/data
|
||||||
|
|
||||||
[mailer]
|
[mailer]
|
||||||
ENABLED = false
|
ENABLED = true
|
||||||
|
MAILER_TYPE = dummy
|
||||||
|
FROM = mysql-integration-test@gitea.io
|
||||||
|
|
||||||
[service]
|
[service]
|
||||||
REGISTER_EMAIL_CONFIRM = false
|
REGISTER_EMAIL_CONFIRM = false
|
||||||
|
@ -47,6 +49,7 @@ REQUIRE_SIGNIN_VIEW = false
|
||||||
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
||||||
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
||||||
NO_REPLY_ADDRESS = noreply.example.org
|
NO_REPLY_ADDRESS = noreply.example.org
|
||||||
|
ENABLE_NOTIFY_MAIL = true
|
||||||
|
|
||||||
[picture]
|
[picture]
|
||||||
DISABLE_GRAVATAR = false
|
DISABLE_GRAVATAR = false
|
||||||
|
|
|
@ -36,7 +36,9 @@ LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
|
||||||
APP_DATA_PATH = integrations/gitea-integration-pgsql/data
|
APP_DATA_PATH = integrations/gitea-integration-pgsql/data
|
||||||
|
|
||||||
[mailer]
|
[mailer]
|
||||||
ENABLED = false
|
ENABLED = true
|
||||||
|
MAILER_TYPE = dummy
|
||||||
|
FROM = pgsql-integration-test@gitea.io
|
||||||
|
|
||||||
[service]
|
[service]
|
||||||
REGISTER_EMAIL_CONFIRM = false
|
REGISTER_EMAIL_CONFIRM = false
|
||||||
|
@ -47,6 +49,7 @@ REQUIRE_SIGNIN_VIEW = false
|
||||||
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
||||||
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
||||||
NO_REPLY_ADDRESS = noreply.example.org
|
NO_REPLY_ADDRESS = noreply.example.org
|
||||||
|
ENABLE_NOTIFY_MAIL = true
|
||||||
|
|
||||||
[picture]
|
[picture]
|
||||||
DISABLE_GRAVATAR = false
|
DISABLE_GRAVATAR = false
|
||||||
|
|
|
@ -44,6 +44,7 @@ REQUIRE_SIGNIN_VIEW = false
|
||||||
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
||||||
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
||||||
NO_REPLY_ADDRESS = noreply.example.org
|
NO_REPLY_ADDRESS = noreply.example.org
|
||||||
|
ENABLE_NOTIFY_MAIL = true
|
||||||
|
|
||||||
[picture]
|
[picture]
|
||||||
DISABLE_GRAVATAR = false
|
DISABLE_GRAVATAR = false
|
||||||
|
@ -66,3 +67,8 @@ LEVEL = Debug
|
||||||
INSTALL_LOCK = true
|
INSTALL_LOCK = true
|
||||||
SECRET_KEY = 9pCviYTWSb
|
SECRET_KEY = 9pCviYTWSb
|
||||||
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTI3OTU5ODN9.OQkH5UmzID2XBdwQ9TAI6Jj2t1X-wElVTjbE7aoN4I8
|
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTI3OTU5ODN9.OQkH5UmzID2XBdwQ9TAI6Jj2t1X-wElVTjbE7aoN4I8
|
||||||
|
|
||||||
|
[mailer]
|
||||||
|
ENABLED = true
|
||||||
|
MAILER_TYPE = dummy
|
||||||
|
FROM = sqlite-integration-test@gitea.io
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
package mailer
|
package mailer
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
@ -237,6 +238,20 @@ func (s *sendmailSender) Send(from string, to []string, msg io.WriterTo) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sender sendmail mail sender
|
||||||
|
type dummySender struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send send email
|
||||||
|
func (s *dummySender) Send(from string, to []string, msg io.WriterTo) error {
|
||||||
|
buf := bytes.Buffer{}
|
||||||
|
if _, err := msg.WriteTo(&buf); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Info("Mail From: %s To: %v Body: %s", from, to, buf.String())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func processMailQueue() {
|
func processMailQueue() {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
@ -265,10 +280,13 @@ func NewContext() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if setting.MailService.UseSendmail {
|
switch setting.MailService.MailerType {
|
||||||
Sender = &sendmailSender{}
|
case "smtp":
|
||||||
} else {
|
|
||||||
Sender = &smtpSender{}
|
Sender = &smtpSender{}
|
||||||
|
case "sendmail":
|
||||||
|
Sender = &sendmailSender{}
|
||||||
|
case "dummy":
|
||||||
|
Sender = &dummySender{}
|
||||||
}
|
}
|
||||||
|
|
||||||
mailQueue = make(chan *Message, setting.MailService.QueueLength)
|
mailQueue = make(chan *Message, setting.MailService.QueueLength)
|
||||||
|
|
|
@ -1529,6 +1529,7 @@ type Mailer struct {
|
||||||
FromName string
|
FromName string
|
||||||
FromEmail string
|
FromEmail string
|
||||||
SendAsPlainText bool
|
SendAsPlainText bool
|
||||||
|
MailerType string
|
||||||
|
|
||||||
// SMTP sender
|
// SMTP sender
|
||||||
Host string
|
Host string
|
||||||
|
@ -1541,7 +1542,6 @@ type Mailer struct {
|
||||||
IsTLSEnabled bool
|
IsTLSEnabled bool
|
||||||
|
|
||||||
// Sendmail sender
|
// Sendmail sender
|
||||||
UseSendmail bool
|
|
||||||
SendmailPath string
|
SendmailPath string
|
||||||
SendmailArgs []string
|
SendmailArgs []string
|
||||||
}
|
}
|
||||||
|
@ -1562,6 +1562,7 @@ func newMailService() {
|
||||||
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),
|
||||||
SendAsPlainText: sec.Key("SEND_AS_PLAIN_TEXT").MustBool(false),
|
SendAsPlainText: sec.Key("SEND_AS_PLAIN_TEXT").MustBool(false),
|
||||||
|
MailerType: sec.Key("MAILER_TYPE").In("", []string{"smtp", "sendmail", "dummy"}),
|
||||||
|
|
||||||
Host: sec.Key("HOST").String(),
|
Host: sec.Key("HOST").String(),
|
||||||
User: sec.Key("USER").String(),
|
User: sec.Key("USER").String(),
|
||||||
|
@ -1574,7 +1575,6 @@ func newMailService() {
|
||||||
KeyFile: sec.Key("KEY_FILE").String(),
|
KeyFile: sec.Key("KEY_FILE").String(),
|
||||||
IsTLSEnabled: sec.Key("IS_TLS_ENABLED").MustBool(),
|
IsTLSEnabled: sec.Key("IS_TLS_ENABLED").MustBool(),
|
||||||
|
|
||||||
UseSendmail: sec.Key("USE_SENDMAIL").MustBool(),
|
|
||||||
SendmailPath: sec.Key("SENDMAIL_PATH").MustString("sendmail"),
|
SendmailPath: sec.Key("SENDMAIL_PATH").MustString("sendmail"),
|
||||||
}
|
}
|
||||||
MailService.From = sec.Key("FROM").MustString(MailService.User)
|
MailService.From = sec.Key("FROM").MustString(MailService.User)
|
||||||
|
@ -1584,6 +1584,13 @@ func newMailService() {
|
||||||
MailService.SendAsPlainText = !sec.Key("ENABLE_HTML_ALTERNATIVE").MustBool(false)
|
MailService.SendAsPlainText = !sec.Key("ENABLE_HTML_ALTERNATIVE").MustBool(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if sec.HasKey("USE_SENDMAIL") {
|
||||||
|
log.Warn("USE_SENDMAIL is deprecated, use MAILER_TYPE=sendmail")
|
||||||
|
if MailService.MailerType == "" && sec.Key("USE_SENDMAIL").MustBool(false) {
|
||||||
|
MailService.MailerType = "sendmail"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
parsed, err := mail.ParseAddress(MailService.From)
|
parsed, err := mail.ParseAddress(MailService.From)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(4, "Invalid mailer.FROM (%s): %v", MailService.From, err)
|
log.Fatal(4, "Invalid mailer.FROM (%s): %v", MailService.From, err)
|
||||||
|
@ -1591,7 +1598,11 @@ func newMailService() {
|
||||||
MailService.FromName = parsed.Name
|
MailService.FromName = parsed.Name
|
||||||
MailService.FromEmail = parsed.Address
|
MailService.FromEmail = parsed.Address
|
||||||
|
|
||||||
if MailService.UseSendmail {
|
if MailService.MailerType == "" {
|
||||||
|
MailService.MailerType = "smtp"
|
||||||
|
}
|
||||||
|
|
||||||
|
if MailService.MailerType == "sendmail" {
|
||||||
MailService.SendmailArgs, err = shellquote.Split(sec.Key("SENDMAIL_ARGS").String())
|
MailService.SendmailArgs, err = shellquote.Split(sec.Key("SENDMAIL_ARGS").String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(4, "Failed to parse Sendmail args: %v", CustomConf, err)
|
log.Error(4, "Failed to parse Sendmail args: %v", CustomConf, err)
|
||||||
|
|
Reference in a new issue