1: <?php
2: /**
3: * Send mail using mail() function
4: *
5: * PHP 5
6: *
7: * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
8: * Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
9: *
10: * Licensed under The MIT License
11: * Redistributions of files must retain the above copyright notice.
12: *
13: * @copyright Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org)
14: * @link http://cakephp.org CakePHP(tm) Project
15: * @package Cake.Network.Email
16: * @since CakePHP(tm) v 2.0.0
17: * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
18: */
19:
20: /**
21: * Send mail using mail() function
22: *
23: * @package Cake.Network.Email
24: */
25: class MailTransport extends AbstractTransport {
26:
27: /**
28: * Send mail
29: *
30: * @param CakeEmail $email CakeEmail
31: * @return array
32: * @throws SocketException When mail cannot be sent.
33: */
34: public function send(CakeEmail $email) {
35: $eol = PHP_EOL;
36: if (isset($this->_config['eol'])) {
37: $eol = $this->_config['eol'];
38: }
39: $headers = $email->getHeaders(array('from', 'sender', 'replyTo', 'readReceipt', 'returnPath', 'to', 'cc', 'bcc'));
40: $to = $headers['To'];
41: unset($headers['To']);
42: $headers = $this->_headersToString($headers, $eol);
43: $message = implode($eol, $email->message());
44:
45: $params = isset($this->_config['additionalParameters']) ? $this->_config['additionalParameters'] : null;
46: $this->_mail($to, $email->subject(), $message, $headers, $params);
47: return array('headers' => $headers, 'message' => $message);
48: }
49:
50: /**
51: * Wraps internal function mail() and throws exception instead of errors if anything goes wrong
52: *
53: * @param string $to email's recipient
54: * @param string $subject email's subject
55: * @param string $message email's body
56: * @param string $headers email's custom headers
57: * @param string $params additional params for sending email, will be ignored when in safe_mode
58: * @throws SocketException if mail could not be sent
59: * @return void
60: */
61: protected function _mail($to, $subject, $message, $headers, $params = null) {
62: if (ini_get('safe_mode')) {
63: //@codingStandardsIgnoreStart
64: if (!@mail($to, $subject, $message, $headers)) {
65: throw new SocketException(__d('cake_dev', 'Could not send email.'));
66: }
67: } elseif (!@mail($to, $subject, $message, $headers, $params)) {
68: //@codingStandardsIgnoreEnd
69: throw new SocketException(__d('cake_dev', 'Could not send email.'));
70: }
71: }
72:
73: }
74: