mirror of
https://git.sr.ht/~rjarry/aerc
synced 2026-03-02 18:23:33 +01:00
config: add option for SMTP HELO/EHLO local domain
Expose go-smtp functionality for setting the domain name as a config option. This allows aerc to communicate with SMTP servers with strict antispam measures without relying on sendmail. In theory, this should be set to a fully qualified domain name, but some servers simply forbid the use of "localhost", so it is reasonable to let the user set whatever value works for them. For comparison, this is equivalent to the functionality of the "domain" option of msmtp. Signed-off-by: Karel D. Kopecký <kdk@freeshell.de> Acked-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
committed by
Robin Jarry
parent
9a69dcc333
commit
c10cb370bb
@@ -11,6 +11,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
- Add a `msglist_answered` style for answered messages.
|
||||
- Compose `Format=Flowed` messages with `format-flowed=true` in `aerc.conf`.
|
||||
- Add a `trimSignature` function to the templating engine.
|
||||
- Change local domain name for SMTP with `smtp-domain=example.com` in
|
||||
`aerc.conf`
|
||||
|
||||
### Changed
|
||||
|
||||
|
||||
@@ -93,6 +93,10 @@ func (Send) Execute(aerc *widgets.Aerc, args []string) error {
|
||||
if starttls_, ok := config.Params["smtp-starttls"]; ok {
|
||||
starttls = starttls_ == "yes"
|
||||
}
|
||||
var domain string
|
||||
if domain_, ok := config.Params["smtp-domain"]; ok {
|
||||
domain = domain_
|
||||
}
|
||||
ctx := sendCtx{
|
||||
uri: uri,
|
||||
scheme: scheme,
|
||||
@@ -100,6 +104,7 @@ func (Send) Execute(aerc *widgets.Aerc, args []string) error {
|
||||
starttls: starttls,
|
||||
from: config.From,
|
||||
rcpts: rcpts,
|
||||
domain: domain,
|
||||
}
|
||||
|
||||
warn, err := composer.ShouldWarnAttachment()
|
||||
@@ -236,6 +241,7 @@ type sendCtx struct {
|
||||
starttls bool
|
||||
from *mail.Address
|
||||
rcpts []*mail.Address
|
||||
domain string
|
||||
}
|
||||
|
||||
func newSendmailSender(ctx sendCtx) (io.WriteCloser, error) {
|
||||
@@ -393,7 +399,7 @@ func newSmtpSender(ctx sendCtx) (io.WriteCloser, error) {
|
||||
)
|
||||
switch ctx.scheme {
|
||||
case "smtp":
|
||||
conn, err = connectSmtp(ctx.starttls, ctx.uri.Host)
|
||||
conn, err = connectSmtp(ctx.starttls, ctx.uri.Host, ctx.domain)
|
||||
case "smtps":
|
||||
conn, err = connectSmtps(ctx.uri.Host)
|
||||
default:
|
||||
@@ -437,7 +443,7 @@ func newSmtpSender(ctx sendCtx) (io.WriteCloser, error) {
|
||||
return s.w, nil
|
||||
}
|
||||
|
||||
func connectSmtp(starttls bool, host string) (*smtp.Client, error) {
|
||||
func connectSmtp(starttls bool, host string, domain string) (*smtp.Client, error) {
|
||||
serverName := host
|
||||
if !strings.ContainsRune(host, ':') {
|
||||
host += ":587" // Default to submission port
|
||||
@@ -448,6 +454,12 @@ func connectSmtp(starttls bool, host string) (*smtp.Client, error) {
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "smtp.Dial")
|
||||
}
|
||||
if domain != "" {
|
||||
err := conn.Hello(domain)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "Hello")
|
||||
}
|
||||
}
|
||||
if sup, _ := conn.Extension("STARTTLS"); sup {
|
||||
if !starttls {
|
||||
err := errors.New("STARTTLS is supported by this server, " +
|
||||
|
||||
@@ -64,6 +64,12 @@ are available:
|
||||
|
||||
Default: _false_
|
||||
|
||||
*smtp-domain* = _<domain>_
|
||||
Local domain name to use in the HELO/EHLO SMTP command. Set this to a fully
|
||||
qualified domain name if the server requires it as an antispam measure.
|
||||
|
||||
Default: _localhost_
|
||||
|
||||
# SEE ALSO
|
||||
|
||||
*aerc*(1) *aerc-accounts*(5)
|
||||
|
||||
Reference in New Issue
Block a user