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