forked from nette/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path@home.texy
318 lines (228 loc) · 15.9 KB
/
@home.texy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
Αποστολή emails
***************
<div class=perex>
Σκοπεύετε να στέλνετε μηνύματα ηλεκτρονικού ταχυδρομείου, όπως ενημερωτικά δελτία ή επιβεβαιώσεις παραγγελιών; Το Nette Framework παρέχει τα απαραίτητα εργαλεία με ένα πολύ ωραίο API. Θα σας δείξουμε:
- πώς να δημιουργήσετε ένα email, συμπεριλαμβανομένων των συνημμένων αρχείων
- πώς να το στείλετε
- πώς να συνδυάζετε μηνύματα ηλεκτρονικού ταχυδρομείου και πρότυπα
</div>
Εγκατάσταση .[#toc-installation]
================================
Κατεβάστε και εγκαταστήστε το πακέτο χρησιμοποιώντας το [Composer |best-practices:composer]:
```shell
composer require nette/mail
```
Composer: Δημιουργία μηνυμάτων ηλεκτρονικού ταχυδρομείου .[#toc-creating-emails]
================================================================================
Το ηλεκτρονικό ταχυδρομείο είναι ένα αντικείμενο [api:Nette\Mail\Message]:
```php
$mail = new Nette\Mail\Message;
$mail->setFrom('John <[email protected]>')
->addTo('[email protected]')
->addTo('[email protected]')
->setSubject('Order Confirmation')
->setBody("Hello, Your order has been accepted.");
```
Όλες οι παράμετροι πρέπει να είναι κωδικοποιημένες σε UTF-8.
Εκτός από τον προσδιορισμό των παραληπτών με τη μέθοδο `addTo()`, μπορείτε επίσης να προσδιορίσετε τον παραλήπτη της αντιγραφής με τη μέθοδο `addCc()` ή τον παραλήπτη της τυφλής αντιγραφής με τη μέθοδο `addBcc()`. Όλες αυτές οι μέθοδοι, συμπεριλαμβανομένου του `setFrom()`, δέχονται τον παραλήπτη με τρεις τρόπους:
```php
$mail->setFrom('[email protected]');
$mail->setFrom('[email protected]', 'John Doe');
$mail->setFrom('John Doe <[email protected]>');
```
Το σώμα ενός ηλεκτρονικού ταχυδρομείου γραμμένου σε HTML περνάει με τη μέθοδο `setHtmlBody()`:
```php
$mail->setHtmlBody('<p>Hello,</p><p>Your order has been accepted.</p>');
```
Η Nette θα το δημιουργήσει αυτόματα για εσάς. Και αν το μήνυμα ηλεκτρονικού ταχυδρομείου δεν έχει οριστεί θέμα, αυτό θα ληφθεί από το αρχείο `<title>` στοιχείο.
Οι εικόνες μπορούν επίσης να εισαχθούν εξαιρετικά εύκολα στο σώμα HTML ενός email. Απλώς περάστε τη διαδρομή όπου βρίσκονται φυσικά οι εικόνες ως δεύτερη παράμετρο και η Nette θα τις συμπεριλάβει αυτόματα στο email:
```php
// προσθέτει αυτόματα το /path/to/images/background.gif στο email
$mail->setHtmlBody(
'<b>Hello</b> <img src="background.gif">',
'/path/to/images',
);
```
Ο αλγόριθμος ενσωμάτωσης εικόνων υποστηρίζει τα ακόλουθα πρότυπα: `<img src=...>`, `<body background=...>`, `url(...)` μέσα στο χαρακτηριστικό HTML `style` και ειδική σύνταξη `[[...]]`.
Μπορεί η αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου να γίνει ακόμη πιο εύκολη;
Τα ηλεκτρονικά μηνύματα είναι σαν τις καρτ ποστάλ. Ποτέ μην στέλνετε κωδικούς πρόσβασης ή άλλα διαπιστευτήρια μέσω ηλεκτρονικού ταχυδρομείου. .[tip]
Συνημμένα αρχεία .[#toc-attachments]
------------------------------------
Μπορείτε, φυσικά, να επισυνάπτετε συνημμένα αρχεία στο ηλεκτρονικό ταχυδρομείο. Χρησιμοποιήστε το `addAttachment(string $file, string $content = null, string $contentType = null)`.
```php
// εισάγει το αρχείο /path/to/example.zip στο email με το όνομα example.zip
$mail->addAttachment('/path/to/example.zip');
// εισάγει το αρχείο /path/to/example.zip στο email με το όνομα info.zip
$mail->addAttachment('info.zip', file_get_contents('/path/to/example.zip'));
// επισυνάπτει τα περιεχόμενα του νέου αρχείου example.txt "Hello John!"
$mail->addAttachment('example.txt', 'Hello John!');
```
Πρότυπα .[#toc-templates]
-------------------------
Εάν στέλνετε μηνύματα ηλεκτρονικού ταχυδρομείου HTML, είναι μια πολύ καλή ιδέα να τα γράψετε στο σύστημα προτύπων [Latte |latte:]. Πώς να το κάνετε;
```php
$latte = new Latte\Engine;
$params = [
'orderId' => 123,
];
$mail = new Nette\Mail\Message;
$mail->setFrom('John <[email protected]>')
->addTo('[email protected]')
->setHtmlBody(
$latte->renderToString('/path/to/email.latte', $params),
'/path/to/images',
);
```
Αρχείο `email.latte`:
```latte
<html>
<head>
<meta charset="utf-8">
<title>Order Confirmation</title>
<style>
body {
background: url("background.png")
}
</style>
</head>
<body>
<p>Hello,</p>
<p>Your order number {$orderId} has been accepted.</p>
</body>
</html>
```
Η Nette εισάγει αυτόματα όλες τις εικόνες, θέτει το θέμα σύμφωνα με το `<title>` στοιχείο, και δημιουργεί εναλλακτικό κείμενο για το σώμα της HTML.
Χρήση στην εφαρμογή Nette .[#toc-using-in-nette-application]
------------------------------------------------------------
Εάν χρησιμοποιείτε e-mail μαζί με το Nette Application, δηλαδή παρουσιαστές, ίσως θελήσετε να δημιουργήσετε συνδέσμους σε πρότυπα χρησιμοποιώντας το χαρακτηριστικό `n:href` ή την ετικέτα `{link}`. Το Latte βασικά δεν τα γνωρίζει, αλλά είναι πολύ εύκολο να τα προσθέσετε. Η δημιουργία συνδέσμων μπορεί να κάνει το αντικείμενο `Nette\Application\LinkGenerator`, το οποίο παίρνετε περνώντας το με τη χρήση [dependency injection |dependency-injection:passing-dependencies].
```php
use Nette;
class MailSender
{
public function __construct(
private Nette\Application\LinkGenerator $linkGenerator,
private Nette\Bridges\ApplicationLatte\TemplateFactory $templateFactory,
) {
}
private function createTemplate(): Nette\Application\UI\Template
{
$template = $this->templateFactory->createTemplate();
$template->getLatte()->addProvider('uiControl', $this->linkGenerator);
return $template;
}
public function createEmail(): Nette\Mail\Message
{
$template = $this->createTemplate();
$html = $template->renderToString('/path/to/email.latte', $params);
$mail = new Nette\Mail\Message;
$mail->setHtmlBody($html);
// ...
return $mail;
}
}
```
Στο πρότυπο, ο σύνδεσμος δημιουργείται όπως σε ένα κανονικό πρότυπο. Όλοι οι σύνδεσμοι που δημιουργούνται μέσω του LinkGenerator είναι απόλυτοι:
```latte
<a n:href="Presenter:action">Link</a>
```
Αποστολή Emails .[#toc-sending-emails]
======================================
Ο Mailer είναι η κατηγορία που είναι υπεύθυνη για την αποστολή emails. Υλοποιεί τη διεπαφή [api:Nette\Mail\Mailer] και υπάρχουν αρκετοί έτοιμοι mailers τους οποίους θα παρουσιάσουμε.
Το πλαίσιο προσθέτει αυτόματα μια υπηρεσία `Nette\Mail\Mailer` με βάση τη [διαμόρφωση |#Configuring] στο DI container, την οποία παίρνετε περνώντας την χρησιμοποιώντας [dependency injection |dependency-injection:passing-dependencies].
SendmailMailer .[#toc-sendmailmailer]
-------------------------------------
Ο προεπιλεγμένος αποστολέας είναι ο SendmailMailer που χρησιμοποιεί τη συνάρτηση PHP [php:mail]. Παράδειγμα χρήσης:
```php
$mailer = new Nette\Mail\SendmailMailer;
$mailer->send($mail);
```
Αν θέλετε να ορίσετε το `returnPath` και ο διακομιστής εξακολουθεί να το αντικαθιστά, χρησιμοποιήστε το `$mailer->commandArgs = '[email protected]'`.
SmtpMailer .[#toc-smtpmailer]
-----------------------------
Για να στείλετε μήνυμα μέσω του διακομιστή SMTP, χρησιμοποιήστε το `SmtpMailer`.
```php
$mailer = new Nette\Mail\SmtpMailer(
host: 'smtp.gmail.com',
username: '[email protected]',
password: '*****',
encryption: 'ssl',
);
$mailer->send($mail);
```
Οι ακόλουθες πρόσθετες παράμετροι μπορούν να περάσουν στον κατασκευαστή:
* `port` - εάν δεν οριστεί, θα χρησιμοποιηθεί η προεπιλεγμένη τιμή 25 ή 465 για το `ssl`.
* `timeout` - χρονικό όριο για τη σύνδεση SMTP
* `persistent` - χρήση μόνιμης σύνδεσης
* `clientHost` - ονομασία πελάτη
* `streamOptions` - σας επιτρέπει να ορίσετε "SSL context options":https://www.php.net/manual/en/context.ssl.php για τη σύνδεση
FallbackMailer .[#toc-fallbackmailer]
-------------------------------------
Δεν στέλνει μηνύματα ηλεκτρονικού ταχυδρομείου αλλά τα αποστέλλει μέσω ενός συνόλου αποστολέων αλληλογραφίας. Εάν ένας αποστολέας αποτύχει, επαναλαμβάνει την προσπάθεια στον επόμενο. Εάν ο τελευταίος αποτύχει, ξεκινά ξανά από τον πρώτο.
```php
$mailer = new Nette\Mail\FallbackMailer([
$smtpMailer,
$backupSmtpMailer,
$sendmailMailer,
]);
$mailer->send($mail);
```
Άλλες παράμετροι στον κατασκευαστή περιλαμβάνουν τον αριθμό των επαναλήψεων και το χρόνο αναμονής σε χιλιοστά του δευτερολέπτου.
DKIM .[#toc-dkim]
=================
Το DKIM (DomainKeys Identified Mail) είναι μια αξιόπιστη τεχνολογία ηλεκτρονικού ταχυδρομείου που βοηθά επίσης στον εντοπισμό παραποιημένων μηνυμάτων. Το μήνυμα που αποστέλλεται υπογράφεται με το ιδιωτικό κλειδί του τομέα του αποστολέα και η υπογραφή αυτή αποθηκεύεται στην επικεφαλίδα του ηλεκτρονικού ταχυδρομείου.
Ο διακομιστής του παραλήπτη συγκρίνει αυτή την υπογραφή με το δημόσιο κλειδί που είναι αποθηκευμένο στις εγγραφές DNS του τομέα. Με την αντιστοίχιση της υπογραφής αποδεικνύεται ότι το μήνυμα ηλεκτρονικού ταχυδρομείου προέρχεται πράγματι από τον τομέα του αποστολέα και ότι το μήνυμα δεν τροποποιήθηκε κατά τη διάρκεια της μετάδοσης του μηνύματος.
Μπορείτε να ρυθμίσετε το mailer να υπογράφει τα μηνύματα ηλεκτρονικού ταχυδρομείου στη [ρύθμιση παραμέτρων |#Configuring]. Εάν δεν χρησιμοποιείτε την έγχυση εξάρτησης, χρησιμοποιείται ως εξής:
```php
$signer = new Nette\Mail\DkimSigner(
domain: 'nette.org',
selector: 'dkim',
privateKey: file_get_contents('../dkim/dkim.key'),
passPhrase: '****',
);
$mailer = new Nette\Mail\SendmailMailer; // ή SmtpMailer
$mailer->setSigner($signer);
$mailer->send($mail);
```
Διαμόρφωση του .[#toc-configuring]
==================================
Επισκόπηση των επιλογών διαμόρφωσης για το Nette Mail. Αν δεν χρησιμοποιείτε ολόκληρο το πλαίσιο, αλλά μόνο αυτή τη βιβλιοθήκη, διαβάστε [πώς να φορτώσετε τη διαμόρφωση |bootstrap:].
Από προεπιλογή, για την αποστολή μηνυμάτων ηλεκτρονικού ταχυδρομείου χρησιμοποιείται ο αποστολέας `Nette\Mail\SendmailMailer`, ο οποίος δεν ρυθμίζεται περαιτέρω. Ωστόσο, μπορούμε να το αλλάξουμε σε `Nette\Mail\SmtpMailer`:
```neon
mail:
# χρήση SmtpMailer
smtp: true # (bool) προεπιλογή σε false
host: ... # (string)
port: ... # (int)
username: ... # (string)
password: ... # (string)
timeout: ... # (int)
encryption: ... # (ssl|tls|null) προεπιλογή null (έχει ψευδώνυμο 'secure')
clientHost: ... # (string) προεπιλογή σε $_SERVER['HTTP_HOST']
persistent: ... # (bool) προεπιλογή σε false
# πλαίσιο για τη σύνδεση με τον διακομιστή SMTP, προεπιλογή stream_context_get_default()
context:
ssl: # όλες οι επιλογές στη διεύθυνση https://www.php.net/manual/en/context.ssl.php
allow_self_signed: ...
...
http: # Όλες οι επιλογές στη διεύθυνση https://www.php.net/manual/en/context.http.php
header: ...
...
```
Μπορείτε να απενεργοποιήσετε τον έλεγχο ταυτότητας πιστοποιητικού SSL χρησιμοποιώντας την επιλογή `context › ssl › verify_peer: false`. Συνιστάται **απολύτως να μην το κάνετε** αυτό, καθώς θα καταστήσει την εφαρμογή ευάλωτη. Αντ' αυτού, "προσθέστε πιστοποιητικά στο κατάστημα εμπιστοσύνης":https://www.php.net/manual/en/openssl.configuration.php.
Για να αυξήσουμε την αξιοπιστία, μπορούμε να υπογράψουμε τα μηνύματα ηλεκτρονικού ταχυδρομείου χρησιμοποιώντας την [τεχνολογία DKIM |https://blog.nette.org/el/ypographe-menymaton-elektronikou-tachydromeiou-me-dkim]:
```neon
mail:
dkim:
domain: myweb.com
selector: lovenette
privateKey: %appDir%/cert/dkim.priv
passPhrase: ...
```
Υπηρεσίες DI .[#toc-di-services]
================================
Αυτές οι υπηρεσίες προστίθενται στο δοχείο DI:
| Όνομα | Τύπος | Περιγραφή
|-----------------------------------------------------
| `mail.mailer`| [api:Nette\Mail\Mailer] | [κλάση αποστολής ηλεκτρονικού ταχυδρομείου |#Sending Emails]
| `mail.signer`| [api:Nette\Mail\Signer] | [Υπογραφή DKIM |#DKIM]
{{leftbar: nette:@menu-topics}}