Làm thế nào để gửi Email trong Go bằng Gói Net / SMTP
Bạn thường có thể cần gửi email đến nhiều tài khoản bằng cách sử dụng các chương trình để xác thực và nhiều mục đích khác.
Giao thức SMTP xác định các tiêu chuẩn cho phép giao tiếp email giữa các máy chủ thư và các tác nhân chuyển thư, trong khi giao thức IMAP là để nhận email.
Go cung cấp chức năng cho các hoạt động liên quan đến email được RFC xác định trong gói net / smtp, gói này cũng chứa các phần mở rộng 8BITMIME, AUTH và STARTTLS.
Mã được sử dụng trong dự án này có sẵn trong Kho lưu trữ GitHub và miễn phí cho bạn sử dụng theo giấy phép MIT.
Mục Lục
Làm thế nào để gửi Email trong Go bằng Gói Net / SMTP
Gói net / smtp là một phần của thư viện chuẩn Go, vì vậy bạn không cần cài đặt bất kỳ gói bên ngoài nào. Bạn chỉ cần nhập gói trước khi sử dụng nó.
import (
"net/smtp"
"log"
"crypto/tls"
"fmt"
)
Bạn cũng sẽ cần nhập khúc gỗ gói để ghi lỗi vào bảng điều khiển và tiền điện tử / tls gói để định cấu hình kết nối an toàn.
Khi bạn đã nhập gói net / smtp, bạn nên viết Gửi thư() chức năng để gửi thư và sau đó gọi chức năng trong chức năng chính.
func main() {
fmt.Print(SendMail())
}
func SendMail() string {
}
Các Gửi thư() hàm sẽ chứa mã gửi thư đến người nhận.
Cách gửi email hoạt động
Giao thức SMTP xác định các tham số mà mọi thư cần phải có. Các tham số này là địa chỉ thư người gửi và người nhận, cổng gửi thư, máy chủ lưu trữ và thư.
Các thông số nêu trên rất quan trọng để gửi email.
Trong hướng dẫn này, bạn sẽ học cách gửi email Yahoo. Tuy nhiên, quá trình này giống nhau đối với bất kỳ Nhà cung cấp Máy chủ Thư (MSP) nào bạn sử dụng.
Vì bạn đang sử dụng Yahoo Mail, hãy đăng nhập vào tài khoản Yahoo Mail của bạn, đi đến Thông tin tài khoản, và nhấp vào Bảo mật tài khoản chuyển hướng. Sau đó, tạo mật khẩu ứng dụng. Bạn sẽ cần đặt tên cho ứng dụng, sau đó Yahoo Mail sẽ tạo mật khẩu cho ứng dụng và bạn có thể sử dụng mật khẩu trong mã của mình cùng với địa chỉ thư của mình.
bên trong Gửi thư() hàm, bạn sẽ khai báo ba biến; một biến giữ chuỗi email của bạn, một biến giữ mật khẩu email của bạn và một chuỗi chứa địa chỉ email mà bạn đang gửi thư đến.
from := "yourMail@gmail.com"
password := "aSecurePasswordHere"
to := "anemail@gmail.com"
Bạn có thể sử dụng một lát cắt và lặp qua các phần tử nếu bạn định gửi chúng cho nhiều người nhận.
Nhận và thiết lập máy chủ và cổng email
Giao thức SMTP sử dụng máy chủ lưu trữ và số cổng để xác định nguồn email. Đây là nơi MSP của bạn đến. Bạn cần biết máy chủ và số cổng mà MSP của bạn cho phép bạn sử dụng.
Kiểm tra tài nguyên này để biết danh sách các máy chủ MSP và số cổng nếu bạn sử dụng email công khai như Gmail, Yahoo hoặc Outlook. Google đã tắt “ứng dụng kém an toàn” cho Gmail; bạn có thể muốn bảo mật ứng dụng của mình nếu bạn đang sử dụng Gmail.
Khi bạn đã có số cổng và địa chỉ máy chủ, hãy gán chúng cho các biến như sau:
host := "smtp.mail.yahoo.com"
port := "465"
Số máy chủ và cổng ở trên là của Yahoo Mail để sử dụng cho các tài khoản thông thường. Máy chủ được lưu trữ tại smtp.mail.yahoo.com và bạn được phép sử dụng cổng 465 để gửi Email.
Khai báo nội dung của email
Bước tiếp theo là khai báo nội dung của mail dưới dạng các biến. Chủ đề và nội dung tạo nên thông điệp.
subject := "Hey, I'm Just Checking On You."
body := "Hope you're doing okay! How are you doing today. "
Các môn học biến là chủ đề của email; các thân hình biến là nội dung của email bạn đang gửi.
Bạn sẽ cần tạo một bản đồ các chuỗi để biểu thị các tiêu đề của email.
headers := make(map[string]string)
headers["From"] = from
headers["To"] = to
headers["Subject"] = subject
message := ""
for k, v := range headers {
message += fmt.Sprintf("%s: %sr", k, v)
}
message += "r" + body
Đầu tiên, bạn tạo một bản đồ các khóa và giá trị chuỗi và đặt các tiêu đề cho địa chỉ của bạn, địa chỉ người nhận và chủ đề, như được hiển thị ở trên. Sử dụng một dải vòng lặp trên tiêu đề bản đồ, một thông điệp biến được khai báo để chứa tiêu đề và thông báo bằng cách sử dụng định dạng chuỗi.
Xác thực Email
Email cần xác thực để xác minh nguồn. Gói smtp cung cấp chức năng xác thực email bằng cách sử dụng PlainAuth. Các PlainAuth phương thức nhận danh tính, Email của người gửi, mật khẩu và máy chủ lưu trữ làm tham số và trả về Auth đối tượng bạn sẽ sử dụng để gửi email.
authenticate := smtp.PlainAuth("", from, password, host)
Danh tính là tên người dùng của bạn, có thể được để trống, như trong trường hợp này.
Tạo kết nối cho email
Một số nhà cung cấp dịch vụ thư yêu cầu bạn gửi email qua kết nối. Trong bài viết này, chúng tôi sẽ tạo kết nối TCP tới máy chủ với cấu hình TLS.
tlsConfig := &tls.Config{
InsecureSkipVerify: true,
ServerName: host,
}
Trong đoạn mã trên, bạn đã tạo cấu hình TLS bằng cách tham chiếu Cấu hình cấu trúc ở đâu InsecureSkipVerify đã được đặt thành thậtvà tên máy chủ đã được chỉ định cho chủ nhà Biến đổi.
Bạn phải tạo kết nối TCP bằng cách sử dụng Quay số phương pháp của tls bưu kiện. Các quay số trong trường hợp này, phương thức này có kiểu kết nối (TCP), trong trường hợp này là địa chỉ máy chủ và cấu hình kết nối TLS.
connection, err := tls.Dial("tcp", serverAddress, tlsConfig) err != nil {
log.Panic(err)
}
Trong đoạn mã trên, bạn đã tạo kết nối TCP và xử lý lỗi; bạn sẽ tạo một gói smtp mới bằng cách sử dụng NewClient phương pháp của net / smtp bưu kiện. Các NewClient phương thức này có kết nối và máy chủ lưu trữ, tương ứng.
smtpClient, err := smtp.NewClient(connection, host)
if err != nil {
log.Panic(err)
}
Bây giờ bạn đã tạo một smtp trường hợp khách hàng, bạn phải đặt các tham số của smtpClient và xử lý các lỗi.
if err = smtpClient.Auth(authenticate); err != nil {
log.Panic(err)
}
if err = smtpClient.Mail(from); err != nil {
log.Panic(err)
}
if err = smtpClient.Rcpt(headers["To"]); err != nil {
log.Panic(err)
}
Trong ví dụ trên, bạn đã chuyển các tham số xác thực, địa chỉ người gửi và địa chỉ người nhận cho các phương thức tương ứng của chúng và xử lý lỗi.
Cuối cùng, bạn phải ghi vào phiên bản kết nối và bạn có thể làm điều đó bằng cách tạo một trình viết bằng cách sử dụng Dữ liệu phương pháp của bạn khách hàng smtp ví dụ.
writer, err := smtpClient.Data()
if err != nil {
log.Panic(err)
}
_, err = writer.Write([]byte(message))
if err != nil {
log.Panic(err)
}
Sau khi tạo trình viết, bạn viết một đoạn byte của thông báo bằng cách sử dụng Viết như trong ví dụ trên.
err = writer.Close()
if err != nil {
log.Panic(err)
}
err = smtpClient.Quit()
if err != nil {
return
}
return "Successful, the mail was sent!"
Đóng trình viết và thoát khỏi phiên bản kết nối máy khách smtp bằng cách sử dụng mã trên. Các Gửi thư() hàm trả về một thông báo thành công, như được hiển thị ở trên.
Khi gọi Gửi thư() chức năng trong chính bạn sẽ nhận được thông báo thành công được ghi vào bảng điều khiển của bạn và email` được gửi đến người nhận của bạn.
Có nhiều thứ hơn cho gói Net
Gói net chứa nhiều gói cho các chức năng liên quan đến mạng và gói smtp chỉ là một trong số đó. Bạn cũng có thể sử dụng các gói TCP và HTTP để phát triển liên quan đến mạng.
Bạn có thể thấy gói net / smtp áp đảo nếu bạn không phải là nhà phát triển phụ trợ. Có nhiều lựa chọn thay thế khác để gửi email nhanh chóng với ít dòng mã hơn. Bạn có thể kiểm tra các công ty tiếp thị qua email như SendGrid, Twilio và MailChimp và các dịch vụ bản tin như Substack và Revue cho phép bạn gửi email cho nhiều người dùng mà không cần căng thẳng.