Initial repo created
[timetracker.git] / WEB-INF / lib / mail / Mailer.class.php
1 <?php
2 // License here
3
4 class Mailer {
5         var $mSendType;
6         var $mCharSet = "iso-8859-1";
7         var $mContentType = "text/plain";
8         var $mSender;
9         var $mReceiver;
10         var $mReceiverCC;
11
12     function Mailer($type='standard') {
13         $this->mSendType = $type;
14     }
15
16     function setSendType($value) {
17         $this->mSendType = $value;
18     }
19
20     function setCharSet($value) {
21         $this->mCharSet = $value;
22     }
23
24     function setContentType($value) {
25         $this->mContentType = $value;
26     }
27
28     function setReceiver($value) {
29         $this->mReceiver = $value;
30     }
31
32     function setReceiverCC($value) {
33         $this->mReceiverCC = $value;
34     }
35
36     function setSender($value) {
37         $this->mSender = $value;
38     }
39
40     function send($subject, $data) {
41         $data = chunk_split(base64_encode($data));
42         $subject = Mailer::mimeEncode($subject, $this->mCharSet);
43
44         $headers = array(
45                 'From' => $this->mSender,
46                 'To' => $this->mReceiver);
47         if (isset($this->mReceiverCC)) $headers = array_merge($headers, array(
48                 'CC' => $this->mReceiverCC));
49         $headers = array_merge($headers, array(
50                 'Subject' => $subject,
51                 'MIME-Version' => '1.0',
52                 'Content-Type' => $this->mContentType.'; charset='.$this->mCharSet,
53                 'Content-Transfer-Encoding' => 'BASE64',
54         ));
55
56         // PEAR::Mail
57         require_once('Mail.php');
58
59         $recipients = $this->mReceiver;
60         switch ($this->mSendType) {
61                 case 'mail':
62                                         $mail = Mail::factory('mail');
63                         break;
64
65                 case "smtp":
66                         // Mail_smtp does not do CC -> recipients conversion
67                         if (!empty($this->mReceiverCC)) {
68                                 // make exactly one space after a comma
69                                 $recipients .= ', ' . preg_replace('/,[[:space:]]+/', ', ', $this->mReceiverCC);;
70                         }
71                         
72                         $host = defined('MAIL_SMTP_HOST') ? MAIL_SMTP_HOST : 'localhost';
73                         $port = defined('MAIL_SMTP_PORT') ? MAIL_SMTP_PORT : '25';
74                         $username = defined('MAIL_SMTP_USER') ? MAIL_SMTP_USER : null;
75                         $password = defined('MAIL_SMTP_PASSWORD') ? MAIL_SMTP_PASSWORD : null;
76                         $auth = (defined('MAIL_SMTP_AUTH') && isTrue(MAIL_SMTP_AUTH)) ? true : false;
77                         $debug = (defined('MAIL_SMTP_DEBUG') && isTrue(MAIL_SMTP_DEBUG)) ? true : false;
78                                                 
79                         $mail = Mail::factory('smtp', array ('host' => $host,
80                           'port' => $port,
81                           'username' => $username,
82                           'password' => $password,
83                           'auth' => $auth,
84                           'debug' => $debug));
85                         break;
86         }
87         
88         if (defined('MAIL_SMTP_DEBUG') && isTrue(MAIL_SMTP_DEBUG))
89           PEAR::setErrorHandling(PEAR_ERROR_PRINT);
90         $res = $mail->send($recipients, $headers, $data);
91         return (!is_a($res, 'PEAR_Error'));
92     }
93
94     /**
95      * convert to base64-string
96      *
97      * @param string $in_str
98      * @param string $charset
99      * @return string
100      */
101     function mimeEncode($in_str, $charset) {
102            $out_str = $in_str;
103            if ($out_str && $charset) {
104
105                $end = "?=";
106                $start = "=?" . strtoupper($charset) . "?B?";
107                $spacer = $end . "\r\n " . $start;
108
109                $length = 75 - strlen($start) - strlen($end);
110                $length = floor($length/2) * 2;
111
112                $out_str = base64_encode($out_str);
113                //$out_str = Mail::encodemime($out_str,"base64");
114                //$out_str = chunk_split($out_str, $length, $spacer);
115
116                //$spacer = preg_quote($spacer);
117                //$out_str = preg_replace("/" . $spacer . "$/", "", $out_str);
118                $out_str = $start . $out_str . $end;
119            }
120            return $out_str;
121         }
122 }