PluginProbe
Email Log / trunk
Email Log vtrunk
2.63 2.4.8 2.4.9 2.6 2.61 2.62 trunk 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.8.1 0.9 0.9.1 0.9.2 1.1 1.5 1.5.1 1.5.2 1.5.3 1.5.4 All 61 releases
email-log / include / class-email-header-parser.php

class-email-header-parser.php in Email Log trunk, at include/class-email-header-parser.php

128 lines 2.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Email Header Parser.
4 *
5 * @author Sudar
6 * @package EmailLog
7 */
8
9 defined( 'ABSPATH' ) || exit; // Exit if accessed directly
10
11 /**
12 * Class Email Header Parser.
13 *
14 * @since 1.0
15 */
16 class Email_Header_Parser {
17
18 /**
19 * Join email headers.
20 *
21 * @since 1.0
22 *
23 * @param array $data Headers to be joined.
24 * @return string Joined headers.
25 */
26 public function join_headers( $data ) {
27 $headers = '';
28
29 if ( ! empty( $data['from'] ) ) {
30 $headers .= 'From: ' . $data['from'] . "\r\n";
31 }
32
33 if ( ! empty( $data['cc'] ) ) {
34 $headers .= 'CC: ' . $data['cc'] . "\r\n";
35 }
36
37 if ( ! empty( $data['bcc'] ) ) {
38 $headers .= 'BCC: ' . $data['bcc'] . "\r\n";
39 }
40
41 if ( ! empty( $data['reply_to'] ) ) {
42 $headers .= 'Reply-to: ' . $data['reply_to'] . "\r\n";
43 }
44
45 if ( ! empty( $data['content_type'] ) ) {
46 $headers .= 'Content-type: ' . $data['content_type'] . "\r\n";
47 }
48
49 return $headers;
50 }
51
52 /**
53 * Return parsed headers.
54 *
55 * @param string $headers Headers to parse.
56 * @return array Parsed Headers.
57 */
58 public function parse_headers( $headers ) {
59 return $this->parse( $headers );
60 }
61
62 /**
63 * Parse Headers.
64 *
65 * @access private
66 *
67 * @param string $headers Headers to be parsed.
68 * @return array Parsed headers.
69 */
70 private function parse( $headers ) {
71 $data = array();
72 $arr_headers = explode( "\n", $headers );
73
74 foreach ( $arr_headers as $header ) {
75 $split_header = explode( ':', $header );
76 $value = $this->parse_header_line( $split_header );
77
78 if ( trim( $value ) != '' ) {
79 switch ( strtolower( $split_header[0] ) ) {
80 case 'from':
81 $data['from'] = $value;
82 break;
83
84 case 'cc':
85 $data['cc'] = $value;
86 break;
87
88 case 'bcc':
89 $data['bcc'] = $value;
90 break;
91
92 case 'reply-to':
93 $data['reply_to'] = $value;
94 break;
95
96 case 'content-type':
97 $data['content_type'] = $value;
98 break;
99 }
100 }
101 }
102
103 return $data;
104 }
105
106 /**
107 * Parse individual header line.
108 *
109 * @since 1.0
110 * @access private
111 *
112 * @param array $header Header line to be parsed.
113 * @return string Parsed value.
114 */
115 private function parse_header_line( $header ) {
116 $value = '';
117 if ( count( $header ) == 2 ) {
118 if ( is_array( $header[1] ) ) {
119 $value = trim( implode( ',', array_map( 'trim', $header[1] ) ) );
120 } else {
121 $value = trim( $header[1] );
122 }
123 }
124
125 return $value;
126 }
127 }
128