PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backups, Restore, Migration & Clone / 4.11.0
WP STAGING – WordPress Backups, Restore, Migration & Clone v4.11.0
4.11.0 4.10.0 4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Notifications / Transporter / EmailNotification.php
wp-staging / Notifications / Transporter Last commit date
EmailNotification.php 1 day ago EmailTemplateBuilder.php 1 day ago
EmailNotification.php
220 lines
1 <?php
2
3 namespace WPStaging\Notifications\Transporter;
4
5 use WPStaging\Core\WPStaging;
6 use WPStaging\Notifications\Interfaces\NotificationsInterface;
7
8 use function WPStaging\functions\debug_log;
9
10 class EmailNotification implements NotificationsInterface
11 {
12
13
14
15 private $sender = '';
16
17
18
19
20 private $recipient = '';
21
22
23
24
25 private $subject = '';
26
27
28
29
30 private $attachments = [];
31
32
33
34
35 private $headers = [];
36
37
38
39
40 private $isUseHtml = false;
41
42
43
44
45 private $isAddFooterMessage = true;
46
47
48
49
50
51 public function setSubject(string $subject)
52 {
53 $this->subject = $subject;
54 return $this;
55 }
56
57
58
59
60
61 public function setSender(string $sender)
62 {
63 if (empty($sender)) {
64 $this->sender = $sender;
65 return $this;
66 }
67
68 if (preg_match('/(.*)<(.+)>/', $sender, $matches)) {
69 $this->sender = $sender;
70 return $this;
71 }
72
73 $senderName = strtok($sender, '@');
74 $this->sender = $senderName . ' <' . $sender . '>';
75
76 return $this;
77 }
78
79
80
81
82
83 public function setRecipient(string $recipient)
84 {
85 $this->recipient = $recipient;
86 return $this;
87 }
88
89
90
91
92
93 public function setAttachment(array $attachments)
94 {
95 $this->attachments = $attachments;
96 return $this;
97 }
98
99
100
101
102
103 public function setHeaders(array $headers)
104 {
105 $this->headers = $headers;
106 return $this;
107 }
108
109
110
111
112
113 public function setUseHtml(bool $isUseHtml = false)
114 {
115 $this->isUseHtml = $isUseHtml;
116 return $this;
117 }
118
119
120
121
122
123 public function setIsAddFooterMessage(bool $isAddFooterMessage = false)
124 {
125 $this->isAddFooterMessage = $isAddFooterMessage;
126 return $this;
127 }
128
129
130
131
132 public function reset()
133 {
134 $this->sender = '';
135 $this->recipient = '';
136 $this->attachments = [];
137 $this->headers = [];
138 $this->isUseHtml = false;
139 $this->isAddFooterMessage = true;
140 }
141
142
143
144
145
146 private function addFooterMessage(string $message): string
147 {
148 if (empty($message) || !$this->isAddFooterMessage) {
149 return $message;
150 }
151
152 $siteUrl = get_site_url();
153
154 $message .= "\r\n\r\n" . "--";
155 if (WPStaging::isPro()) {
156 $message .= "\r\n" . sprintf(esc_html__('This message was sent by the WP Staging plugin from the website %s', 'wp-staging'), $siteUrl);
157 } else {
158 $message .= "\r\n" . sprintf(esc_html__('This message was sent by the WP Staging free backup and staging plugin from the website %s', 'wp-staging'), $siteUrl);
159 }
160
161 $message .= "\r\n" . sprintf(esc_html__('It was sent to the email address %s which can be set up on %s', 'wp-staging'), $this->recipient, $siteUrl . '/wp-admin/admin.php?page=wpstg-settings');
162
163 if (!WPStaging::isPro()) {
164 $message .= "\r\n\r\n" . sprintf(esc_html__('Get more control over your notifications by using WP Staging Pro %s.', 'wp-staging'), 'https://wp-staging.com/');
165 }
166
167 $message .= "\r\n\r\n" . esc_html__('Please do not reply to this email.', 'wp-staging');
168 return $message;
169 }
170
171
172
173
174
175 public function send(string $message): bool
176 {
177 if (empty($message)) {
178 return false;
179 }
180
181 $headers = [];
182
183 if (!empty($this->sender)) {
184 $headers[] = 'From: ' . $this->sender;
185 $headers[] = 'Reply-To: ' . $this->sender;
186 }
187
188 if ($this->isUseHtml) {
189 $headers[] = 'Content-Type: text/html; charset=UTF-8';
190 }
191
192 if (!empty($this->headers)) {
193 $headers = array_merge($headers, $this->headers);
194 }
195
196 add_action('wp_mail_failed', function ($wpError) {
197 debug_log(sprintf('[EmailNotification] %s', $wpError->get_error_message()), 'info', false);
198 });
199
200 $message = $this->addFooterMessage($message);
201 if (!$this->isUseHtml) {
202 $message = $this->cleanHtmlEntitiesAndTags($message);
203 }
204
205 return wp_mail($this->recipient, $this->subject, $message, $headers, $this->attachments);
206 }
207
208
209
210
211
212
213 private function cleanHtmlEntitiesAndTags(string $message): string
214 {
215 $message = html_entity_decode($message, ENT_QUOTES | ENT_HTML5, 'UTF-8');
216 $message = wp_kses($message, []);
217 return str_replace(['&gt;', '&amp;'], ['>', '&'], $message);
218 }
219 }
220