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