使用 mailhog 和 golang 发送邮件时未加密的连接

Unencrypted connection when sending mail using mailhog and golang

这些代码在使用 gmail 时正常工作(AllowLessSecureApp 开启),但不适用于 mailhog(unencrypted connection 错误),这些是要重现的最少代码:

package main
import (
    "crypto/tls"
    "fmt"
    "net/smtp"

    "github.com/jordan-wright/email"
    "github.com/stretchr/testify/assert"
)

func TestSendMail(t *testing.T) {
  m := struct{
    Host string
    Port int
    User string
    Pass string 
  }{
    Host: `local.test`, // resolved to 127.0.0.1 in /etc/hosts
    Port: 1025,
    User: `test@local.test`,
    Pass: `test`,
  }
  e := email.NewEmail()
  e.From = `test@local.test`
  e.To = []string{`test@local.test`}
  e.Subject = `test mail`
  host, _ := os.Hostname()
  e.Text = []byte(`testing email from ` + host)
  err := e.SendWithStartTLS(fmt.Sprintf("%s:%d", m.Host, m.Port), smtp.PlainAuth("", m.User, m.Pass, m.Host), &tls.Config{InsecureSkipVerify: true})
  assert.NoError(t, err)
}

docker-compose.yml:

version: "3.9"
services:
  mailhog:
    image: mailhog/mailhog
    container_name: test_mailhog
    env_file:
      - backend/.env # not used
    ports:
      - 1025:1025 # smtp server
      - 8025:8025 # web ui
    restart: unless-stopped

或者有任何解决方法吗?例如。 docker-compose?

上的一些 TLS 代理

可能是 mailhog 没有正确的 TLS 证书,它在本​​地主机上不使用 TLS 进行侦听,请尝试使用函数 https://pkg.go.dev/github.com/jordan-wright/email#Email.Send 发送电子邮件

err := e.Send(fmt.Sprintf("%s:%d", m.Host, m.Port),smtp.CRAMMD5Auth(m.User,m.Pass))

mailhog 似乎不支持传入的 TLS(即作为 TLS 服务器工作)- 请参阅问题 STARTTLS support #296