Version Description
(2016-12-23): =
* Changed some missed bracketed array usages to array()
syntax
* Fix wp_mail_from
/ wp_mail_from_name
not working on old PHP / WP versions
* Add a wrapper for using mime_content_type
/ finfo_file
Download this release
Release Info
Developer | Mailgun |
Plugin | Mailgun for WordPress |
Version | 1.5.4 |
Comparing to | |
See all releases |
Code changes from version 1.5.3 to 1.5.4
- CHANGELOG.md +5 -0
- includes/admin.php +9 -9
- includes/widget.php +1 -1
- includes/wp-mail.php +55 -28
- mailgun.php +13 -11
- readme.txt +6 -1
CHANGELOG.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1 |
Changelog
|
2 |
=========
|
3 |
|
|
|
|
|
|
|
|
|
|
|
4 |
1.5.3 (2016-12-22):
|
5 |
* Changed all bracketed array usages to `array()` syntax for older PHP support
|
6 |
* Redesigned `Content-Type` processing code to not make such large assumptions
|
1 |
Changelog
|
2 |
=========
|
3 |
|
4 |
+
1.5.4 (2016-12-23):
|
5 |
+
* Changed some missed bracketed array usages to `array()` syntax
|
6 |
+
* Fix `wp_mail_from` / `wp_mail_from_name` not working on old PHP / WP versions
|
7 |
+
* Add a wrapper for using `mime_content_type` / `finfo_file`
|
8 |
+
|
9 |
1.5.3 (2016-12-22):
|
10 |
* Changed all bracketed array usages to `array()` syntax for older PHP support
|
11 |
* Redesigned `Content-Type` processing code to not make such large assumptions
|
includes/admin.php
CHANGED
@@ -64,7 +64,7 @@ class MailgunAdmin extends Mailgun
|
|
64 |
$sitename = substr($sitename, 4);
|
65 |
}
|
66 |
|
67 |
-
$defaults =
|
68 |
'useAPI' => '1',
|
69 |
'apiKey' => '',
|
70 |
'domain' => '',
|
@@ -75,7 +75,7 @@ class MailgunAdmin extends Mailgun
|
|
75 |
'track-opens' => '',
|
76 |
'campaign-id' => '',
|
77 |
'tag' => $sitename,
|
78 |
-
|
79 |
if (!$this->options) {
|
80 |
$this->options = $defaults;
|
81 |
add_option('mailgun', $this->options);
|
@@ -331,10 +331,10 @@ class MailgunAdmin extends Mailgun
|
|
331 |
if (!current_user_can('manage_options') || !wp_verify_nonce($_GET['_wpnonce'])) {
|
332 |
die(
|
333 |
json_encode(
|
334 |
-
|
335 |
'message' => __('Unauthorized', 'mailgun'),
|
336 |
'method' => null,
|
337 |
-
|
338 |
)
|
339 |
);
|
340 |
}
|
@@ -352,27 +352,27 @@ class MailgunAdmin extends Mailgun
|
|
352 |
$admin_email,
|
353 |
__('Mailgun WordPress Plugin Test', 'mailgun'),
|
354 |
sprintf(__("This is a test email generated by the Mailgun WordPress plugin.\n\nIf you have received this message, the requested test has succeeded.\n\nThe method used to send this email was: %s.", 'mailgun'), $method),
|
355 |
-
|
356 |
);
|
357 |
|
358 |
if ($result) {
|
359 |
die(
|
360 |
json_encode(
|
361 |
-
|
362 |
'message' => __('Success', 'mailgun'),
|
363 |
'method' => $method,
|
364 |
'error' => __('Success', 'mailgun'),
|
365 |
-
|
366 |
)
|
367 |
);
|
368 |
} else {
|
369 |
die(
|
370 |
json_encode(
|
371 |
-
|
372 |
'message' => __('Failure', 'mailgun'),
|
373 |
'method' => $method,
|
374 |
'error' => mg_api_last_error(),
|
375 |
-
|
376 |
)
|
377 |
);
|
378 |
}
|
64 |
$sitename = substr($sitename, 4);
|
65 |
}
|
66 |
|
67 |
+
$defaults = array(
|
68 |
'useAPI' => '1',
|
69 |
'apiKey' => '',
|
70 |
'domain' => '',
|
75 |
'track-opens' => '',
|
76 |
'campaign-id' => '',
|
77 |
'tag' => $sitename,
|
78 |
+
);
|
79 |
if (!$this->options) {
|
80 |
$this->options = $defaults;
|
81 |
add_option('mailgun', $this->options);
|
331 |
if (!current_user_can('manage_options') || !wp_verify_nonce($_GET['_wpnonce'])) {
|
332 |
die(
|
333 |
json_encode(
|
334 |
+
array(
|
335 |
'message' => __('Unauthorized', 'mailgun'),
|
336 |
'method' => null,
|
337 |
+
)
|
338 |
)
|
339 |
);
|
340 |
}
|
352 |
$admin_email,
|
353 |
__('Mailgun WordPress Plugin Test', 'mailgun'),
|
354 |
sprintf(__("This is a test email generated by the Mailgun WordPress plugin.\n\nIf you have received this message, the requested test has succeeded.\n\nThe method used to send this email was: %s.", 'mailgun'), $method),
|
355 |
+
array('Content-Type: text/plain')
|
356 |
);
|
357 |
|
358 |
if ($result) {
|
359 |
die(
|
360 |
json_encode(
|
361 |
+
array(
|
362 |
'message' => __('Success', 'mailgun'),
|
363 |
'method' => $method,
|
364 |
'error' => __('Success', 'mailgun'),
|
365 |
+
)
|
366 |
)
|
367 |
);
|
368 |
} else {
|
369 |
die(
|
370 |
json_encode(
|
371 |
+
array(
|
372 |
'message' => __('Failure', 'mailgun'),
|
373 |
'method' => $method,
|
374 |
'error' => mg_api_last_error(),
|
375 |
+
)
|
376 |
)
|
377 |
);
|
378 |
}
|
includes/widget.php
CHANGED
@@ -103,7 +103,7 @@ class list_widget extends WP_Widget
|
|
103 |
// Updating widget replacing old instances with new
|
104 |
public function update($new_instance, $old_instance)
|
105 |
{
|
106 |
-
$instance =
|
107 |
$instance = $new_instance;
|
108 |
|
109 |
return $instance;
|
103 |
// Updating widget replacing old instances with new
|
104 |
public function update($new_instance, $old_instance)
|
105 |
{
|
106 |
+
$instance = array();
|
107 |
$instance = $new_instance;
|
108 |
|
109 |
return $instance;
|
includes/wp-mail.php
CHANGED
@@ -27,7 +27,7 @@
|
|
27 |
*
|
28 |
* @return string Last error that occurred.
|
29 |
*
|
30 |
-
* @since 1.5
|
31 |
*/
|
32 |
function mg_api_last_error($error = null)
|
33 |
{
|
@@ -43,6 +43,31 @@ function mg_api_last_error($error = null)
|
|
43 |
}
|
44 |
}
|
45 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
/**
|
47 |
* wp_mail function to be loaded in to override the core wp_mail function
|
48 |
* from wp-includes/pluggable.php.
|
@@ -60,7 +85,7 @@ function mg_api_last_error($error = null)
|
|
60 |
*
|
61 |
* @since 0.1
|
62 |
*/
|
63 |
-
function wp_mail($to, $subject, $message, $headers = '', $attachments =
|
64 |
{
|
65 |
// Compact the input, apply the filters, and extract them back out
|
66 |
extract(apply_filters('wp_mail', compact('to', 'subject', 'message', 'headers', 'attachments')));
|
@@ -79,7 +104,7 @@ function wp_mail($to, $subject, $message, $headers = '', $attachments = [])
|
|
79 |
|
80 |
// Headers
|
81 |
if (empty($headers)) {
|
82 |
-
$headers =
|
83 |
} else {
|
84 |
if (!is_array($headers)) {
|
85 |
// Explode the headers out, so this function can take both
|
@@ -88,9 +113,9 @@ function wp_mail($to, $subject, $message, $headers = '', $attachments = [])
|
|
88 |
} else {
|
89 |
$tempheaders = $headers;
|
90 |
}
|
91 |
-
$headers =
|
92 |
-
$cc =
|
93 |
-
$bcc =
|
94 |
|
95 |
// If it's actually got contents
|
96 |
if (!empty($tempheaders)) {
|
@@ -155,21 +180,6 @@ function wp_mail($to, $subject, $message, $headers = '', $attachments = [])
|
|
155 |
}
|
156 |
}
|
157 |
|
158 |
-
// Attempt to apply external filters to these values before using our own.
|
159 |
-
if (has_filter('wp_mail_from')) {
|
160 |
-
$from_email = apply_filters(
|
161 |
-
'wp_mail_from',
|
162 |
-
isset($from_email) ? $from_email : null
|
163 |
-
);
|
164 |
-
}
|
165 |
-
|
166 |
-
if (has_filter('wp_mail_from_name')) {
|
167 |
-
$from_name = apply_filters(
|
168 |
-
'wp_mail_from_name',
|
169 |
-
isset($from_name) ? $from_name : null
|
170 |
-
);
|
171 |
-
}
|
172 |
-
|
173 |
// From email and name
|
174 |
// If we don't have a name from the input headers
|
175 |
if (!isset($from_name) && !empty($mailgun['from-name'])) {
|
@@ -197,12 +207,27 @@ function wp_mail($to, $subject, $message, $headers = '', $attachments = [])
|
|
197 |
$from_email = 'wordpress@'.$sitename;
|
198 |
}
|
199 |
|
200 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
201 |
'from' => "{$from_name} <{$from_email}>",
|
202 |
'to' => $to,
|
203 |
'subject' => $subject,
|
204 |
'text' => $message,
|
205 |
-
|
206 |
|
207 |
$body['o:tag'] = '';
|
208 |
$body['o:tracking-clicks'] = !empty($mailgun['track-clicks']) ? $mailgun['track-clicks'] : 'no';
|
@@ -246,7 +271,7 @@ function wp_mail($to, $subject, $message, $headers = '', $attachments = [])
|
|
246 |
fclose($tmp);
|
247 |
|
248 |
// Get mime type with mime_content_type
|
249 |
-
$content_type =
|
250 |
|
251 |
// Remove the tmpfile
|
252 |
unlink($tmppath);
|
@@ -332,11 +357,13 @@ function wp_mail($to, $subject, $message, $headers = '', $attachments = [])
|
|
332 |
|
333 |
$payload .= '--'.$boundary.'--';
|
334 |
|
335 |
-
$data =
|
336 |
'body' => $payload,
|
337 |
-
'headers' =>
|
338 |
-
|
339 |
-
|
|
|
|
|
340 |
|
341 |
$url = "https://api.mailgun.net/v3/{$domain}/messages";
|
342 |
|
27 |
*
|
28 |
* @return string Last error that occurred.
|
29 |
*
|
30 |
+
* @since 1.5.0
|
31 |
*/
|
32 |
function mg_api_last_error($error = null)
|
33 |
{
|
43 |
}
|
44 |
}
|
45 |
|
46 |
+
/**
|
47 |
+
* Tries several methods to get the MIME Content-Type of a file.
|
48 |
+
*
|
49 |
+
* @param string $filepath
|
50 |
+
* @param string $default_type If all methods fail, fallback to $default_type
|
51 |
+
*
|
52 |
+
* @return string Content-Type
|
53 |
+
*
|
54 |
+
* @since 1.5.4
|
55 |
+
*/
|
56 |
+
function get_mime_content_type($filepath, $default_type = 'text/plain')
|
57 |
+
{
|
58 |
+
if (function_exists('mime_content_type')) {
|
59 |
+
return mime_content_type($filepath);
|
60 |
+
} elseif (function_exists('finfo_file')) {
|
61 |
+
$fi = finfo_open(FILEINFO_MIME_TYPE);
|
62 |
+
$ret = finfo_file($fi, $filepath);
|
63 |
+
finfo_close($fi);
|
64 |
+
|
65 |
+
return $ret;
|
66 |
+
} else {
|
67 |
+
return $default_type;
|
68 |
+
}
|
69 |
+
}
|
70 |
+
|
71 |
/**
|
72 |
* wp_mail function to be loaded in to override the core wp_mail function
|
73 |
* from wp-includes/pluggable.php.
|
85 |
*
|
86 |
* @since 0.1
|
87 |
*/
|
88 |
+
function wp_mail($to, $subject, $message, $headers = '', $attachments = array())
|
89 |
{
|
90 |
// Compact the input, apply the filters, and extract them back out
|
91 |
extract(apply_filters('wp_mail', compact('to', 'subject', 'message', 'headers', 'attachments')));
|
104 |
|
105 |
// Headers
|
106 |
if (empty($headers)) {
|
107 |
+
$headers = array();
|
108 |
} else {
|
109 |
if (!is_array($headers)) {
|
110 |
// Explode the headers out, so this function can take both
|
113 |
} else {
|
114 |
$tempheaders = $headers;
|
115 |
}
|
116 |
+
$headers = array();
|
117 |
+
$cc = array();
|
118 |
+
$bcc = array();
|
119 |
|
120 |
// If it's actually got contents
|
121 |
if (!empty($tempheaders)) {
|
180 |
}
|
181 |
}
|
182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
183 |
// From email and name
|
184 |
// If we don't have a name from the input headers
|
185 |
if (!isset($from_name) && !empty($mailgun['from-name'])) {
|
207 |
$from_email = 'wordpress@'.$sitename;
|
208 |
}
|
209 |
|
210 |
+
// Attempt to apply external filters to these values before using our own.
|
211 |
+
if (has_filter('wp_mail_from')) {
|
212 |
+
$from_email = apply_filters(
|
213 |
+
'wp_mail_from',
|
214 |
+
$from_email
|
215 |
+
);
|
216 |
+
}
|
217 |
+
|
218 |
+
if (has_filter('wp_mail_from_name')) {
|
219 |
+
$from_name = apply_filters(
|
220 |
+
'wp_mail_from_name',
|
221 |
+
$from_name
|
222 |
+
);
|
223 |
+
}
|
224 |
+
|
225 |
+
$body = array(
|
226 |
'from' => "{$from_name} <{$from_email}>",
|
227 |
'to' => $to,
|
228 |
'subject' => $subject,
|
229 |
'text' => $message,
|
230 |
+
);
|
231 |
|
232 |
$body['o:tag'] = '';
|
233 |
$body['o:tracking-clicks'] = !empty($mailgun['track-clicks']) ? $mailgun['track-clicks'] : 'no';
|
271 |
fclose($tmp);
|
272 |
|
273 |
// Get mime type with mime_content_type
|
274 |
+
$content_type = get_mime_content_type($tmppath, 'text/plain');
|
275 |
|
276 |
// Remove the tmpfile
|
277 |
unlink($tmppath);
|
357 |
|
358 |
$payload .= '--'.$boundary.'--';
|
359 |
|
360 |
+
$data = array(
|
361 |
'body' => $payload,
|
362 |
+
'headers' => array(
|
363 |
+
'Authorization' => 'Basic '.base64_encode("api:{$apiKey}"),
|
364 |
+
'Content-Type' => 'multipart/form-data; boundary='.$boundary,
|
365 |
+
),
|
366 |
+
);
|
367 |
|
368 |
$url = "https://api.mailgun.net/v3/{$domain}/messages";
|
369 |
|
mailgun.php
CHANGED
@@ -23,7 +23,7 @@
|
|
23 |
* Plugin Name: Mailgun
|
24 |
* Plugin URI: http://wordpress.org/extend/plugins/mailgun/
|
25 |
* Description: Mailgun integration for WordPress
|
26 |
-
* Version: 1.5.
|
27 |
* Author: Mailgun
|
28 |
* Author URI: http://www.mailgun.com/
|
29 |
* License: GPLv2 or later
|
@@ -136,7 +136,7 @@ class Mailgun
|
|
136 |
*
|
137 |
* @since 0.1
|
138 |
*/
|
139 |
-
public function api_call($uri, $params =
|
140 |
{
|
141 |
$options = get_option('mailgun');
|
142 |
$apiKey = (defined('MAILGUN_APIKEY') && MAILGUN_APIKEY) ? MAILGUN_APIKEY : $options['apiKey'];
|
@@ -144,7 +144,9 @@ class Mailgun
|
|
144 |
|
145 |
$time = time();
|
146 |
$url = $this->api_endpoint.$uri;
|
147 |
-
$headers =
|
|
|
|
|
148 |
|
149 |
switch ($method) {
|
150 |
case 'GET':
|
@@ -163,12 +165,12 @@ class Mailgun
|
|
163 |
}
|
164 |
|
165 |
// make the request
|
166 |
-
$args =
|
167 |
'method' => $method,
|
168 |
'body' => $params,
|
169 |
'headers' => $headers,
|
170 |
'sslverify' => true,
|
171 |
-
|
172 |
|
173 |
// make the remote request
|
174 |
$result = wp_remote_request($url, $args);
|
@@ -188,9 +190,9 @@ class Mailgun
|
|
188 |
*/
|
189 |
public function get_lists()
|
190 |
{
|
191 |
-
$results =
|
192 |
|
193 |
-
$lists_json = $this->api_call('lists',
|
194 |
$lists_arr = json_decode($lists_json, true);
|
195 |
if (isset($lists_arr['items']) && !empty($lists_arr['items'])) {
|
196 |
$results = $lists_arr['items'];
|
@@ -208,7 +210,7 @@ class Mailgun
|
|
208 |
*/
|
209 |
public function add_list()
|
210 |
{
|
211 |
-
$response =
|
212 |
|
213 |
$name = isset($_POST['name']) ? $_POST['name'] : null;
|
214 |
$email = isset($_POST['email']) ? $_POST['email'] : null;
|
@@ -219,10 +221,10 @@ class Mailgun
|
|
219 |
foreach ($list_addresses as $address => $val) {
|
220 |
$response[] = $this->api_call(
|
221 |
"lists/{$address}/members",
|
222 |
-
|
223 |
'address' => $email,
|
224 |
'name' => $name,
|
225 |
-
|
226 |
);
|
227 |
}
|
228 |
|
@@ -243,7 +245,7 @@ class Mailgun
|
|
243 |
*
|
244 |
* @since 0.1
|
245 |
*/
|
246 |
-
public function list_form($list_address, $args =
|
247 |
{
|
248 |
$widget_class_id = "mailgun-list-widget-{$args['widget_id']}";
|
249 |
$form_class_id = "list-form-{$args['widget_id']}";
|
23 |
* Plugin Name: Mailgun
|
24 |
* Plugin URI: http://wordpress.org/extend/plugins/mailgun/
|
25 |
* Description: Mailgun integration for WordPress
|
26 |
+
* Version: 1.5.4
|
27 |
* Author: Mailgun
|
28 |
* Author URI: http://www.mailgun.com/
|
29 |
* License: GPLv2 or later
|
136 |
*
|
137 |
* @since 0.1
|
138 |
*/
|
139 |
+
public function api_call($uri, $params = array(), $method = 'POST')
|
140 |
{
|
141 |
$options = get_option('mailgun');
|
142 |
$apiKey = (defined('MAILGUN_APIKEY') && MAILGUN_APIKEY) ? MAILGUN_APIKEY : $options['apiKey'];
|
144 |
|
145 |
$time = time();
|
146 |
$url = $this->api_endpoint.$uri;
|
147 |
+
$headers = array(
|
148 |
+
'Authorization' => 'Basic '.base64_encode("api:{$apiKey}")
|
149 |
+
);
|
150 |
|
151 |
switch ($method) {
|
152 |
case 'GET':
|
165 |
}
|
166 |
|
167 |
// make the request
|
168 |
+
$args = array(
|
169 |
'method' => $method,
|
170 |
'body' => $params,
|
171 |
'headers' => $headers,
|
172 |
'sslverify' => true,
|
173 |
+
);
|
174 |
|
175 |
// make the remote request
|
176 |
$result = wp_remote_request($url, $args);
|
190 |
*/
|
191 |
public function get_lists()
|
192 |
{
|
193 |
+
$results = array();
|
194 |
|
195 |
+
$lists_json = $this->api_call('lists', array(), 'GET');
|
196 |
$lists_arr = json_decode($lists_json, true);
|
197 |
if (isset($lists_arr['items']) && !empty($lists_arr['items'])) {
|
198 |
$results = $lists_arr['items'];
|
210 |
*/
|
211 |
public function add_list()
|
212 |
{
|
213 |
+
$response = array();
|
214 |
|
215 |
$name = isset($_POST['name']) ? $_POST['name'] : null;
|
216 |
$email = isset($_POST['email']) ? $_POST['email'] : null;
|
221 |
foreach ($list_addresses as $address => $val) {
|
222 |
$response[] = $this->api_call(
|
223 |
"lists/{$address}/members",
|
224 |
+
array(
|
225 |
'address' => $email,
|
226 |
'name' => $name,
|
227 |
+
)
|
228 |
);
|
229 |
}
|
230 |
|
245 |
*
|
246 |
* @since 0.1
|
247 |
*/
|
248 |
+
public function list_form($list_address, $args = array(), $instance = array())
|
249 |
{
|
250 |
$widget_class_id = "mailgun-list-widget-{$args['widget_id']}";
|
251 |
$form_class_id = "list-form-{$args['widget_id']}";
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Contributors: Mailgun, sivel, lookahead.io, m35dev
|
|
5 |
Tags: mailgun, smtp, http, api, mail, email
|
6 |
Requires at least: 3.3
|
7 |
Tested up to: 4.7
|
8 |
-
Stable tag: 1.5.
|
9 |
License: GPLv2 or later
|
10 |
|
11 |
|
@@ -68,6 +68,11 @@ MAILGUN_SECURE Type: boolean
|
|
68 |
|
69 |
== Changelog ==
|
70 |
|
|
|
|
|
|
|
|
|
|
|
71 |
= 1.5.3 (2016-12-22): =
|
72 |
* Changed all bracketed array usages to `array()` syntax for older PHP support
|
73 |
* Redesigned `Content-Type` processing code to not make such large assumptions
|
5 |
Tags: mailgun, smtp, http, api, mail, email
|
6 |
Requires at least: 3.3
|
7 |
Tested up to: 4.7
|
8 |
+
Stable tag: 1.5.4
|
9 |
License: GPLv2 or later
|
10 |
|
11 |
|
68 |
|
69 |
== Changelog ==
|
70 |
|
71 |
+
= 1.5.4 (2016-12-23): =
|
72 |
+
* Changed some missed bracketed array usages to `array()` syntax
|
73 |
+
* Fix `wp_mail_from` / `wp_mail_from_name` not working on old PHP / WP versions
|
74 |
+
* Add a wrapper for using `mime_content_type` / `finfo_file`
|
75 |
+
|
76 |
= 1.5.3 (2016-12-22): =
|
77 |
* Changed all bracketed array usages to `array()` syntax for older PHP support
|
78 |
* Redesigned `Content-Type` processing code to not make such large assumptions
|