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:
35: public function send(Email $email)
36: {
37: $eol = PHP_EOL;
38: if (isset($this->_config['eol'])) {
39: $eol = $this->_config['eol'];
40: }
41: $headers = $email->getHeaders(['from', 'sender', 'replyTo', 'readReceipt', 'returnPath', 'to', 'cc', 'bcc']);
42: $to = $headers['To'];
43: unset($headers['To']);
44: foreach ($headers as $key => $header) {
45: $headers[$key] = str_replace(["\r", "\n"], '', $header);
46: }
47: $headers = $this->_headersToString($headers, $eol);
48: $subject = str_replace(["\r", "\n"], '', $email->getSubject());
49: $to = str_replace(["\r", "\n"], '', $to);
50:
51: $message = implode($eol, $email->message());
52:
53: $params = isset($this->_config['additionalParameters']) ? $this->_config['additionalParameters'] : null;
54: $this->_mail($to, $subject, $message, $headers, $params);
55:
56: $headers .= $eol . 'To: ' . $to;
57: $headers .= $eol . 'Subject: ' . $subject;
58:
59: return ['headers' => $headers, 'message' => $message];
60: }
61:
62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72:
73: protected function _mail($to, $subject, $message, $headers, $params = null)
74: {
75:
76: if (!@mail($to, $subject, $message, $headers, $params)) {
77: $error = error_get_last();
78: $msg = 'Could not send email: ' . (isset($error['message']) ? $error['message'] : 'unknown');
79: throw new SocketException($msg);
80: }
81:
82: }
83: }
84: