* 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 teststags/v1.9.0-dev
@@ -414,8 +414,8 @@ USER = | |||
PASSWD = | |||
; Send mails as plain text | |||
SEND_AS_PLAIN_TEXT = false | |||
; Enable sendmail (override SMTP) | |||
USE_SENDMAIL = false | |||
; Set Mailer Type (either SMTP, sendmail or dummy to just send to the log) | |||
MAILER_TYPE = smtp | |||
; Specify an alternative sendmail binary | |||
SENDMAIL_PATH = sendmail | |||
; 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. | |||
- `SKIP_VERIFY`: **\<empty\>**: Do not verify the self-signed certificates. | |||
- **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. | |||
- **dummy** Send email messages to the log as a testing phase. | |||
- Note that enabling sendmail will ignore all other `mailer` settings except `ENABLED`, | |||
`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 | |||
command or full path). | |||
- ``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 | |||
[mailer] | |||
ENABLED = false | |||
ENABLED = true | |||
MAILER_TYPE = dummy | |||
FROM = mssql-integration-test@gitea.io | |||
[service] | |||
REGISTER_EMAIL_CONFIRM = false | |||
@@ -47,6 +49,7 @@ REQUIRE_SIGNIN_VIEW = false | |||
DEFAULT_KEEP_EMAIL_PRIVATE = false | |||
DEFAULT_ALLOW_CREATE_ORGANIZATION = true | |||
NO_REPLY_ADDRESS = noreply.example.org | |||
ENABLE_NOTIFY_MAIL = true | |||
[picture] | |||
DISABLE_GRAVATAR = false |
@@ -36,7 +36,9 @@ LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w | |||
APP_DATA_PATH = integrations/gitea-integration-mysql/data | |||
[mailer] | |||
ENABLED = false | |||
ENABLED = true | |||
MAILER_TYPE = dummy | |||
FROM = mysql-integration-test@gitea.io | |||
[service] | |||
REGISTER_EMAIL_CONFIRM = false | |||
@@ -47,6 +49,7 @@ REQUIRE_SIGNIN_VIEW = false | |||
DEFAULT_KEEP_EMAIL_PRIVATE = false | |||
DEFAULT_ALLOW_CREATE_ORGANIZATION = true | |||
NO_REPLY_ADDRESS = noreply.example.org | |||
ENABLE_NOTIFY_MAIL = true | |||
[picture] | |||
DISABLE_GRAVATAR = false |
@@ -36,7 +36,9 @@ LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w | |||
APP_DATA_PATH = integrations/gitea-integration-pgsql/data | |||
[mailer] | |||
ENABLED = false | |||
ENABLED = true | |||
MAILER_TYPE = dummy | |||
FROM = pgsql-integration-test@gitea.io | |||
[service] | |||
REGISTER_EMAIL_CONFIRM = false | |||
@@ -47,6 +49,7 @@ REQUIRE_SIGNIN_VIEW = false | |||
DEFAULT_KEEP_EMAIL_PRIVATE = false | |||
DEFAULT_ALLOW_CREATE_ORGANIZATION = true | |||
NO_REPLY_ADDRESS = noreply.example.org | |||
ENABLE_NOTIFY_MAIL = true | |||
[picture] | |||
DISABLE_GRAVATAR = false |
@@ -44,6 +44,7 @@ REQUIRE_SIGNIN_VIEW = false | |||
DEFAULT_KEEP_EMAIL_PRIVATE = false | |||
DEFAULT_ALLOW_CREATE_ORGANIZATION = true | |||
NO_REPLY_ADDRESS = noreply.example.org | |||
ENABLE_NOTIFY_MAIL = true | |||
[picture] | |||
DISABLE_GRAVATAR = false | |||
@@ -66,3 +67,8 @@ LEVEL = Debug | |||
INSTALL_LOCK = true | |||
SECRET_KEY = 9pCviYTWSb | |||
INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTI3OTU5ODN9.OQkH5UmzID2XBdwQ9TAI6Jj2t1X-wElVTjbE7aoN4I8 | |||
[mailer] | |||
ENABLED = true | |||
MAILER_TYPE = dummy | |||
FROM = sqlite-integration-test@gitea.io |
@@ -6,6 +6,7 @@ | |||
package mailer | |||
import ( | |||
"bytes" | |||
"crypto/tls" | |||
"fmt" | |||
"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() { | |||
for { | |||
select { | |||
@@ -265,10 +280,13 @@ func NewContext() { | |||
return | |||
} | |||
if setting.MailService.UseSendmail { | |||
Sender = &sendmailSender{} | |||
} else { | |||
switch setting.MailService.MailerType { | |||
case "smtp": | |||
Sender = &smtpSender{} | |||
case "sendmail": | |||
Sender = &sendmailSender{} | |||
case "dummy": | |||
Sender = &dummySender{} | |||
} | |||
mailQueue = make(chan *Message, setting.MailService.QueueLength) |
@@ -1529,6 +1529,7 @@ type Mailer struct { | |||
FromName string | |||
FromEmail string | |||
SendAsPlainText bool | |||
MailerType string | |||
// SMTP sender | |||
Host string | |||
@@ -1541,7 +1542,6 @@ type Mailer struct { | |||
IsTLSEnabled bool | |||
// Sendmail sender | |||
UseSendmail bool | |||
SendmailPath string | |||
SendmailArgs []string | |||
} | |||
@@ -1562,6 +1562,7 @@ func newMailService() { | |||
QueueLength: sec.Key("SEND_BUFFER_LEN").MustInt(100), | |||
Name: sec.Key("NAME").MustString(AppName), | |||
SendAsPlainText: sec.Key("SEND_AS_PLAIN_TEXT").MustBool(false), | |||
MailerType: sec.Key("MAILER_TYPE").In("", []string{"smtp", "sendmail", "dummy"}), | |||
Host: sec.Key("HOST").String(), | |||
User: sec.Key("USER").String(), | |||
@@ -1574,7 +1575,6 @@ func newMailService() { | |||
KeyFile: sec.Key("KEY_FILE").String(), | |||
IsTLSEnabled: sec.Key("IS_TLS_ENABLED").MustBool(), | |||
UseSendmail: sec.Key("USE_SENDMAIL").MustBool(), | |||
SendmailPath: sec.Key("SENDMAIL_PATH").MustString("sendmail"), | |||
} | |||
MailService.From = sec.Key("FROM").MustString(MailService.User) | |||
@@ -1584,6 +1584,13 @@ func newMailService() { | |||
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) | |||
if err != nil { | |||
log.Fatal(4, "Invalid mailer.FROM (%s): %v", MailService.From, err) | |||
@@ -1591,7 +1598,11 @@ func newMailService() { | |||
MailService.FromName = parsed.Name | |||
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()) | |||
if err != nil { | |||
log.Error(4, "Failed to parse Sendmail args: %v", CustomConf, err) |