From 4beb0386d7db4bbcbb80a331dc4d4d62e4eb587d Mon Sep 17 00:00:00 2001 From: Vicente Oros Date: Wed, 4 Jun 2025 13:48:46 -0600 Subject: [PATCH] fix: close SMTP connection properly --- notify/notify.go | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/notify/notify.go b/notify/notify.go index 61c0ec1..a741db5 100644 --- a/notify/notify.go +++ b/notify/notify.go @@ -33,24 +33,45 @@ func SendEmail(subject, body string, cfg *config.Config) error { // Armar mensaje msg := buildMessage(subject, body, smtpCfg.From, to) - // TLS con timeout dialer := &net.Dialer{Timeout: 5 * time.Second} tlsConfig := &tls.Config{ InsecureSkipVerify: false, ServerName: smtpCfg.Host, } - conn, err := tls.DialWithDialer(dialer, "tcp", addr, tlsConfig) - if err != nil { - return fmt.Errorf("fallo al conectar con TLS: %w", err) - } - // Cliente SMTP - c, err := smtp.NewClient(conn, smtpCfg.Host) - if err != nil { - return fmt.Errorf("fallo al crear cliente SMTP: %w", err) + var c *smtp.Client + + if smtpCfg.UseTLS { + conn, err := tls.DialWithDialer(dialer, "tcp", addr, tlsConfig) + if err != nil { + return fmt.Errorf("fallo al conectar con TLS: %w", err) + } + + c, err = smtp.NewClient(conn, smtpCfg.Host) + if err != nil { + return fmt.Errorf("fallo al crear cliente SMTP: %w", err) + } + } else { + conn, err := dialer.Dial("tcp", addr) + if err != nil { + return fmt.Errorf("fallo al conectar: %w", err) + } + + c, err = smtp.NewClient(conn, smtpCfg.Host) + if err != nil { + return fmt.Errorf("fallo al crear cliente SMTP: %w", err) + } + + if smtpCfg.UseSTARTTLS { + if err := c.StartTLS(tlsConfig); err != nil { + return fmt.Errorf("fallo en STARTTLS: %w", err) + } + } } - defer c.Quit() + + // Cerrar la conexión limpiamente defer c.Close() + defer c.Quit() // Autenticación auth := smtp.PlainAuth("", smtpCfg.Username, smtpCfg.Password, smtpCfg.Host)