1
+ <?php
2
+
3
+ namespace Ddrv \Mailer \Transport ;
4
+
5
+ use Ddrv \Mailer \Message ;
6
+
7
+ final class File implements TransportInterface
8
+ {
9
+ /**
10
+ * @var callable
11
+ */
12
+ private $ logger ;
13
+
14
+ /**
15
+ * @var string
16
+ */
17
+ private $ dir ;
18
+
19
+ /**
20
+ * @var string
21
+ */
22
+ private $ sender ;
23
+
24
+ public function __construct ($ sender , $ dir )
25
+ {
26
+ $ this ->sender = $ sender ;
27
+ if (!is_dir ($ dir )) mkdir ($ dir , 0775 , true );
28
+ $ this ->dir = $ dir ;
29
+ }
30
+
31
+ public function send (Message $ message , $ recipients )
32
+ {
33
+ $ content = "{$ message ->getHeadersLine ()}\r\n\r\n{$ message ->getBody ()}" ;
34
+ if (is_callable ($ this ->logger )) {
35
+ $ logger = $ this ->logger ;
36
+ $ logger ($ content );
37
+ }
38
+ foreach ($ recipients as $ email ) {
39
+ $ arr = explode ("@ " , $ email );
40
+ $ user = $ arr [0 ];
41
+ $ host = $ arr [1 ];
42
+ $ dir = implode (DIRECTORY_SEPARATOR , array ($ this ->dir , $ host , $ user ));
43
+ if (!is_dir ($ dir )) mkdir ($ dir , 0775 , true );
44
+ $ num = 1 ;
45
+ do {
46
+ $ prefix = "mail_ " . date (DATE_ATOM );
47
+ $ suffix = str_pad ($ num , 3 , "0 " , STR_PAD_LEFT );
48
+ $ file = implode (DIRECTORY_SEPARATOR , array ($ dir , "{$ prefix }_ {$ suffix }.eml " ));
49
+ $ num ++;
50
+ } while (is_file ($ file ));
51
+ file_put_contents ($ file , $ content );
52
+ }
53
+ return true ;
54
+ }
55
+
56
+ public function getSender ()
57
+ {
58
+ return $ this ->sender ;
59
+ }
60
+
61
+ public function setLogger (callable $ logger )
62
+ {
63
+ $ this ->logger = $ logger ;
64
+ }
65
+ }
0 commit comments