Menghantar E-mel Tanpa Pelayan SMTP dalam Go
Soalan:
Anda mahu menghantar e-mel pukal tanpa bergantung pada pelayan SMTP luaran kerana had penggunaan. Bolehkah anda menghantar e-mel tanpa pelayan SMTP menggunakan pustaka standard Go?
Jawapan:
Untuk menghantar e-mel tanpa pelayan SMTP, anda mesti mewakilkan tugas kepada program lain yang mampu daripada menghantar e-mel. Dalam sistem POSIX, program /usr/sbin/sendmail selalunya tersedia untuk tujuan ini. Anda boleh memanggilnya dengan pilihan -t untuk mendapatkan semula alamat penerima daripada pengepala Kepada mesej.
Menggunakan Perpustakaan Standard dengan Sendmail
Anda boleh menggunakan os/exec pakej , net/mail dan net/textproto untuk memanggil Sendmail terus, tetapi pakej gomail menyediakan penyelesaian yang lebih mudah. Jenis Mesejnya termasuk kaedah WriteTo() yang boleh menulis kepada contoh Sendmail yang sedang berjalan. Berikut ialah contoh:
<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>
Kelebihan Menggunakan MTA:
Walaupun menggunakan MTA mungkin kelihatan seperti langkah tambahan, ia menawarkan kelebihan beratur mel. Jika MTA tidak dapat menghantar mesej dengan segera, seperti semasa gangguan rangkaian, ia akan menyimpan mesej dalam baris gilir dan berulang kali cuba menghantarnya sehingga berjaya atau tamat masa berlaku.
Atas ialah kandungan terperinci Bolehkah saya Menghantar E-mel dalam Go Tanpa Menggunakan Pelayan SMTP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!