package main
+import (
+ "crypto/tls"
+)
+
type Config struct {
SMTPPort int
POP3Port int
// Blacklisted addresses that should not accept mail.
BlacklistedAddresses []string
}
+
+func (c Config) GetTLSConfig() (*tls.Config, error) {
+ certs := make([]tls.Certificate, 0, len(c.Servers))
+ for _, server := range c.Servers {
+ if server.TLSCertPath == "" {
+ continue
+ }
+
+ cert, err := tls.LoadX509KeyPair(server.TLSCertPath, server.TLSKeyPath)
+ if err != nil {
+ return nil, err
+ }
+ certs = append(certs, cert)
+ }
+
+ if len(certs) == 0 {
+ return nil, nil
+ }
+
+ config := &tls.Config{
+ Certificates: certs,
+ }
+ config.BuildNameToCertificate()
+ return config, nil
+}
package main
import (
+ "crypto/tls"
"errors"
"fmt"
"io"
}
}
- l, err := net.Listen("tcp", fmt.Sprintf(":%d", server.config.POP3Port))
+ tlsConfig, err := server.config.GetTLSConfig()
+ if err != nil {
+ server.rc <- err
+ return
+ }
+
+ addr := fmt.Sprintf(":%d", server.config.POP3Port)
+
+ var l net.Listener
+ if tlsConfig == nil {
+ l, err = net.Listen("tcp", addr)
+ } else {
+ l, err = tls.Listen("tcp", addr, tlsConfig)
+ }
if err != nil {
server.rc <- err
return