>  기사  >  백엔드 개발  >  SMTP 서버를 사용하지 않고 Go에서 이메일을 보낼 수 있나요?

SMTP 서버를 사용하지 않고 Go에서 이메일을 보낼 수 있나요?

DDD
DDD원래의
2024-10-25 20:27:02991검색

Can I Send Emails in Go Without Using an SMTP Server?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.