-
-
Notifications
You must be signed in to change notification settings - Fork 351
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
smtp + email confirmation #285
Merged
Merged
Changes from all commits
Commits
Show all changes
45 commits
Select commit
Hold shift + click to select a range
2cb8a3b
add smtp configuration
tsmethurst f53bbfd
add email confirm + reset templates
tsmethurst 3b31e55
add email sender to testrig
tsmethurst c868cc3
flesh out the email sender interface
tsmethurst ba1c49b
go fmt
tsmethurst bf6da31
golint
tsmethurst f253fce
update from field with more clarity
tsmethurst 2eda7f4
tidy up the email formatting
tsmethurst 2ca3322
fix tests
tsmethurst 5f6a0cd
add email sender to processor
tsmethurst ec4b3c9
tidy client api processing a bit
tsmethurst 784b648
further tidying in fromClientAPI
tsmethurst 556ac3d
pin new account to user
tsmethurst 212fd84
send msg to processor on new account creation
tsmethurst 1cc9742
generate confirm email uri
tsmethurst 0fee68f
remove emailer from account processor again
tsmethurst a558cb1
add processCreateAccountFromClientAPI
tsmethurst 49a5e48
move emailer accountprocessor => userprocessor
tsmethurst 55b643c
add email sender to user processor
tsmethurst a455c01
SendConfirmEmail function
tsmethurst b0cc815
add noop email sender
tsmethurst 8fdb325
use noop email sender in tests
tsmethurst b524b12
only assemble message if callback is not nil
tsmethurst 42881aa
use noop email sender if no smtp host is defined
tsmethurst d3a80b6
minify email html before sending
tsmethurst 4bb1e90
fix wrong email address
tsmethurst 11a53da
email confirm test
tsmethurst 04059f8
fmt
tsmethurst d1c271f
serve web hndler
tsmethurst 652b41d
add email confirm handler
tsmethurst 88e27da
init test log properly on testrig
tsmethurst 6ee46db
log emails that *would* have been sent
tsmethurst 92ac358
go fmt ./...
tsmethurst 91819ea
unexport confirm email handler
tsmethurst 7caf98a
updatedAt
tsmethurst 141f985
test confirm email function
tsmethurst 3382f4d
don't allow tokens older than 7 days
tsmethurst e94c686
change error message a bit
tsmethurst 478ddc7
add basic smtp docs
tsmethurst 667e3ca
add a few more snippets
tsmethurst d0fce9b
typo
tsmethurst ef036fe
Merge branch 'main' into smtp
tsmethurst 9c7e063
add email sender to outbox tests
tsmethurst 1470202
don't use dutch wikipedia link
tsmethurst edfc7fe
don't minify email html
tsmethurst File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* | ||
GoToSocial | ||
Copyright (C) 2021 GoToSocial Authors [email protected] | ||
|
||
This program is free software: you can redistribute it and/or modify | ||
it under the terms of the GNU Affero General Public License as published by | ||
the Free Software Foundation, either version 3 of the License, or | ||
(at your option) any later version. | ||
|
||
This program is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU Affero General Public License for more details. | ||
|
||
You should have received a copy of the GNU Affero General Public License | ||
along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
package main | ||
|
||
import ( | ||
"github.com/superseriousbusiness/gotosocial/internal/config" | ||
"github.com/urfave/cli/v2" | ||
) | ||
|
||
func smtpFlags(flagNames, envNames config.Flags, defaults config.Defaults) []cli.Flag { | ||
return []cli.Flag{ | ||
&cli.StringFlag{ | ||
Name: flagNames.SMTPHost, | ||
Usage: "Host of the smtp server. Eg., 'smtp.eu.mailgun.org'", | ||
Value: defaults.SMTPHost, | ||
EnvVars: []string{envNames.SMTPHost}, | ||
}, | ||
&cli.IntFlag{ | ||
Name: flagNames.SMTPPort, | ||
Usage: "Port of the smtp server. Eg., 587", | ||
Value: defaults.SMTPPort, | ||
EnvVars: []string{envNames.SMTPPort}, | ||
}, | ||
&cli.StringFlag{ | ||
Name: flagNames.SMTPUsername, | ||
Usage: "Username to authenticate with the smtp server as. Eg., '[email protected]'", | ||
Value: defaults.SMTPUsername, | ||
EnvVars: []string{envNames.SMTPUsername}, | ||
}, | ||
&cli.StringFlag{ | ||
Name: flagNames.SMTPPassword, | ||
Usage: "Password to pass to the smtp server.", | ||
Value: defaults.SMTPPassword, | ||
EnvVars: []string{envNames.SMTPPassword}, | ||
}, | ||
&cli.StringFlag{ | ||
Name: flagNames.SMTPFrom, | ||
Usage: "Address to use as the 'from' field of the email. Eg., '[email protected]'", | ||
Value: defaults.SMTPFrom, | ||
EnvVars: []string{envNames.SMTPFrom}, | ||
}, | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# Email Config (smtp) | ||
|
||
GoToSocial supports sending emails to users via the [Simple Mail Transfer Protocol](https://wikipedia.org/wiki/Simple_Mail_Transfer_Protocol) or **smtp**. | ||
|
||
Configuring GoToSocial to send emails is **not required** in order to have a properly running instance. Still, it's very useful for doing things like sending confirmation emails and notifications, and handling password reset requests. | ||
|
||
In order to make GoToSocial email sending work, you need an smtp-compatible mail service running somewhere, either as a server on the same machine that GoToSocial is running on, or via an external service like [Mailgun](https://mailgun.com). It may also be possible to use a free personal email address for sending emails, if your email provider supports smtp (check with them--most do), but you might run into trouble sending lots of emails. | ||
|
||
## Settings | ||
|
||
The configuration options for smtp are as follows: | ||
|
||
```yaml | ||
####################### | ||
##### SMTP CONFIG ##### | ||
####################### | ||
|
||
# Config for sending emails via an smtp server. See https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol | ||
smtp: | ||
|
||
# String. The hostname of the smtp server you want to use. | ||
# If this is not set, smtp will not be used to send emails, and you can ignore the other settings. | ||
# Examples: ["mail.example.org", "localhost"] | ||
# Default: "" | ||
host: "" | ||
# Int. Port to use to connect to the smtp server. | ||
# Examples: [] | ||
# Default: 0 | ||
port: 0 | ||
# String. Username to use when authenticating with the smtp server. | ||
# This should have been provided to you by your smtp host. | ||
# This is often, but not always, an email address. | ||
# Examples: ["[email protected]"] | ||
# Default: "" | ||
username: | ||
# String. Password to use when authenticating with the smtp server. | ||
# This should have been provided to you by your smtp host. | ||
# Examples: ["1234", "password"] | ||
# Default: "" | ||
password: | ||
# String. 'From' address for sent emails. | ||
# Examples: ["[email protected]"] | ||
# Default: "" | ||
from: "" | ||
``` | ||
|
||
Note that if you don't set `Host`, then email sending via smtp will be disabled, and the other settings will be ignored. GoToSocial will still log (at trace level) emails that *would* have been sent if smtp was enabled. | ||
|
||
## Behavior | ||
|
||
### SSL | ||
|
||
GoToSocial requires your smtp server to present valid SSL certificates. Most of the big services like Mailgun do this anyway, but if you're running your own mail server without SSL for some reason, and you're trying to connect GoToSocial to it, it will not work. | ||
|
||
The exception to this requirement is if you're running your mail server (or bridge to a mail server) on `localhost`, in which case SSL certs are not required. | ||
|
||
### When are emails sent? | ||
|
||
Currently, emails are only sent to users to request email confirmation when a new account is created, or to serve password reset requests. More email functionality will probably be added later. | ||
|
||
### HTML versus Plaintext | ||
|
||
Emails are sent in HTML by default. At this point, there is no option to send emails in plaintext, but this is something that might be added later if there's enough demand for it. | ||
|
||
## Customization | ||
|
||
If you like, you can customize the templates that are used for generating emails. Follow the examples in `web/templates`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -360,3 +360,35 @@ oidc: | |
- "email" | ||
- "profile" | ||
- "groups" | ||
|
||
####################### | ||
##### SMTP CONFIG ##### | ||
####################### | ||
|
||
# Config for sending emails via an smtp server. See https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol | ||
smtp: | ||
|
||
# String. The hostname of the smtp server you want to use. | ||
# If this is not set, smtp will not be used to send emails, and you can ignore the other settings. | ||
# Examples: ["mail.example.org", "localhost"] | ||
# Default: "" | ||
host: "" | ||
# Int. Port to use to connect to the smtp server. | ||
# Examples: [] | ||
# Default: 0 | ||
port: 0 | ||
# String. Username to use when authenticating with the smtp server. | ||
# This should have been provided to you by your smtp host. | ||
# This is often, but not always, an email address. | ||
# Examples: ["[email protected]"] | ||
# Default: "" | ||
username: | ||
# String. Password to use when authenticating with the smtp server. | ||
# This should have been provided to you by your smtp host. | ||
# Examples: ["1234", "password"] | ||
# Default: "" | ||
password: | ||
# String. 'From' address for sent emails. | ||
# Examples: ["[email protected]"] | ||
# Default: "" | ||
from: "" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
add config option to ratelimit amount of emails sent?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll do this in a separate PR later I think. Rate limiting is something we haven't touched yet anywhere, so there's probably a lot of reusable logic we can write for that (write one rate-limiter interface and attach it to everything that needs to be rate limited, for instance).