SMTP サーバーを使用せずに Go でメールを送信できますか?

DDD
リリース: 2024-10-25 20:27:02
オリジナル
1097 人が閲覧しました

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 パッケージはより簡単なソリューションを提供します。その Message タイプには、実行中の 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 がメッセージをすぐに配信できない場合、MTA はメッセージをキューに保存し、成功するかタイムアウトが発生するまで繰り返し配信を試行します。

以上がSMTP サーバーを使用せずに Go でメールを送信できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート