1

这些代码在使用 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 代理?

4

2 回答 2

1

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))
于 2021-04-11T15:44:31.743 回答
1

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

于 2021-04-11T15:51:06.447 回答