Ίσως χρειαστεί συχνά να στείλετε email σε πολλούς λογαριασμούς χρησιμοποιώντας προγράμματα για έλεγχο ταυτότητας και πολλούς άλλους σκοπούς.

Το πρωτόκολλο SMTP ορίζει πρότυπα που επιτρέπουν την επικοινωνία email μεταξύ διακομιστών αλληλογραφίας και πρακτόρων μεταφοράς αλληλογραφίας, ενώ το πρωτόκολλο IMAP προορίζεται για λήψη μηνυμάτων email.

Το Go παρέχει λειτουργικότητα για δραστηριότητες που σχετίζονται με email που ορίζονται από το RFC στο πακέτο net/smtp, το οποίο περιέχει επίσης επεκτάσεις 8BITMIME, AUTH και STARTTLS.

Ο κώδικας που χρησιμοποιείται σε αυτό το έργο είναι διαθέσιμος στο α Αποθετήριο GitHub και είναι δωρεάν για χρήση βάσει της άδειας MIT.

Πώς να στείλετε μηνύματα ηλεκτρονικού ταχυδρομείου στο Go χρησιμοποιώντας το πακέτο Net/SMTP

Το πακέτο net/smtp είναι μέρος της τυπικής βιβλιοθήκης Go, επομένως δεν χρειάζεται να εγκαταστήσετε κανένα εξωτερικό πακέτο. Χρειάζεται μόνο να εισαγάγετε το πακέτο πριν το χρησιμοποιήσετε.

εισαγωγή (
"net/smtp"
"κούτσουρο"
"crypto/tls"
"fmt"
)

Θα χρειαστεί επίσης να εισαγάγετε το

κούτσουρο πακέτο για την καταγραφή σφαλμάτων στην κονσόλα και το crypto/tls πακέτο για να διαμορφώσετε μια ασφαλή σύνδεση.

Αφού εισαγάγετε το πακέτο net/smtp, θα πρέπει να γράψετε ένα SendMail() λειτουργία για να στείλετε την αλληλογραφία και στη συνέχεια να καλέσετε τη συνάρτηση στην κύρια λειτουργία.

funcκύριος() {
fmt. Εκτύπωση (SendMail())
}
funcSendMail()σειρά {
// Προσθήκη κώδικα εδώ
}

ο SendMail() η λειτουργία θα περιέχει τον κωδικό που στέλνει το μήνυμα στους παραλήπτες.

Πώς λειτουργεί η αποστολή email

Το πρωτόκολλο SMTP ορίζει τις παραμέτρους που πρέπει να έχει κάθε αλληλογραφία. Αυτές οι παράμετροι είναι οι διευθύνσεις αλληλογραφίας αποστολέα και παραλήπτη, μια θύρα στην οποία αποστέλλεται η αλληλογραφία, ένας κεντρικός διακομιστής και ένα μήνυμα.

Οι παράμετροι που αναφέρονται παραπάνω είναι σημαντικές για την αποστολή email.

Σε αυτό το σεμινάριο, θα μάθετε να στέλνετε email στο Yahoo. Ωστόσο, η διαδικασία είναι η ίδια για οποιονδήποτε πάροχο διακομιστή αλληλογραφίας (MSP) χρησιμοποιείτε.

Εφόσον χρησιμοποιείτε το Yahoo Mail, συνδεθείτε στο δικό σας Yahoo Mail λογαριασμό, κατευθυνθείτε προς Πληροφορίες λογαριασμού, και κάντε κλικ στο Ασφάλεια λογαριασμού αυτί. Στη συνέχεια, δημιουργήστε έναν κωδικό πρόσβασης εφαρμογής. Θα χρειαστεί να ονομάσετε την εφαρμογή και, στη συνέχεια, το Yahoo Mail θα δημιουργήσει έναν κωδικό πρόσβασης για την εφαρμογή και μπορείτε να χρησιμοποιήσετε τον κωδικό πρόσβασης στον κώδικά σας μαζί με τη διεύθυνση αλληλογραφίας σας.

Στο SendMail() συνάρτηση, θα δηλώσετε τρεις μεταβλητές. μια μεταβλητή που περιέχει τη συμβολοσειρά του email σας, μια που περιέχει τον κωδικό πρόσβασης του email σας και μια συμβολοσειρά που περιέχει τη διεύθυνση email στην οποία στέλνετε μηνύματα.

από := "[email protected]"
κωδικός πρόσβασης := "aSecurePasswordHere"
προς := "[email protected]"

Μπορείτε να χρησιμοποιήσετε μια φέτα και βρόχο μέσα από τα στοιχεία εάν σκοπεύετε να τα στείλετε σε πολλούς παραλήπτες.

Λήψη και ρύθμιση του κεντρικού υπολογιστή και της θύρας email

Το πρωτόκολλο SMTP χρησιμοποιεί τους αριθμούς κεντρικού υπολογιστή και θύρας για να προσδιορίσει την πηγή email. Εδώ μπαίνει ο MSP σας. Πρέπει να γνωρίζετε τον αριθμό κεντρικού υπολογιστή και θύρας που σας επιτρέπει να χρησιμοποιείτε το MSP σας.

Ελέγξτε αυτόν τον πόρο για μια λίστα κεντρικών υπολογιστών MSP και αριθμούς θυρών εάν χρησιμοποιείτε δημόσια μηνύματα ηλεκτρονικού ταχυδρομείου όπως το Gmail, το Yahoo ή το Outlook. Η Google έχει απενεργοποιήσει τις "λιγότερο ασφαλείς εφαρμογές" για το Gmail. μπορεί να θέλετε να ασφαλίσετε την εφαρμογή σας εάν χρησιμοποιείτε το Gmail.

Μόλις λάβετε τον αριθμό θύρας και τη διεύθυνση κεντρικού υπολογιστή, αντιστοιχίστε τα σε μεταβλητές όπως αυτή:

host := "smtp.mail.yahoo.com"
λιμάνι :="465"

Οι παραπάνω αριθμοί κεντρικού υπολογιστή και θύρας προέρχονται από το Yahoo Mail για χρήση σε κανονικούς λογαριασμούς. Ο διακομιστής φιλοξενείται στη διεύθυνση smtp.mail.yahoo.com και σας επιτρέπεται να χρησιμοποιήσετε τη θύρα 465 για αποστολή email.

Δήλωση του Περιεχομένου του Email

Το επόμενο βήμα είναι να δηλώσετε τα περιεχόμενα της αλληλογραφίας ως μεταβλητές. Το θέμα και το σώμα συνθέτουν το μήνυμα.

θέμα := "Γεια, Απλώς σε ελέγχω."
body := «Ελπίζω να είσαι καλά! Πώς είσαι σήμερα. "

ο θέμα μεταβλητή είναι το θέμα του email. ο σώμα μεταβλητή είναι το σώμα του email που στέλνετε.

Ρύθμιση των κεφαλίδων email

Θα χρειαστεί να δημιουργήσετε έναν χάρτη συμβολοσειρών για να υποδηλώσετε τις κεφαλίδες του μηνύματος ηλεκτρονικού ταχυδρομείου.

κεφαλίδες := φτιαχνω, κανω(χάρτης[σειρά]σειρά)
headers["From"] = από
headers["To"] = προς
headers["Subject"] = θέμα
μήνυμα := ""
Για k, v := εύρος κεφαλίδες {
μήνυμα += fmt. Sprintf("%s: %s\r", k, v)
}
μήνυμα += "\r" + σώμα

Αρχικά, δημιουργείτε έναν χάρτη με κλειδιά και τιμές συμβολοσειρών και ορίζετε τις κεφαλίδες της διεύθυνσής σας, τη διεύθυνση του παραλήπτη και το θέμα, όπως φαίνεται παραπάνω. Χρησιμοποιώντας ένα εύρος για βρόχο στο κεφαλίδες χάρτης, α μήνυμα Η μεταβλητή δηλώνεται ότι περιέχει τις κεφαλίδες και το μήνυμα χρησιμοποιώντας μορφοποίηση συμβολοσειράς.

Έλεγχος ταυτότητας του email

Το email χρειάζεται έλεγχο ταυτότητας για την επαλήθευση της πηγής. Το πακέτο smtp παρέχει λειτουργικότητα για έλεγχο ταυτότητας email χρησιμοποιώντας το PlainAuth. ο PlainAuth Η μέθοδος λαμβάνει την ταυτότητα, το email του αποστολέα, τον κωδικό πρόσβασης και τον κεντρικό υπολογιστή ως παραμέτρους και επιστρέφει ένα Auth αντικείμενο που θα χρησιμοποιήσετε για να στείλετε το email.

έλεγχος ταυτότητας := smtp. PlainAuth("", από, κωδικός πρόσβασης, κεντρικός υπολογιστής)

Η ταυτότητα είναι το όνομα χρήστη σας, το οποίο μπορεί να μείνει κενό, όπως φαίνεται σε αυτήν την περίπτωση.

Δημιουργία σύνδεσης για το email

Ορισμένοι πάροχοι υπηρεσιών αλληλογραφίας απαιτούν από εσάς να στείλετε το email μέσω σύνδεσης. Σε αυτό το άρθρο, θα κάνουμε ένα Σύνδεση TCP στον διακομιστή με διαμορφώσεις TLS.

tlsConfig := &tls. config{
InsecureSkipVerify: αληθής,
Όνομα διακομιστή: host,
}

Στον παραπάνω κώδικα, κάνατε μια διαμόρφωση TLS αναφέροντας το Διαμόρφωση κατασκευάστε πού InsecureSkipVerify ορίστηκε σε αληθής, και το όνομα διακομιστή εκχωρήθηκε στο πλήθος μεταβλητός.

Πρέπει να δημιουργήσετε μια σύνδεση TCP χρησιμοποιώντας το Καντράν μέθοδος του tls πακέτο. ο καντράν Η μέθοδος λαμβάνει τον τύπο σύνδεσης (TCP), σε αυτήν την περίπτωση, τη διεύθυνση διακομιστή και τις διαμορφώσεις σύνδεσης TLS.


σύνδεση, err := tls. Dial("tcp", serverAddress, tlsConfig) err != μηδέν {
κούτσουρο. Πανικός (λάθος)
}

Στον παραπάνω κώδικα, κάνατε μια σύνδεση TCP και αντιμετωπίσατε σφάλματα. θα έχετε δημιουργήσει ένα νέο πακέτο smtp χρησιμοποιώντας το NewClient μέθοδος του net/smtp πακέτο. ο NewClient μέθοδος παίρνει μια σύνδεση και έναν κεντρικό υπολογιστή, αντίστοιχα.

smtpClient, err := smtp. NewClient (σύνδεση, κεντρικός υπολογιστής)
αν λάθος!= μηδέν {
κούτσουρο. Πανικός (λάθος)
}

Τώρα που δημιουργήσατε ένα smtp για παράδειγμα πελάτη, πρέπει να ορίσετε τις παραμέτρους του smtpClient και να χειριστεί τα λάθη.

αν err = smtpClient. Auth (έλεγχος ταυτότητας); λάθος!= μηδέν {
κούτσουρο. Πανικός (λάθος)
}
αν err = smtpClient. Ταχυδρομείο (από); λάθος!= μηδέν {
κούτσουρο. Πανικός (λάθος)
}
αν err = smtpClient. Rcpt (κεφαλίδες["Προς"]); λάθος!= μηδέν {
κούτσουρο. Πανικός (λάθος)
}

Στο παραπάνω παράδειγμα, μεταβιβάσατε τις παραμέτρους ελέγχου ταυτότητας, διεύθυνσης αποστολέα και διεύθυνσης παραλήπτη στις αντίστοιχες μεθόδους τους και αντιμετωπίσατε σφάλματα.

Τέλος, πρέπει να γράψετε στο στιγμιότυπο σύνδεσης και μπορείτε να το κάνετε δημιουργώντας ένα πρόγραμμα εγγραφής χρησιμοποιώντας το Δεδομένα μέθοδος σας πελάτη smtp παράδειγμα.

συγγραφέας, err := smtpClient. Δεδομένα()
αν λάθος!= μηδέν {
κούτσουρο. Πανικός (λάθος)
}
_, err = συγγραφέας. Γράφω([]ψηφιόλεξη(μήνυμα))
αν λάθος!= μηδέν {
κούτσουρο. Πανικός (λάθος)
}

Αφού δημιουργήσετε ένα πρόγραμμα εγγραφής, γράφετε ένα κομμάτι byte του μηνύματος χρησιμοποιώντας το Γράφω μέθοδο όπως στο παραπάνω παράδειγμα.

err = συγγραφέας. Κλείσε()
αν λάθος!= μηδέν {
κούτσουρο. Πανικός (λάθος)
}
err = smtpClient. Εγκαταλείπω()
αν λάθος!= μηδέν {
ΕΠΙΣΤΡΟΦΗ
}
ΕΠΙΣΤΡΟΦΗ "Επιτυχής, η αλληλογραφία στάλθηκε!"

Κλείστε το πρόγραμμα εγγραφής και κλείστε την παρουσία σύνδεσης πελάτη smtp χρησιμοποιώντας τον παραπάνω κώδικα. ο SendMail() Η λειτουργία επιστρέφει ένα μήνυμα επιτυχίας, όπως φαίνεται παραπάνω.

Με την κλήση του SendMail() λειτουργία στο κύριος λειτουργία, θα πρέπει να λάβετε το μήνυμα επιτυχίας καταγεγραμμένο στην κονσόλα σας και το email που θα σταλεί στον παραλήπτη σας.

Υπάρχουν περισσότερα στο πακέτο Net

Το πακέτο net περιέχει πολλά πακέτα για λειτουργίες που σχετίζονται με το δίκτυο και το πακέτο smtp είναι μόνο ένα από αυτά. Μπορείτε επίσης να χρησιμοποιήσετε τα πακέτα TCP και HTTP για ανάπτυξη που σχετίζεται με τη δικτύωση.

Μπορεί να βρείτε το πακέτο net/smtp συντριπτικό εάν δεν είστε προγραμματιστής υποστήριξης. Υπάρχουν πολλές άλλες εναλλακτικές λύσεις για γρήγορη αποστολή email με λιγότερες γραμμές κώδικα. Μπορείτε να ελέγξετε τις εταιρείες μάρκετινγκ ηλεκτρονικού ταχυδρομείου όπως οι SendGrid, Twilio και MailChimp και υπηρεσίες ενημερωτικών δελτίων όπως το Substack και το Revue που σας επιτρέπουν να στέλνετε μηνύματα ηλεκτρονικού ταχυδρομείου σε πολλούς χρήστες χωρίς άγχος.