1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
17: namespace Cake\Mailer\Transport;
18:
19: use Cake\Mailer\AbstractTransport;
20: use Cake\Mailer\Email;
21: use Cake\Network\Exception\SocketException;
22:
23: 24: 25:
26: class MailTransport extends AbstractTransport
27: {
28: 29: 30: 31: 32: 33:
34: public function send(Email $email)
35: {
36: $eol = PHP_EOL;
37: if (isset($this->_config['eol'])) {
38: $eol = $this->_config['eol'];
39: }
40: $headers = $email->getHeaders(['from', 'sender', 'replyTo', 'readReceipt', 'returnPath', 'to', 'cc', 'bcc']);
41: $to = $headers['To'];
42: unset($headers['To']);
43: foreach ($headers as $key => $header) {
44: $headers[$key] = str_replace(["\r", "\n"], '', $header);
45: }
46: $headers = $this->_headersToString($headers, $eol);
47: $subject = str_replace(["\r", "\n"], '', $email->getSubject());
48: $to = str_replace(["\r", "\n"], '', $to);
49:
50: $message = implode($eol, $email->message());
51:
52: $params = isset($this->_config['additionalParameters']) ? $this->_config['additionalParameters'] : null;
53: $this->_mail($to, $subject, $message, $headers, $params);
54:
55: $headers .= $eol . 'To: ' . $to;
56: $headers .= $eol . 'Subject: ' . $subject;
57:
58: return ['headers' => $headers, 'message' => $message];
59: }
60:
61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71:
72: protected function _mail($to, $subject, $message, $headers, $params = null)
73: {
74:
75: if (!@mail($to, $subject, $message, $headers, $params)) {
76: $error = error_get_last();
77: $msg = 'Could not send email: ' . (isset($error['message']) ? $error['message'] : 'unknown');
78: throw new SocketException($msg);
79: }
80:
81: }
82: }
83: