Python
import smtplib
import ssl
host = 'smtp.126.com'
s = smtplib.SMTP(host)
context = ssl.create_default_context()
context.check_hostname = True
s.starttls(context=context)
s.quit()
Golang
如果服务器支持 STARTTLS,标准库 net/smtp 的 SendMail 方法就会校验主机名。
package main
import (
"crypto/tls"
"fmt"
"net/smtp"
)
func main() {
host := "smtp.126.com"
port := 25
c, err := smtp.Dial(fmt.Sprintf("%s:%d", host, port))
if err != nil {
panic(err)
}
tlsConfig := &tls.Config{ServerName: host}
if err := c.StartTLS(tlsConfig); err != nil {
panic(err) // panic: x509: certificate is valid for xxx, not yyy
}
if err = c.Quit(); err != nil {
panic(err)
}
}