Αποστολή ηλεκτρονικού ταχυδρομείου C ++
Πώς να χρησιμοποιήσετε C ++ και SMTP για να στείλετε email με συνημμένο ή iCalendar
Κατεβάστε δωρεάν δοκιμήΚατά κανόνα, το πρωτόκολλο SMTP χρησιμοποιείται για την αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου. Χρειάζεστε πρόσβαση σε διακομιστή SMTP για να στείλετε ένα μήνυμα. Πρέπει να βρείτε τη διεύθυνση του διακομιστή SMTP στο δίκτυο, να καθορίσετε τη θύρα και τον τύπο κρυπτογράφησης, τη μέθοδο σύνδεσης και εξουσιοδότησης. Ορισμένοι πάροχοι ηλεκτρονικού ταχυδρομείου απαιτούν επίσης να ενεργοποιήσετε την πρόσβαση στο διακομιστή SMTP στις ρυθμίσεις του λογαριασμού σας. Επίσης, εάν δεν αισθάνεστε άνετα να εφαρμόσετε την εξουσιοδότηση OAuth στο λογισμικό σας, μπορείτε να δοκιμάσετε να δημιουργήσετε έναν ξεχωριστό κωδικό πρόσβασης για την εφαρμογή στις ρυθμίσεις του λογαριασμού σας.
Έτσι, αν έχετε κάνει όλες τις προπαρασκευαστικές εργασίες, ήρθε η ώρα να αρχίσετε να στέλνετε μηνύματα. Μπορείτε να χρησιμοποιήσετε τη βιβλιοθήκη Aspose.Email για C++ για αυτό. Εξετάστε το απλούστερο παράδειγμα:
auto smtpClient = MakeObject<SmtpClient>(u"smtp.gmail.com", u"login", u"password", SecurityOptions::SSLAuto);
smtpClient->Send(u"login@gmail.com", u"to@gmail.com", u"subject", u"body");
Χρησιμοποιήστε αυτήν την επιλογή εάν θέλετε να στείλετε ένα απλό μήνυμα ηλεκτρονικού ταχυδρομείου κειμένου.
Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου με συνημμένα χρησιμοποιώντας C ++
Εάν πρέπει να στείλετε ένα σύνθετο μήνυμα ηλεκτρονικού ταχυδρομείου χρησιμοποιώντας C ++, η τάξη MailMessage σίγουρα θα είναι χρήσιμη. Για παράδειγμα, για να στείλετε ένα μήνυμα παρόμοιο με το προηγούμενο:
auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);
Η τάξη MailMessage είναι ένα εξαιρετικό εργαλείο. Σας επιτρέπει να στέλνετε μηνύματα αποθηκευμένα σε μορφές αρχείων EML και MSG (Outlook Message Format). Μπορείτε επίσης να χρησιμοποιήσετε αυτήν τη μορφή για να στείλετε συνημμένα ή ακόμα και αντικείμενα iCalendar για να ρυθμίσετε ή να επιβεβαιώσετε τη συμμετοχή. Το MailMessage σάς επιτρέπει να βελτιώσετε τη λίστα παραληπτών, παραλήπτες Cc και Bcc. Μπορείτε να στείλετε ένα μήνυμα ηλεκτρονικού ταχυδρομείου με σήμανση HTML. Μπορείτε επίσης να επισημάνετε το μήνυμα με διάφορες σημαίες πριν το στείλετε, να προσθέσετε μεταδεδομένα, να το κρυπτογραφήσετε κ.λπ.
Γιατί οι άνθρωποι επιλέγουν το Aspose.Email για C ++ για την αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου;
Ναι, το Aspose.Email για C ++ δεν είναι μόνο ένα βοηθητικό πρόγραμμα για την αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου. Πρόκειται για μια ολοκληρωμένη λύση που παρέχει ολοκληρωμένη υποστήριξη για μια ποικιλία εργασιών που σχετίζονται με την αποστολή, λήψη, αποθήκευση και επεξεργασία email. Και μπορείτε να είστε σίγουροι ότι κατά την εκτέλεση αυτών των εργασιών, δεν θα αντιμετωπίσετε τους περιορισμούς της βιβλιοθήκης. Μελετάμε αυτό το θέμα εδώ και πολλά χρόνια και επεκτείνουμε συνεχώς τη λειτουργικότητά του.
Πιθανότατα έχετε συναντήσει μικρές βιβλιοθήκες που έχουν εμφανιστεί σχετικά πρόσφατα. Εύκολα και φυσικά επιλύουν ένα απλό πρόβλημα που αντιμετωπίζουν πολλοί χρήστες. Αλλά μόλις απομακρυνθείτε λίγο, συνειδητοποιείτε ότι συνεχίζοντας να χρησιμοποιείτε αυτό το ανεπιτήδευτο, αναγκάζεστε να φράξετε συνεχώς πατερίτσες, μερικές μονάδες για να παρακάμψετε τους περιορισμούς της βιβλιοθήκης, προσαρμογείς που έχουν σχεδιαστεί για να κάνετε φίλους με τη μικρή βιβλιοθήκη σας με μια άλλη μικρή βιβλιοθήκη κ.λπ. Και τώρα, η μικρή έξυπνη λύση σας δεν είναι πια τόσο έξυπνη. Επιπλέον, το στέλνετε στον διακομιστή, όπου πυροβολεί τακτικά και σταθερά στο πόδι, επειδή κανείς δεν έχει δοκιμάσει έναν τέτοιο ζωολογικό κήπο πατερίτσων και ενσωματώσεων πριν από εσάς. Και ανεξάρτητα από το πόσο σκληρά προσπαθείτε, αργά ή γρήγορα θα εξακολουθείτε να αντιμετωπίζετε τους περιορισμούς αυτής της βιβλιοθήκης. Και πρέπει να αναζητήσετε κάτι νέο. Έτσι, όταν πρόκειται για εργασία με ηλεκτρονικό ταχυδρομείο, ίσως θελήσετε να εξετάσετε το Aspose.Email για C ++!
Σας προσφέρουμε όχι μόνο έναν πελάτη για εργασία με SMTP. Πρώτον, απέχει πολύ από το μόνο πρωτόκολλο για την αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου με C ++. Με το προϊόν μας, μπορείτε να στείλετε μηνύματα ηλεκτρονικού ταχυδρομείου χρησιμοποιώντας το Exchange EWS και το Microsoft Graph!
Σας έχουμε ήδη πει για τις δυνατότητες του MailMessage σε αυτό το άρθρο. Αλλά αυτό απέχει πολύ από το μόνο εργαλείο για την προετοιμασία επιστολών για αποστολή. Μπορείτε να:
- δημιουργήστε γράμματα από ένα πρότυπο χρησιμοποιώντας το TemplateEngine.
- αποσυσκευάστε τα δοχεία με γράμματα, χάρη στην υποστήριξη των μορφών OST, PST και MBOX.
- κατεβάστε επιστολές από το γραμματοκιβώτιο χρησιμοποιώντας την υποστήριξη πρωτοκόλλων IMAP, POP3, Exchange EWS και WebDAV, καθώς και του Microsoft Graph.
- μετατρέψτε τα μηνύματα ηλεκτρονικού ταχυδρομείου από τη μια μορφή στην άλλη.
Μπορείτε εύκολα να λάβετε μια επιστολή χρησιμοποιώντας το πρωτόκολλο Exchange Ews. Θα είναι σε μορφή MAPI. Αλλά μπορείτε εύκολα να το μετατρέψετε σε μορφή EML, η οποία θα σας επιτρέψει να το στείλετε αργότερα μέσω πρωτοκόλλου SMTP. Ταυτόχρονα, μπορείτε να αλλάξετε τη λίστα των παραληπτών ή τον αποστολέα της επιστολής ανά πάσα στιγμή.
Πώς λειτουργεί η αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου χρησιμοποιώντας C ++ και SMTP;
Διαμόρφωση SMTP
Τη στιγμή που δημιουργείτε μια εμφάνιση της κλάσης SmtpClient, δεν συμβαίνει τίποτα ιδιαίτερο. Απλά καθορίζετε τον αριθμό των ρυθμίσεων που θα σας επιτρέψουν να συνδεθείτε σε έναν διακομιστή SMTP στο μέλλον για να στείλετε μηνύματα. Όλη η μαγεία συμβαίνει στην πρώτη κλήση στο send
μέθοδος. Τι συμβαίνει αυτή τη στιγμή;
Στην πραγματικότητα, όλα εξαρτώνται από τις ρυθμίσεις που έχετε καθορίσει. Ας εξετάσουμε διάφορες επιλογές. Ας υποθέσουμε ότι έχετε καθορίσει τον κεντρικό υπολογιστή διακομιστή αλλά δεν έχετε καθορίσει τη θύρα και τον τύπο κρυπτογράφησης. Σε αυτή την περίπτωση, θα ξεκινήσει ο μηχανισμός αυτόματης επιλογής ρυθμίσεων. Αυτός ο μηχανισμός αποτελείται από διαδοχικές προσπάθειες σύνδεσης με το διακομιστή SMTP χρησιμοποιώντας τυπικές θύρες και τους αντίστοιχους αλγόριθμους κρυπτογράφησης. Πρώτον, γίνεται μια προσπάθεια σύνδεσης με το διακομιστή μέσω κρυπτογραφημένου καναλιού. Αλλά αν αποτύχει, ο μηχανισμός θα προσπαθήσει να δημιουργήσει μια μη κρυπτογραφημένη σύνδεση. Εάν δεν θέλετε να χρησιμοποιήσετε τη μη κρυπτογραφημένη έκδοση του πρωτοκόλλου, καθορίστε το SecurityOptions.SSL_AUTO
ρύθμιση. Αυτή η ρύθμιση σάς επιτρέπει επίσης να επιλέξετε ρυθμίσεις διακομιστή, αλλά ελέγχει μόνο κρυπτογραφημένα κανάλια.
Εάν ήταν δυνατή η δημιουργία σύνδεσης με το διακομιστή, τότε γίνεται μια προσπάθεια εξουσιοδότησης. Εάν η εξουσιοδότηση αποτύχει, ο κωδικός σφάλματος αποθηκεύεται για το μέλλον. Ο αντιστοίχιση θα προσπαθήσει να συνδεθεί με άλλους τρόπους. Το μήνυμα θα σταλεί εάν μπορείτε να συνδεθείτε και να συνδεθείτε. Εάν η σύνδεση αποτύχει, ο χρήστης θα λάβει έναν κωδικό σφάλματος εξουσιοδότησης (εάν αποθηκεύτηκε κατά την επιλογή). Έτσι, ο χρήστης θα είναι σε θέση να καταλάβει ότι εισήγαγε λάθος κωδικό πρόσβασης ή έκανε κάποιο άλλο λάθος. Εάν καμία από τις επιλογές για θύρες και τύπους κρυπτογράφησης δεν ταιριάζει και δεν φτάσαμε καν στην προσπάθεια εξουσιοδότησης, ο χρήστης θα λάβει ένα σφάλμα ειδοποιώντας για λανθασμένες ρυθμίσεις διακομιστή.
Παρεμπιπτόντως, θα πρέπει να σημειωθεί ότι το SMTPClient μας (όπως όλοι οι άλλοι πελάτες της βιβλιοθήκης μας) μπορεί να συνδεθεί με το διακομιστή SMTP μέσω ενός διακομιστή μεσολάβησης. Μπορείτε επίσης να καθορίσετε ρυθμίσεις διακομιστή μεσολάβησης κατά την αρχικοποίηση.
Εξουσιοδότηση πελάτη SMTP
Το SmtpClient υποστηρίζει περισσότερα από διαφορετικές μεθόδους σύνδεσης. Υποστηρίζει επίσης διαφορετικές μεθόδους εξουσιοδότησης. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε τον μηχανισμό OAuth. Για να γίνει αυτό, παρέχουμε πολλά εργαλεία ταυτόχρονα.
Πρώτα απ ‘όλα, είναι TokenProvider. Αυτή είναι η κλάση που περιέχει όλα τα απαραίτητα δεδομένα για την αποθήκευση και ανανέωση του διακριτικού OAuth. Σε αυτήν την περίπτωση, πρέπει να εκτελέσετε μόνοι σας την εξουσιοδότηση OAuth και να αποθηκεύσετε όλες τις απαραίτητες πληροφορίες που έχετε λάβει από το διακομιστή OAuth. Το RefreshToken παίζει βασικό ρόλο εδώ. Αυτό είναι ένα πρόσθετο διακριτικό που εκδίδεται από το διακομιστή εξουσιοδότησης, μαζί με το AccessToken. Η διαφορά τους είναι ότι το AccessToken, κατά κανόνα, ισχύει μόνο για ορισμένο χρονικό διάστημα. Ενώ το RefreshToken ισχύει για πολύ περισσότερο ή ακόμα και επ’ αόριστον (έως ότου ο χρήστης το ανακαλέσει). Χάρη στο RefreshToken, η κλάση TokenProvider μπορεί πάντα να ανανεώσει ένα AccessToken εάν το τελευταίο δεν είναι πλέον έγκυρο.
Μια άλλη επιλογή είναι η διεπαφή ITokenProvider. Σε αυτήν την περίπτωση, μπορείτε όχι μόνο να εφαρμόσετε μόνοι σας τον μηχανισμό OAuth, αλλά και να τον περάσετε στο SmtpClient έτσι ώστε να τον χρησιμοποιεί ο ίδιος όπως απαιτείται.
Πρέπει να σημειωθεί ότι ο μηχανισμός OAuth δεν είναι πάντα απαραίτητος. Μερικές φορές είναι πολύ πιο εύκολο να συνδεθείτε με όνομα χρήστη και κωδικό πρόσβασης. Και για αυτό, δεν χρειάζεται να επαναδιαμορφώσετε καθόλου το λογαριασμό ηλεκτρονικού ταχυδρομείου σας, να αρνηθείτε την εξουσιοδότηση δύο παραγόντων κ.λπ. Υπάρχει μια πιο ασφαλής λύση - αυτός είναι ένας ξεχωριστός κωδικός πρόσβασης για την εφαρμογή. Για να επωφεληθείτε από αυτήν τη δυνατότητα, θα πρέπει να εξετάσετε τις ρυθμίσεις του λογαριασμού email σας. Πιθανότατα, ο κωδικός πρόσβασης για την εφαρμογή θα δημιουργηθεί αυτόματα όταν το ρυθμίσετε στο λογαριασμό σας. Μην ξεχάσετε να το αποθηκεύσετε κάπου. Συνιστούμε επίσης να περιορίσετε όσο το δυνατόν περισσότερο τα δικαιώματα της εφαρμογής σας κατά τη διαμόρφωση. Φυσικά, εάν ένας εισβολέας αποκτήσει πρόσβαση σε αυτόν τον κωδικό πρόσβασης, δεν θα είναι σε θέση να προσαρμόσει τον λογαριασμό σας, αλλά μπορεί ακόμα να κάνει πολλά δυσάρεστα πράγματα. Και εδώ δεν μπορείτε να κάνετε τίποτα, επειδή ο κωδικός πρόσβασης είναι το μόνο πράγμα που προστατεύει τα δεδομένα σας από εισβολείς. Σε γενικές γραμμές, το εργαλείο είναι πολύ βολικό, αλλά μειώνει την ασφάλεια του λογαριασμού σας, χρησιμοποιήστε το με δική σας ευθύνη.
Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου μέσω SMTP με C ++
Έτσι, δημιουργείται η σύνδεση με το διακομιστή και η εξουσιοδότηση ήταν επιτυχής. Ήρθε η ώρα να στείλετε επιστολές. Για αποστολή, χρησιμοποιείται ένα αντικείμενο της κλάσης MailMessage. Τεχνικά, μπορείτε απλά να περάσετε όλα τα απαραίτητα δεδομένα στη μέθοδο αποστολής. Αλλά, στην πραγματικότητα, θα εξακολουθούν να συλλέγονται στο αντικείμενο MailMessage. Επιπλέον, χάρη στη δυνατότητα της κλάσης MailMessage να σειριοποιείται στη μορφή EML, έχουμε την απαραίτητη ροή δεδομένων που μπορεί να περάσει στον διακομιστή SMTP μας. Έτσι, δίνουμε στον διακομιστή μια εντολή να στείλει μια επιστολή και να μεταφέρει όλο το περιεχόμενο της επιστολής σε αυτό με τη μορφή δεδομένων κειμένου. Εάν τα δυαδικά δεδομένα μεταδίδονται στο γράμμα, για παράδειγμα, με τη μορφή συνημμένων αρχείων, αυτά τα δεδομένα κωδικοποιούνται σε μορφή Base64 και τα μεταδεδομένα της επιστολής υποδεικνύουν ότι ο παραλήπτης θα πρέπει να το αποκωδικοποιήσει ξανά. Ο διακομιστής SMTP μπορεί να ελέγξει την ορθότητα του ληφθέντος μηνύματος (για παράδειγμα, ελέγξτε το πεδίο FROM με το λογαριασμό του αποστολέα στο διακομιστή), καθώς και να συμπληρώσει τα μεταδεδομένα του μηνύματος κατά την κρίση του. Στη συνέχεια, ο διακομιστής θα στείλει το μήνυμα ηλεκτρονικού ταχυδρομείου στους παραλήπτες, μια λίστα του οποίου θα λάβει επίσης από τα μεταδεδομένα του email.