首頁  >  文章  >  後端開發  >  我可以在不使用 SMTP 伺服器的情況下在 Go 中發送電子郵件嗎?

我可以在不使用 SMTP 伺服器的情況下在 Go 中發送電子郵件嗎?

DDD
DDD原創
2024-10-25 20:27:021101瀏覽

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

在Go 中沒有SMTP 伺服器發送電子郵件

問題:

問題:

您想要傳送由於使用限制,無需依賴外部SMTP 伺服器即可大量傳送電子郵件。你可以使用 Go 的標準函式庫在沒有 SMTP 伺服器的情況下傳送電子郵件嗎?

答案:

要在沒有 SMTP 伺服器的情況下發送電子郵件,你必須將任務委託給另一個有能力的程式發送電子郵件。在 POSIX 系統中,/usr/sbin/sendmail 程式通常可用於此目的。您可以使用 -t 選項呼叫它,以從郵件的 To 標頭中檢索收件者位址。

將標準函式庫與Sendmail 結合使用
<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>

您可以使用os/exec 、net/mail 和net/textproto 套件直接呼叫Sendmail,但gomail 套件提供了更簡單的解決方案。它的 Message 類型包括一個 WriteTo() 方法,可以寫入正在運行的 Sendmail 實例。以下是一個範例:

使用MTA 的優點:雖然使用MTA 可能看起來像是額外的步驟,但它提供了郵件排隊的優勢。如果 MTA 無法立即傳遞郵件(例如在網路中斷期間),它會將郵件儲存在佇列中並重複嘗試傳遞郵件,直到成功或發生逾時。

以上是我可以在不使用 SMTP 伺服器的情況下在 Go 中發送電子郵件嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn