54 $this->message = \Swift_Message::newInstance();
69 public function mail($to, $subject, $messageBody, $additionalHeaders = NULL, $additionalParameters = NULL, $fakeSending = FALSE) {
71 if ($fakeSending === TRUE) {
74 $this->message->setSubject($subject);
76 $toAddresses = $this->parseAddresses($to);
77 $this->message->setTo($toAddresses);
80 $this->messageHeaders = $this->message->getHeaders();
81 foreach ($headers as $header) {
83 $this->
setHeader($headerName, $headerValue);
86 if (preg_match(
'/-f\\s*(\\S*?)/', $additionalParameters, $matches)) {
94 $result = $this->mailer->send($this->message);
106 if (TYPO3_OS ===
'WIN') {
108 if (preg_match(
'/^"([^"]*)"$/', trim($escapedString), $matches)) {
109 $result = str_replace(
'\\"',
'"', $matches[1]);
113 if (preg_match(
'/^\'([^' . preg_quote(
'\'') .
']*)\'$/', trim($escapedString), $matches)) {
114 $result = str_replace(
'\\\'',
'\'', $matches[1]);
127 protected function setHeader($headerName, $headerValue) {
129 if (preg_match(
'/^boundary="(.*)"$/', $headerName, $matches) > 0) {
130 $this->boundary = $matches[1];
135 $headerValue = trim($headerValue);
136 if (empty($headerValue)) {
141 if ($this->messageHeaders->has($headerName)) {
142 $header = $this->messageHeaders->get($headerName);
143 $headerType = $header->getFieldType();
144 switch ($headerType) {
145 case \Swift_Mime_Header::TYPE_TEXT:
146 $header->setValue($headerValue);
148 case \Swift_Mime_Header::TYPE_PARAMETERIZED:
149 $header->setValue(rtrim($headerValue,
';'));
151 case \Swift_Mime_Header::TYPE_MAILBOX:
152 $addressList = $this->parseAddresses($headerValue);
153 if (count($addressList) > 0) {
154 $header->setNameAddresses($addressList);
157 case \Swift_Mime_Header::TYPE_DATE:
158 $header->setTimeStamp(strtotime($headerValue));
160 case \Swift_Mime_Header::TYPE_ID:
162 $header->setId(trim($headerValue,
'<>'));
164 case \Swift_Mime_Header::TYPE_PATH:
165 $header->setAddress($headerValue);
169 switch ($headerName) {
176 $addressList = $this->parseAddresses($headerValue);
177 if (count($addressList) > 0) {
178 $this->messageHeaders->addMailboxHeader($headerName, $addressList);
182 $this->messageHeaders->addDateHeader($headerName, strtotime($headerValue));
186 $this->messageHeaders->addIdHeader($headerName, trim($headerValue,
'<>'));
188 $this->messageHeaders->addPathHeader($headerName, $headerValue);
191 case 'Content-Disposition':
192 $this->messageHeaders->addParameterizedHeader($headerName, rtrim($headerValue,
';'));
195 $this->messageHeaders->addTextheader($headerName, $headerValue);
208 if ($this->boundary) {
210 $bodyParts = preg_split(
'/--' . preg_quote($this->boundary,
'/') .
'(--)?/m', $body, NULL, PREG_SPLIT_NO_EMPTY);
211 foreach ($bodyParts as $bodyPart) {
213 if (trim($bodyPart) ==
'') {
217 $lines = explode(LF, $bodyPart);
221 $contentType =
'text/plain';
223 if (trim($lines[0]) ==
'This is a multi-part message in MIME format.') {
228 while (count($lines) > 0) {
229 $line = array_shift($lines);
230 if (preg_match(
'/^content-type:(.*);( charset=(.*))?$/i', $line, $matches)) {
231 $contentType = trim($matches[1]);
233 $charset = trim($matches[3]);
235 } elseif (preg_match(
'/^content-transfer-encoding:(.*)$/i', $line, $matches)) {
236 $encoding = trim($matches[1]);
237 } elseif (strlen(trim($line)) == 0) {
243 $bodyPart = $this->
decode(implode(LF, $lines), $encoding);
244 $this->message->addPart($bodyPart, $contentType, $charset);
249 $contentType = $this->message->getContentType();
250 $charset = $this->message->getCharset();
251 $encoding = $this->message->getEncoder()->getName();
253 $rawBody = $this->
decode($body, $encoding);
254 $this->message->setBody($rawBody, $contentType, $charset);
265 protected function decode($text, $encoding) {
268 case 'quoted-printable':
269 $result = quoted_printable_decode($text);
272 $result = base64_decode($text);
289 protected function parseAddresses($rawAddresses =
'') {
292 $addresses = $addressParser->parseAddressList();
293 $addressList = array();
294 foreach ($addresses as $address) {
295 if ($address->personal) {
297 $addressList[$address->mailbox .
'@' . $address->host] = $address->personal;
300 $addressList[] = $address->mailbox .
'@' . $address->host;
315 $from = $this->message->getFrom();
316 if (count($from) > 0) {
318 list($fromAddress, $fromName) = each($from);
320 $fromAddress = $this->message->getReturnPath();
321 $fromName = $fromAddress;
323 if (strlen($fromAddress) == 0) {
324 $fromAddress =
'no-reply@example.org';
325 $fromName =
'TYPO3 CMS';
327 $this->message->setFrom(array($fromAddress => $fromName));
setHeader($headerName, $headerValue)
static makeInstance($className)
static trimExplode($delim, $string, $removeEmptyValues=FALSE, $limit=0)
if($list_of_literals) if(!empty($literals)) if(!empty($literals)) $result
Analyse literals to prepend the N char to them if their contents aren't numeric.
mail($to, $subject, $messageBody, $additionalHeaders=NULL, $additionalParameters=NULL, $fakeSending=FALSE)
unescapeShellArguments($escapedString)