-1

I am trying to follow this example:

package main

import (
    "gopkg.in/gomail.v2"
)




func main() {
    m := gomail.NewMessage()
    m.SetHeader("From", "from@example.com")
    m.SetHeader("To", "to@example.com")
    m.SetHeader("Subject", "Hello!")
    m.SetBody("text/plain", "Hello!")

    d := gomail.Dialer{Host: "localhost", Port: 587}
    if err := d.DialAndSend(m); err != nil {
        panic(err)
    }
} //main

And I got this error:

panic: 454 4.7.0 TLS not available due to local problem

goroutine 1 [running]:
panic(0x244ca0, 0xc820010b20)
    /usr/local/Cellar/go/1.6/libexec/src/runtime/panic.go:464 +0x3e6
main.main()
    /Users/kaiyin/IdeaProjects/gomail/main.go:19 +0x342
exit status 2

I also tried disabling TLS and SSL:

    d := gomail.Dialer{Host: "localhost", Port: 587, SSL: false, TLSConfig: nil}

But the error still persists.


I had a look into the mail.log (from postfix on osx 10.10):

Apr  7 14:28:05 kaiyins-mbp postfix/smtpd[64525]: warning: No server certs available. TLS won't be enabled
Apr  7 14:28:05 kaiyins-mbp postfix/smtpd[64525]: connect from localhost[::1]
Apr  7 14:28:05 kaiyins-mbp postfix/smtpd[64525]: lost connection after STARTTLS from localhost[::1]

So I generated certs like this:

cd /etc/postfix
sudo openssl req -new -outform PEM -out smtpd.cert    -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM    -days 365 -x509

And changed postfix settings:

smtpd_enforce_tls                = no
smtpd_tls_loglevel               = 1
smtpd_use_tls                    = yes
smtpd_tls_key_file               = /etc/postfix/smtpd.key
smtpd_tls_cert_file              = /etc/postfix/smtpd.cert

Now I get a different error:

panic: x509: certificate signed by unknown authority

goroutine 1 [running]:
panic(0x26e3c0, 0xc8203e4b80)
    /usr/local/Cellar/go/1.6/libexec/src/runtime/panic.go:464 +0x3e6
main.main()
    /Users/kaiyin/IdeaProjects/gomail/main.go:19 +0x32f
exit status 2

I tried to generate a cert as instructed here: http://www.akadia.com/services/ssh_test_certificate.html

And I got yet another error:

panic: x509: certificate is valid for Kaiyin Zhong, not localhost

goroutine 1 [running]:
panic(0x26a7e0, 0xc8203e6800)
    /usr/local/Cellar/go/1.6/libexec/src/runtime/panic.go:464 +0x3e6
main.main()
    /Users/kaiyin/IdeaProjects/gomail/main.go:19 +0x32f
exit status 2

I assumed that I got the server name wrong, so I did it all over again, with the server FQDN set to localhost:

Common Name (e.g. server FQDN or YOUR name) []:localhost

Then I got back to the previous error:

panic: x509: certificate signed by unknown authority

goroutine 1 [running]:
panic(0x26e3c0, 0xc8203e6800)
    /usr/local/Cellar/go/1.6/libexec/src/runtime/panic.go:464 +0x3e6
main.main()
    /Users/kaiyin/IdeaProjects/gomail/main.go:19 +0x32f
exit status 2
qed
  • 22,298
  • 21
  • 125
  • 196
  • what smtp server do you have on your local computer/server? do you have access to mail server logs? – pregmatch Apr 07 '16 at 12:50
  • Following up on pregmatch's comment, if you have access to the maillog (directory path will be different depending on which OS), that will tell you why it's failing. One suggestion would be to regenerate your cert and to not put a password on it. – william.taylor.09 Apr 07 '16 at 12:58
  • Please see my edits. – qed Apr 07 '16 at 13:05
  • I'm not entirely convinced you generated your certs correctly. Could you try following the instructions in this link? http://www.akadia.com/services/ssh_test_certificate.html – william.taylor.09 Apr 07 '16 at 13:15
  • @william.taylor.09 Still no luck. See my edits. – qed Apr 07 '16 at 13:28
  • Is there any way in the gomail library to set the TLS options? You want to be able to set the InsecureSkipVerify bool to true (see here: https://golang.org/pkg/crypto/tls/#Config). Edit: found the option. See my answer. – william.taylor.09 Apr 07 '16 at 13:49

1 Answers1

1

Set the InsecureSkipVerify option:

package main

import (
    "crypto/tls"

    "gopkg.in/gomail.v2"
)

func main() {
    d := gomail.NewDialer("smtp.example.com", 587, "user", "123456")
    d.TLSConfig = &tls.Config{InsecureSkipVerify: true}

    // Send emails using d.
}

Source: https://github.com/go-gomail/gomail

william.taylor.09
  • 2,145
  • 10
  • 17