Skip to content

net/smtp: SendMail blocked at smtp.Client.StartTLS #67867

Not planned
@hiroyukki

Description

@hiroyukki

Go version

go version go1.20.13 windows/386

Output of go env in your module/workspace:

set GO111MODULE=
set GOARCH=386
set GOBIN=
set GOCACHE=C:\Users\jiayi\AppData\Local\go-build
set GOENV=C:\Users\jiayi\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=386
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=D:\gopath\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=D:\gopath
set GOPRIVATE=
set GOPROXY=https://goproxy.io
set GOROOT=D:\Programs\go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=D:\Programs\go\pkg\tool\windows_386
set GOVCS=
set GOVERSION=go1.20.13
set GCCGO=gccgo
set GO386=sse2
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=E:\libgx\go\go.mod
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m32 -mthreads -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=C:\Users\jiayi\AppData\Local\Temp\go-build1503534736=/tmp/go-build -gno-record-gcc-switches

What did you do?

I send mail with net/smtp, some smtp server seems incompatible, my code:

func main() {
from := "test@gooxion.com"
to := []string{"test2@gooxion.com"}
auth := smtp.PlainAuth("", from, "wrong_pswd", "smtp.exmail.qq.com:25")
fmt.Println("pre sendMail")
fmt.Println(smtp.SendMail("smtp.exmail.qq.com:25", auth, from, to, []byte("hello")))
fmt.Println("post sendMail")
}

What did you see happen?

smtp.SendMail blocked (at smtp.Client.StartTLS) for about 2 minutes, until socket timeout

What did you expect to see?

STMP protocol can be run normally, failed or succeeded faithfully but not hang

Activity

changed the title [-]net/smtp SendMail blocked at smtp.Client.StartTLS[/-] [+]net/smtp: SendMail blocked at smtp.Client.StartTLS[/+] on Jun 7, 2024
mknyszek

mknyszek commented on Jun 7, 2024

@mknyszek
Contributor

This may be a long-shot but CC @bradfitz via https://dev.golang.org/owners. Maybe also CC @neild? Not sure.

added
NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.
on Jun 7, 2024
added this to the Backlog milestone on Jun 7, 2024
added
WaitingForInfoIssue is not actionable because of missing required information, which needs to be provided.
on Jun 15, 2024
rsc

rsc commented on Jun 28, 2024

@rsc
Contributor

This program works fine for me (prints StartTLS worked) using a cloud system that can dial port 25 (my home internet gets blocked by my ISP):

package main

import (
	"crypto/tls"
	"log"
	"net/smtp"
)

func main() {
	addr := "smtp.exmail.qq.com:25"
	println("dial...")
	c, err := smtp.Dial(addr)
	if err != nil {
		log.Fatal(err)
	}
	defer c.Close()
	println("extensions?...")
	if ok, _ := c.Extension("STARTTLS"); ok {
		println("starttls...")
		config := &tls.Config{ServerName: "smtp.exmail.qq.com"}
		if err = c.StartTLS(config); err != nil {
			log.Fatal(err)
		}
		log.Fatal("StartTLS worked")
	}
	log.Fatalf("no tls")
}

Does it work for you?

gopherbot

gopherbot commented on Jul 15, 2024

@gopherbot
Contributor

Timed out in state WaitingForInfo. Closing.

(I am just a bot, though. Please speak up if this is a mistake or you have the requested information.)

hiroyukki

hiroyukki commented on Jul 22, 2024

@hiroyukki
Author

This program works fine for me (prints StartTLS worked) using a cloud system that can dial port 25 (my home internet gets blocked by my ISP):

package main

import (
	"crypto/tls"
	"log"
	"net/smtp"
)

func main() {
	addr := "smtp.exmail.qq.com:25"
	println("dial...")
	c, err := smtp.Dial(addr)
	if err != nil {
		log.Fatal(err)
	}
	defer c.Close()
	println("extensions?...")
	if ok, _ := c.Extension("STARTTLS"); ok {
		println("starttls...")
		config := &tls.Config{ServerName: "smtp.exmail.qq.com"}
		if err = c.StartTLS(config); err != nil {
			log.Fatal(err)
		}
		log.Fatal("StartTLS worked")
	}
	log.Fatalf("no tls")
}

Does it work for you?

seems not work, pending on StartTLS until timeout
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.WaitingForInfoIssue is not actionable because of missing required information, which needs to be provided.

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @rsc@mknyszek@hiroyukki@gopherbot@seankhliao

        Issue actions

          net/smtp: SendMail blocked at smtp.Client.StartTLS · Issue #67867 · golang/go