1 : <?php
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 : require_once 'Zend/Mime/Decode.php';
25 :
26 :
27 :
28 :
29 : require_once 'Zend/Mail/Exception.php';
30 :
31 :
32 :
33 :
34 :
35 :
36 : class Zend_Mail_Part
37 : {
38 :
39 :
40 :
41 : protected $_headers;
42 :
43 :
44 :
45 :
46 : protected $_content;
47 :
48 : protected $_topLines;
49 :
50 : protected $_parts;
51 :
52 :
53 :
54 :
55 : protected $_mail;
56 :
57 :
58 :
59 :
60 : protected $_messageNum;
61 :
62 :
63 :
64 :
65 :
66 :
67 : public function __construct(array $params)
68 : {
69 37 : if(isset($params['handler'])) {
70 26 : if(!$params['handler'] instanceof Zend_Mail_Storage_Abstract) {
71 1 : throw new Zend_Mail_Exception('handler is not a valid mail handler');
72 : }
73 25 : if(!isset($params['id'])) {
74 1 : throw new Zend_Mail_Exception('need a message id with a handler');
75 : }
76 :
77 24 : $this->_mail = $params['handler'];
78 24 : $this->_messageNum = $params['id'];
79 24 : }
80 :
81 35 : if(isset($params['raw'])) {
82 11 : Zend_Mime_Decode::splitMessage($params['raw'], $this->_headers, $this->_content);
83 35 : } else if(isset($params['headers'])) {
84 27 : if(is_array($params['headers'])) {
85 3 : $this->_headers = $params['headers'];
86 3 : } else {
87 24 : if(!empty($params['noToplines'])) {
88 3 : Zend_Mime_Decode::splitMessage($params['headers'], $this->_headers, $null);
89 3 : } else {
90 21 : Zend_Mime_Decode::splitMessage($params['headers'], $this->_headers, $this->_topLines);
91 : }
92 : }
93 27 : if(isset($params['content'])) {
94 3 : $this->_content = $params['content'];
95 3 : }
96 27 : }
97 35 : }
98 :
99 : public function isMultipart()
100 : {
101 : try {
102 1 : return strpos($this->getHeader('content-type', 'string'), 'multipart/') === 0;
103 : } catch(Zend_Mail_Exception $e) {
104 : return false;
105 : }
106 : }
107 :
108 :
109 :
110 :
111 :
112 :
113 :
114 : public function getContent()
115 : {
116 7 : if($this->_content !== null) {
117 3 : return $this->_content;
118 : }
119 :
120 4 : if($this->_mail) {
121 4 : return $this->_mail->getRaw($this->_messageNum, 'content');
122 : } else {
123 0 : throw new Zend_Mail_Exception('no content');
124 : }
125 : }
126 :
127 : public function getPart($num)
128 : {
129 3 : if(isset($this->_parts[$num])) {
130 1 : return $this->_parts[$num];
131 : }
132 :
133 3 : if(!$this->_mail && $this->_content === null) {
134 0 : throw new Zend_Mail_Exception('part not found');
135 : }
136 :
137 3 : if($this->_mail && $this->_mail->hasFetchPart) {
138 :
139 :
140 0 : }
141 :
142 :
143 3 : if($this->_content === null) {
144 0 : $this->_content = $this->_mail->getRaw($this->_messageNum, 'content');
145 0 : }
146 :
147 :
148 3 : $boundary = Zend_Mime_Decode::splitContentType($this->getHeader('content-type', 'string'), 'boundary');
149 3 : if(!$boundary) {
150 0 : throw new Zend_Mail_Exception('no boundary found in content type to split message');
151 : }
152 3 : $parts = Zend_Mime_Decode::splitMessageStruct($this->_content, $boundary);
153 3 : $counter = 1;
154 3 : foreach($parts as $part) {
155 3 : $this->_parts[$counter++] = new self(array('headers' => $part['header'], 'content' => $part['body']));
156 3 : }
157 :
158 3 : if(!isset($this->_parts[$num])) {
159 1 : throw new Zend_Mail_Exception('part not found');
160 : }
161 :
162 2 : return $this->_parts[$num];
163 : }
164 :
165 :
166 :
167 :
168 :
169 :
170 :
171 : public function getHeaders()
172 : {
173 1 : if($this->_headers === null) {
174 0 : if(!$this->_mail) {
175 0 : $this->_headers = array();
176 0 : } else {
177 0 : $part = $this->_mail->getRaw($this->_messageNum, 'header');
178 0 : Zend_Mime_Decode::splitMessage($part, $this->_headers, $null);
179 : }
180 0 : }
181 :
182 1 : return $this->_headers;
183 : }
184 :
185 :
186 : public function getHeader($name, $format = null)
187 : {
188 23 : $name = strtolower($name);
189 :
190 23 : if($this->_headers === null) {
191 0 : $this->getHeaders();
192 0 : }
193 :
194 23 : if (!isset($this->_headers[$name])) {
195 1 : throw new Zend_Mail_Exception("no Header with Name $name found");
196 : }
197 :
198 22 : $header = $this->_headers[$name];
199 :
200 : switch($format) {
201 22 : case 'string':
202 20 : if(is_array($header)) {
203 1 : $header = implode(Zend_Mime::LINEEND, $header);
204 1 : }
205 20 : break;
206 3 : case 'array':
207 1 : $header = (array)$header;
208 3 : default:
209 :
210 3 : }
211 :
212 22 : return $header;
213 : }
214 :
215 :
216 :
217 :
218 :
219 :
220 :
221 :
222 :
223 : public function __get($name)
224 : {
225 16 : return $this->getHeader($name, 'string');
226 : }
227 : }
228 :
|