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 サイトの他の関連記事を参照してください。