* 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.21.12.1
| @@ -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) | |||||
| 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 | ; 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 { | |||||
| Sender = &sendmailSender{} | |||||
| } else { | |||||
| switch setting.MailService.MailerType { | |||||
| case "smtp": | |||||
| 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) | ||||