Αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου με συνημμένα χρησιμοποιώντας Delphi & Indy

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

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

Αποστολή ηλεκτρονικού ταχυδρομείου από τους Δελφούς

Υπάρχουν πολλοί τρόποι με τους οποίους μπορείτε να στείλετε ένα μήνυμα ηλεκτρονικού ταχυδρομείου απευθείας από τους Δελφούς, αλλά ο απλούστερος τρόπος είναι να χρησιμοποιήσετε το ShellExecute API. Αυτό θα στείλει το μήνυμα ηλεκτρονικού ταχυδρομείου χρησιμοποιώντας το προεπιλεγμένο πρόγραμμα-πελάτη ηλεκτρονικού ταχυδρομείου εγκατεστημένο στον υπολογιστή. Παρόλο που αυτή η προσέγγιση είναι αποδεκτή, δεν μπορείτε να στείλετε συνημμένα με αυτόν τον τρόπο.

instagram viewer

Μια άλλη τεχνική χρησιμοποιεί το Microsoft Outlook και OLE για να στείλει το μήνυμα ηλεκτρονικού ταχυδρομείου αυτή τη φορά με αλλά η MS Outlook πρέπει να χρησιμοποιηθεί.

Ακόμη μια άλλη επιλογή είναι να χρησιμοποιήσετε την ενσωματωμένη υποστήριξη του Delphi για το API των Windows Simple Mail. Αυτό λειτουργεί μόνο αν ο χρήστης έχει εγκατεστημένο πρόγραμμα ηλεκτρονικού ταχυδρομείου συμβατό με το MAPI.

Η τεχνική που συζητάμε εδώ χρησιμοποιεί Indy (Internet Direct) - μια μεγάλη σουίτα διαδικτυακού στοιχείου που αποτελείται από δημοφιλή πρωτόκολλα διαδικτύου γραμμένα στους Δελφούς και βασισμένα σε υποδοχές αποκλεισμού.

Η μέθοδος TIdSMTP (Indy)

Η αποστολή (ή η ανάκτηση) μηνυμάτων ηλεκτρονικού ταχυδρομείου με τα στοιχεία Indy (τα οποία παρέχονται με τους Delphi 6+) είναι τόσο εύκολη όσο η απόρριψη ενός ή δύο εξαρτημάτων σε μια φόρμα, ο ορισμός ορισμένων ιδιοτήτων και "κάνοντας κλικ σε ένα κουμπί".

Για να στείλετε ένα μήνυμα ηλεκτρονικού ταχυδρομείου με συνημμένα από τους Δελφούς χρησιμοποιώντας το Indy, θα χρειαστούμε δύο στοιχεία. Πρώτον, το TIdSMTOP χρησιμοποιείται για τη σύνδεση και την επικοινωνία (αποστολή αλληλογραφίας) με ένα διακομιστή SMTP. Δεύτερον, το TIdMessage χειρίζεται την αποθήκευση και την κωδικοποίηση των μηνυμάτων.

Όταν το μήνυμα κατασκευάζεται (όταν TIdMessage "συμπληρώνεται" με δεδομένα), το μήνυμα ηλεκτρονικού ταχυδρομείου παραδίδεται σε ένα διακομιστή SMTP χρησιμοποιώντας το TIdSMTP.

Κωδικός προέλευσης αποστολέα ηλεκτρονικού ταχυδρομείου

Δημιούργησα ένα απλό πρόγραμμα αποστολής μηνυμάτων που εξηγώ παρακάτω. Μπορείτε να κατεβάσετε τον πλήρη πηγαίο κώδικα εδώ.

Σημείωση: Αυτός ο σύνδεσμος είναι μια άμεση λήψη στο αρχείο ZIP για το έργο. Θα πρέπει να μπορείτε να το ανοίξετε χωρίς προβλήματα, αλλά αν δεν μπορείτε, χρησιμοποιήστε 7-Zip για να ανοίξετε το αρχείο, ώστε να μπορείτε να εξαγάγετε τα αρχεία του έργου (τα οποία είναι αποθηκευμένα σε ένα φάκελο που ονομάζεται ΑποστολήMail).

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

Εδώ είναι ο κώδικας που χειρίζεται την αποστολή ενός email με ένα συνημμένο:

διαδικασία TMailerForm.btnSendMailClick (αποστολέας: TObject); ξεκινήσει StatusMemo. Σαφή; // εγκατάσταση SMTP SMTP.Host: = ledHost. Κείμενο; SMTP.Port: = 25; // να ρυθμίσετε το μήνυμα ηλεκτρονικού ταχυδρομείου MailMessage. Από. Διεύθυνση: = ledFrom. Κείμενο; MailMessage. Παραλήπτες. EMailAddresses: = ledTo. Κείμενο + ',' + ledCC.Text; MailMessage. Θέμα: = ledSubject. Κείμενο; MailMessage. Σώμα. Κείμενο: = Σώμα. Κείμενο; αν FileExists (ledAttachment. Κείμενο) έπειτα TIdAttachment. Δημιουργία (MailMessage. MessageParts, ledAttachment. Κείμενο); // αποστολή αλληλογραφίαςδοκιμάστεδοκιμάστε SMTP.Σύνδεση (1000); SMTP.Send (MailMessage); εκτόςεπί E: Εξαίρεση κάνει. StatusMemo. Γραμμές. Εισαγωγή (0, 'ERROR:' + E.Message); τέλος; τελικάαν SMTP.Συνδεδεμένο έπειτα SMTP.Disconnect; τέλος; τέλος; (* κλικ btnSendMail *)

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