aboutsummaryrefslogtreecommitdiff
path: root/src/bdrem/Renderer/Mail.php
blob: 4b1c8d7ae4cd5e186e5e327aa9baa9d48901ba44 (plain)
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
<?php
namespace bdrem;

require_once 'Mail/mime.php';

class Renderer_Mail extends Renderer
{
    public function render($arEvents)
    {
        $todays = array();
        foreach ($arEvents as $event) {
            if ($event->days == 0) {
                $todays[] = $this->shorten($event->title, 15);
            }
        }
        $subject = 'Birthday reminder';
        if (count($todays)) {
            $subject .= ': ' . implode(', ', $todays);
        }

        $rc = new Renderer_Console();
        $rh = new Renderer_Html();

        $hdrs = array(
            'From'    => $this->config->get('mail_from', 'birthday@example.org'),
            'Subject' => $subject
        );
        $mime = new \Mail_mime(
            array(
                'eol' => "\n",
                'head_charset' => 'utf-8',
                'text_charset' => 'utf-8',
                'html_charset' => 'utf-8',
            )
        );

        $mime->setTXTBody($rc->render($arEvents));
        $mime->setHTMLBody($rh->render($arEvents));

        $body = $mime->get();
        $hdrs = $mime->headers($hdrs);
        $textHeaders = '';
        foreach ($hdrs as $k => $v) {
            $textHeaders .= $k . ':' . $v  . "\n";
        }

        foreach ((array) $this->config->get('mail_to') as $recipient) {
            mail($recipient, $subject, $body, $textHeaders);
        }
    }

    protected function shorten($str, $len)
    {
        if (mb_strlen($str) <= $len) {
            return $str;
        }

        return mb_substr($str, 0, $len - 1) . '…';
    }
}
?>