Αποστολή emails
Σκοπεύετε να στέλνετε μηνύματα ηλεκτρονικού ταχυδρομείου, όπως ενημερωτικά δελτία ή επιβεβαιώσεις παραγγελιών; Το Nette Framework παρέχει τα απαραίτητα εργαλεία με ένα πολύ ωραίο API. Θα σας δείξουμε:
- πώς να δημιουργήσετε ένα email, συμπεριλαμβανομένων των συνημμένων αρχείων
- πώς να το στείλετε
- πώς να συνδυάζετε μηνύματα ηλεκτρονικού ταχυδρομείου και πρότυπα
Εγκατάσταση
Κατεβάστε και εγκαταστήστε το πακέτο χρησιμοποιώντας το Composer:
Composer: Δημιουργία μηνυμάτων ηλεκτρονικού ταχυδρομείου
Το ηλεκτρονικό ταχυδρομείο είναι ένα αντικείμενο Nette\Mail\Message:
Όλες οι παράμετροι πρέπει να είναι κωδικοποιημένες σε UTF-8.
Εκτός από τον προσδιορισμό των παραληπτών με τη μέθοδο addTo()
,
μπορείτε επίσης να προσδιορίσετε τον παραλήπτη της αντιγραφής με τη
μέθοδο addCc()
ή τον παραλήπτη της τυφλής αντιγραφής με τη μέθοδο
addBcc()
. Όλες αυτές οι μέθοδοι, συμπεριλαμβανομένου του
setFrom()
, δέχονται τον παραλήπτη με τρεις τρόπους:
Το σώμα ενός ηλεκτρονικού ταχυδρομείου γραμμένου σε HTML περνάει με τη
μέθοδο setHtmlBody()
:
Η Nette θα το δημιουργήσει αυτόματα για εσάς. Και αν το μήνυμα
ηλεκτρονικού ταχυδρομείου δεν έχει οριστεί θέμα, αυτό θα ληφθεί από το
αρχείο <title>
στοιχείο.
Οι εικόνες μπορούν επίσης να εισαχθούν εξαιρετικά εύκολα στο σώμα HTML ενός email. Απλώς περάστε τη διαδρομή όπου βρίσκονται φυσικά οι εικόνες ως δεύτερη παράμετρο και η Nette θα τις συμπεριλάβει αυτόματα στο email:
Ο αλγόριθμος ενσωμάτωσης εικόνων υποστηρίζει τα ακόλουθα πρότυπα:
<img src=...>
, <body background=...>
, url(...)
μέσα στο
χαρακτηριστικό HTML style
και ειδική σύνταξη [[...]]
.
Μπορεί η αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου να γίνει ακόμη πιο εύκολη;
Τα ηλεκτρονικά μηνύματα είναι σαν τις καρτ ποστάλ. Ποτέ μην στέλνετε κωδικούς πρόσβασης ή άλλα διαπιστευτήρια μέσω ηλεκτρονικού ταχυδρομείου.
Συνημμένα αρχεία
Μπορείτε, φυσικά, να επισυνάπτετε συνημμένα αρχεία στο ηλεκτρονικό
ταχυδρομείο. Χρησιμοποιήστε το
addAttachment(string $file, ?string $content = null, ?string $contentType = null)
.
Πρότυπα
Εάν στέλνετε μηνύματα ηλεκτρονικού ταχυδρομείου HTML, είναι μια πολύ καλή ιδέα να τα γράψετε στο σύστημα προτύπων Latte. Πώς να το κάνετε;
Αρχείο email.latte
:
Η Nette εισάγει αυτόματα όλες τις εικόνες, θέτει το θέμα σύμφωνα με το
<title>
στοιχείο, και δημιουργεί εναλλακτικό κείμενο για το
σώμα της HTML.
Χρήση στην εφαρμογή Nette
Εάν χρησιμοποιείτε e-mail μαζί με το Nette Application, δηλαδή παρουσιαστές,
ίσως θελήσετε να δημιουργήσετε συνδέσμους σε πρότυπα χρησιμοποιώντας
το χαρακτηριστικό n:href
ή την ετικέτα {link}
. Το Latte βασικά δεν
τα γνωρίζει, αλλά είναι πολύ εύκολο να τα προσθέσετε. Η δημιουργία
συνδέσμων μπορεί να κάνει το αντικείμενο Nette\Application\LinkGenerator
, το
οποίο παίρνετε περνώντας το με τη χρήση dependency injection.
Στο πρότυπο, ο σύνδεσμος δημιουργείται όπως σε ένα κανονικό πρότυπο. Όλοι οι σύνδεσμοι που δημιουργούνται μέσω του LinkGenerator είναι απόλυτοι:
Αποστολή Emails
Ο Mailer είναι η κατηγορία που είναι υπεύθυνη για την αποστολή emails. Υλοποιεί τη διεπαφή Nette\Mail\Mailer και υπάρχουν αρκετοί έτοιμοι mailers τους οποίους θα παρουσιάσουμε.
Το πλαίσιο προσθέτει αυτόματα μια υπηρεσία Nette\Mail\Mailer
με βάση
τη διαμόρφωση στο DI container, την οποία παίρνετε
περνώντας την χρησιμοποιώντας dependency
injection.
SendmailMailer
Ο προεπιλεγμένος αποστολέας είναι ο SendmailMailer που χρησιμοποιεί τη συνάρτηση PHP mail. Παράδειγμα χρήσης:
Αν θέλετε να ορίσετε το returnPath
και ο διακομιστής εξακολουθεί να
το αντικαθιστά, χρησιμοποιήστε το $mailer->commandArgs = '-fmy@email.com'
.
SmtpMailer
Για να στείλετε μήνυμα μέσω του διακομιστή SMTP, χρησιμοποιήστε το
SmtpMailer
.
Οι ακόλουθες πρόσθετες παράμετροι μπορούν να περάσουν στον κατασκευαστή:
port
– εάν δεν οριστεί, θα χρησιμοποιηθεί η προεπιλεγμένη τιμή 25 ή 465 για τοssl
.timeout
– χρονικό όριο για τη σύνδεση SMTPpersistent
– χρήση μόνιμης σύνδεσηςclientHost
– ονομασία πελάτηstreamOptions
– σας επιτρέπει να ορίσετε SSL context options για τη σύνδεση
FallbackMailer
Δεν στέλνει μηνύματα ηλεκτρονικού ταχυδρομείου αλλά τα αποστέλλει μέσω ενός συνόλου αποστολέων αλληλογραφίας. Εάν ένας αποστολέας αποτύχει, επαναλαμβάνει την προσπάθεια στον επόμενο. Εάν ο τελευταίος αποτύχει, ξεκινά ξανά από τον πρώτο.
Άλλες παράμετροι στον κατασκευαστή περιλαμβάνουν τον αριθμό των επαναλήψεων και το χρόνο αναμονής σε χιλιοστά του δευτερολέπτου.
DKIM
Το DKIM (DomainKeys Identified Mail) είναι μια αξιόπιστη τεχνολογία ηλεκτρονικού ταχυδρομείου που βοηθά επίσης στον εντοπισμό παραποιημένων μηνυμάτων. Το μήνυμα που αποστέλλεται υπογράφεται με το ιδιωτικό κλειδί του τομέα του αποστολέα και η υπογραφή αυτή αποθηκεύεται στην επικεφαλίδα του ηλεκτρονικού ταχυδρομείου. Ο διακομιστής του παραλήπτη συγκρίνει αυτή την υπογραφή με το δημόσιο κλειδί που είναι αποθηκευμένο στις εγγραφές DNS του τομέα. Με την αντιστοίχιση της υπογραφής αποδεικνύεται ότι το μήνυμα ηλεκτρονικού ταχυδρομείου προέρχεται πράγματι από τον τομέα του αποστολέα και ότι το μήνυμα δεν τροποποιήθηκε κατά τη διάρκεια της μετάδοσης του μηνύματος.
Μπορείτε να ρυθμίσετε το mailer να υπογράφει τα μηνύματα ηλεκτρονικού ταχυδρομείου στη ρύθμιση παραμέτρων. Εάν δεν χρησιμοποιείτε την έγχυση εξάρτησης, χρησιμοποιείται ως εξής:
Διαμόρφωση του
Επισκόπηση των επιλογών διαμόρφωσης για το Nette Mail. Αν δεν χρησιμοποιείτε ολόκληρο το πλαίσιο, αλλά μόνο αυτή τη βιβλιοθήκη, διαβάστε πώς να φορτώσετε τη διαμόρφωση.
Από προεπιλογή, για την αποστολή μηνυμάτων ηλεκτρονικού
ταχυδρομείου χρησιμοποιείται ο αποστολέας Nette\Mail\SendmailMailer
, ο
οποίος δεν ρυθμίζεται περαιτέρω. Ωστόσο, μπορούμε να το αλλάξουμε σε
Nette\Mail\SmtpMailer
:
Μπορείτε να απενεργοποιήσετε τον έλεγχο ταυτότητας πιστοποιητικού
SSL χρησιμοποιώντας την επιλογή context › ssl › verify_peer: false
. Συνιστάται
απολύτως να μην το κάνετε αυτό, καθώς θα καταστήσει την εφαρμογή
ευάλωτη. Αντ' αυτού, προσθέστε
πιστοποιητικά στο κατάστημα εμπιστοσύνης.
Για να αυξήσουμε την αξιοπιστία, μπορούμε να υπογράψουμε τα μηνύματα ηλεκτρονικού ταχυδρομείου χρησιμοποιώντας την τεχνολογία DKIM:
Υπηρεσίες DI
Αυτές οι υπηρεσίες προστίθενται στο δοχείο DI:
Όνομα | Τύπος | Περιγραφή |
---|---|---|
mail.mailer |
Nette\Mail\Mailer | κλάση αποστολής ηλεκτρονικού ταχυδρομείου |
mail.signer |
Nette\Mail\Signer | Υπογραφή DKIM |