Go에서 SMTP 서버 없이 이메일 보내기
질문:
보내고 싶습니다. 사용 제한으로 인해 외부 SMTP 서버에 의존하지 않고 대량 이메일을 보낼 수 있습니다. Go의 표준 라이브러리를 사용하여 SMTP 서버 없이 이메일을 보낼 수 있습니까?
답변:
SMTP 서버 없이 이메일을 보내려면 해당 작업을 가능한 다른 프로그램에 위임해야 합니다. 이메일을 보내는 것. POSIX 시스템에서는 /usr/sbin/sendmail 프로그램을 이러한 목적으로 사용할 수 있는 경우가 많습니다. -t 옵션을 사용하여 호출하면 메시지의 To 헤더에서 수신자 주소를 검색할 수 있습니다.
Sendmail과 함께 표준 라이브러리 사용
os/exec를 사용할 수 있습니다. , net/mail 및 net/textproto 패키지를 사용하여 Sendmail을 직접 호출할 수 있지만 gomail 패키지는 더 간단한 솔루션을 제공합니다. 해당 메시지 유형에는 실행 중인 Sendmail 인스턴스에 쓸 수 있는 WriteTo() 메서드가 포함되어 있습니다. 예는 다음과 같습니다.
<code class="go">import ( "os/exec" "github.com/go-gomail/gomail" ) const sendmailPath = "/usr/sbin/sendmail" func sendEmail(m *gomail.Message) error { cmd := exec.Command(sendmailPath, "-t") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr stdin, err := cmd.StdinPipe() if err != nil { return err } if err := cmd.Start(); err != nil { return err } if _, err := m.WriteTo(stdin); err != nil { return err } if err := stdin.Close(); err != nil { return err } if err := cmd.Wait(); err != nil { return err } return nil }</code>
MTA 사용의 장점:
MTA 사용은 추가 단계처럼 보일 수 있지만 메일 대기열의 장점을 제공합니다. 네트워크 중단 등으로 인해 MTA가 메시지를 즉시 전달할 수 없는 경우 메시지를 대기열에 저장하고 성공하거나 시간 초과가 발생할 때까지 반복적으로 전달을 시도합니다.
위 내용은 SMTP 서버를 사용하지 않고 Go에서 이메일을 보낼 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!