Post SMTP Mailer/Email Log - Version 1.8.2

Version Description

  • 2017-12-24
  • Fix: SendGrid API Call Structure
Download this release

Release Info

Developer yehudah
Plugin Icon 128x128 Post SMTP Mailer/Email Log
Version 1.8.2
Comparing to
See all releases

Code changes from version 1.8.1 to 1.8.2

Postman/Postman-Email-Log/PostmanEmailLogView.php CHANGED
@@ -366,9 +366,10 @@ class PostmanEmailLogView extends WP_List_Table {
366
$date = sprintf( _x( '%s ago', 'A relative time as in "five days ago"', Postman::TEXT_DOMAIN ), $humanTime );
367
}
368
$meta_values = get_post_meta( $post->ID );
369
$flattenedPost = array(
370
// the post title must be escaped as they are displayed in the HTML output
371
- 'sent_to' => sanitize_email( $meta_values ['to_header'] [0] ),
372
'title' => esc_html( $post->post_title ),
373
// the post status must be escaped as they are displayed in the HTML output
374
'status' => ($post->post_excerpt != null ? esc_html( $post->post_excerpt ) : __( 'Sent', Postman::TEXT_DOMAIN )),
366
$date = sprintf( _x( '%s ago', 'A relative time as in "five days ago"', Postman::TEXT_DOMAIN ), $humanTime );
367
}
368
$meta_values = get_post_meta( $post->ID );
369
+ $sent_to = array_map( 'sanitize_email', explode( ',' , $meta_values ['to_header'] [0] ) );
370
$flattenedPost = array(
371
// the post title must be escaped as they are displayed in the HTML output
372
+ 'sent_to' => implode( ', ', $sent_to ),
373
'title' => esc_html( $post->post_title ),
374
// the post status must be escaped as they are displayed in the HTML output
375
'status' => ($post->post_excerpt != null ? esc_html( $post->post_excerpt ) : __( 'Sent', Postman::TEXT_DOMAIN )),
Postman/Postman-Mail/PostmanSendGridMailEngine.php CHANGED
@@ -18,7 +18,6 @@ if ( ! class_exists( 'PostmanSendGridMailEngine' ) ) {
18
// the result
19
private $transcript;
20
21
- private $personalization;
22
private $apiKey;
23
24
/**
@@ -32,9 +31,6 @@ if ( ! class_exists( 'PostmanSendGridMailEngine' ) ) {
32
33
// create the logger
34
$this->logger = new PostmanLogger( get_class( $this ) );
35
-
36
- // create the Message
37
- $this->personalization = new SendGrid\Personalization();
38
}
39
40
/**
@@ -45,24 +41,6 @@ if ( ! class_exists( 'PostmanSendGridMailEngine' ) ) {
45
public function send( PostmanMessage $message ) {
46
$options = PostmanOptions::getInstance();
47
48
- // add the Postman signature - append it to whatever the user may have set
49
- if ( ! $options->isStealthModeEnabled() ) {
50
- $pluginData = apply_filters( 'postman_get_plugin_metadata', null );
51
- $this->personalization->addHeader( 'X-Mailer', sprintf( 'Postman SMTP %s for WordPress (%s)', $pluginData ['version'], 'https://wordpress.org/plugins/post-smtp/' ) );
52
- }
53
-
54
- // add the headers - see http://framework.zend.com/manual/1.12/en/zend.mail.additional-headers.html
55
- foreach ( ( array ) $message->getHeaders() as $header ) {
56
- $this->logger->debug( sprintf( 'Adding user header %s=%s', $header ['name'], $header ['content'] ) );
57
- $this->personalization->addHeader( $header ['name'], $header ['content'] );
58
- }
59
-
60
- // if the caller set a Content-Type header, use it
61
- $contentType = $message->getContentType();
62
- if ( ! empty( $contentType ) ) {
63
- $this->logger->debug( 'Some header keys are reserved. You may not include any of the following reserved headers: x-sg-id, x-sg-eid, received, dkim-signature, Content-Type, Content-Transfer-Encoding, To, From, Subject, Reply-To, CC, BCC.' );
64
- }
65
-
66
// add the From Header
67
$sender = $message->getFromAddress();
68
@@ -76,81 +54,99 @@ if ( ! class_exists( 'PostmanSendGridMailEngine' ) ) {
76
77
// add the to recipients
78
$counter = 0;
79
foreach ( ( array ) $message->getToRecipients() as $recipient ) {
80
$recipient->log( $this->logger, 'To' );
81
if ( $counter == 0 ) {
82
- $to = new SendGrid\Email($recipient->getName(), $recipient->getEmail());
83
- $this->personalization->addTo( $to );
84
} else {
85
- $email = new SendGrid\Email($recipient->getName(), $recipient->getEmail());
86
- $this->personalization->addTo( $email );
87
}
88
89
$counter++;
90
}
91
92
- // add the cc recipients
93
- foreach ( ( array ) $message->getCcRecipients() as $recipient ) {
94
- $recipient->log( $this->logger, 'Cc' );
95
- $this->personalization->addCc( $recipient->getEmail(), $recipient->getName() );
96
- }
97
-
98
- // add the bcc recipients
99
- foreach ( ( array ) $message->getBccRecipients() as $recipient ) {
100
- $recipient->log( $this->logger, 'Bcc' );
101
- $this->personalization->addBcc( $recipient->getEmail(), $recipient->getName() );
102
- }
103
-
104
- // add the messageId
105
- $messageId = $message->getMessageId();
106
- if ( ! empty( $messageId ) ) {
107
- $this->personalization->addHeader( 'message-id', $messageId );
108
- }
109
-
110
// add the subject
111
if ( null !== $message->getSubject() ) {
112
$subject = $message->getSubject();
113
}
114
115
// add the message content
116
-
117
$textPart = $message->getBodyTextPart();
118
if ( ! empty( $textPart ) ) {
119
$this->logger->debug( 'Adding body as text' );
120
- $content = new SendGrid\Content("text/plain", $textPart);
121
}
122
123
$htmlPart = $message->getBodyHtmlPart();
124
if ( ! empty( $htmlPart ) ) {
125
$this->logger->debug( 'Adding body as html' );
126
- $content = new SendGrid\Content("text/html", $htmlPart);
127
}
128
129
- // add attachments
130
- $this->logger->debug( 'Adding attachments' );
131
-
132
- $mail = new SendGrid\Mail($from, $subject, $to, $content);
133
- $mail->addPersonalization($this->personalization);
134
135
136
// add the reply-to
137
$replyTo = $message->getReplyTo();
138
// $replyTo is null or a PostmanEmailAddress object
139
if ( isset( $replyTo ) ) {
140
$reply_to = new SendGrid\ReplyTo( $replyTo->getEmail(), $replyTo->getName() );
141
- $mail->setReplyTo($reply_to);
142
}
143
144
$attachments = $this->addAttachmentsToMail( $message );
145
146
foreach ( $attachments as $index => $attachment ) {
147
$attach = new SendGrid\Attachment();
148
- $attach->setContent($attachment['content']);
149
- $attach->setType($attachment['type']);
150
- $attach->setFilename($attachment['file_name']);
151
- $attach->setDisposition("attachment");
152
- $attach->setContentId($attachment['id']);
153
- $mail->addAttachment($attach);
154
}
155
156
try {
@@ -165,7 +161,7 @@ if ( ! class_exists( 'PostmanSendGridMailEngine' ) ) {
165
$this->logger->debug( 'Sending mail' );
166
}
167
168
- $response = $sendgrid->client->mail()->send()->post($mail);
169
if ( $this->logger->isInfo() ) {
170
$this->logger->info( );
171
}
18
// the result
19
private $transcript;
20
21
private $apiKey;
22
23
/**
31
32
// create the logger
33
$this->logger = new PostmanLogger( get_class( $this ) );
34
}
35
36
/**
41
public function send( PostmanMessage $message ) {
42
$options = PostmanOptions::getInstance();
43
44
// add the From Header
45
$sender = $message->getFromAddress();
46
54
55
// add the to recipients
56
$counter = 0;
57
+ $emails = array();
58
foreach ( ( array ) $message->getToRecipients() as $recipient ) {
59
$recipient->log( $this->logger, 'To' );
60
if ( $counter == 0 ) {
61
+ $to = new SendGrid\Email( $recipient->getName(), $recipient->getEmail() );
62
} else {
63
+ $emails[] = new SendGrid\Email( $recipient->getName(), $recipient->getEmail() );
64
}
65
66
$counter++;
67
}
68
69
// add the subject
70
if ( null !== $message->getSubject() ) {
71
$subject = $message->getSubject();
72
}
73
74
// add the message content
75
$textPart = $message->getBodyTextPart();
76
if ( ! empty( $textPart ) ) {
77
$this->logger->debug( 'Adding body as text' );
78
+ $content = new SendGrid\Content( 'text/plain', $textPart );
79
}
80
81
$htmlPart = $message->getBodyHtmlPart();
82
if ( ! empty( $htmlPart ) ) {
83
$this->logger->debug( 'Adding body as html' );
84
+ $content = new SendGrid\Content( 'text/html', $htmlPart );
85
}
86
87
+ $mail = new SendGrid\Mail( $from, $subject, $to, $content );
88
89
+ foreach ( $emails as $email ) {
90
+ $mail->personalization[0]->addTo( $email );
91
+ }
92
93
// add the reply-to
94
$replyTo = $message->getReplyTo();
95
// $replyTo is null or a PostmanEmailAddress object
96
if ( isset( $replyTo ) ) {
97
$reply_to = new SendGrid\ReplyTo( $replyTo->getEmail(), $replyTo->getName() );
98
+ $mail->setReplyTo( $reply_to );
99
+ }
100
+
101
+ // add the Postman signature - append it to whatever the user may have set
102
+ if ( ! $options->isStealthModeEnabled() ) {
103
+ $pluginData = apply_filters( 'postman_get_plugin_metadata', null );
104
+ $mail->personalization[0]->addHeader( 'X-Mailer', sprintf( 'Postman SMTP %s for WordPress (%s)', $pluginData ['version'], 'https://wordpress.org/plugins/post-smtp/' ) );
105
+ }
106
+
107
+ // add the headers - see http://framework.zend.com/manual/1.12/en/zend.mail.additional-headers.html
108
+ foreach ( ( array ) $message->getHeaders() as $header ) {
109
+ $this->logger->debug( sprintf( 'Adding user header %s=%s', $header ['name'], $header ['content'] ) );
110
+ $mail->personalization[0]->addHeader( $header ['name'], $header ['content'] );
111
}
112
113
+ // if the caller set a Content-Type header, use it
114
+ $contentType = $message->getContentType();
115
+ if ( ! empty( $contentType ) ) {
116
+ $this->logger->debug( 'Some header keys are reserved. You may not include any of the following reserved headers: x-sg-id, x-sg-eid, received, dkim-signature, Content-Type, Content-Transfer-Encoding, To, From, Subject, Reply-To, CC, BCC.' );
117
+ }
118
+
119
+ // add the cc recipients
120
+ foreach ( ( array ) $message->getCcRecipients() as $recipient ) {
121
+ $recipient->log( $this->logger, 'Cc' );
122
+ $mail->personalization[0]->addCc( $recipient->getEmail(), $recipient->getName() );
123
+ }
124
+
125
+ // add the bcc recipients
126
+ foreach ( ( array ) $message->getBccRecipients() as $recipient ) {
127
+ $recipient->log( $this->logger, 'Bcc' );
128
+ $mail->personalization[0]->addBcc( $recipient->getEmail(), $recipient->getName() );
129
+ }
130
+
131
+ // add the messageId
132
+ $messageId = $message->getMessageId();
133
+ if ( ! empty( $messageId ) ) {
134
+ $mail->personalization[0]->addHeader( 'message-id', $messageId );
135
+ }
136
+
137
+ // add attachments
138
+ $this->logger->debug( 'Adding attachments' );
139
+
140
$attachments = $this->addAttachmentsToMail( $message );
141
142
foreach ( $attachments as $index => $attachment ) {
143
$attach = new SendGrid\Attachment();
144
+ $attach->setContent( $attachment['content'] );
145
+ $attach->setType( $attachment['type'] );
146
+ $attach->setFilename( $attachment['file_name'] );
147
+ $attach->setDisposition( 'attachment' );
148
+ $attach->setContentId( $attachment['id'] );
149
+ $mail->addAttachment( $attach );
150
}
151
152
try {
161
$this->logger->debug( 'Sending mail' );
162
}
163
164
+ $response = $sendgrid->client->mail()->send()->post( $mail );
165
if ( $this->logger->isInfo() ) {
166
$this->logger->info( );
167
}
postman-smtp.php CHANGED
@@ -4,7 +4,7 @@
4
* Plugin Name: Post SMTP
5
* Plugin URI: https://wordpress.org/plugins/post-smtp/
6
* Description: Email not reliable? Post SMTP is the first and only WordPress SMTP plugin to implement OAuth 2.0 for Gmail, Hotmail and Yahoo Mail. Setup is a breeze with the Configuration Wizard and integrated Port Tester. Enjoy worry-free delivery even if your password changes!
7
- * Version: 1.8.1
8
* Author: Jason Hendriks, Yehuda Hassine
9
* Text Domain: post-smtp
10
* Author URI: https://postmansmtp.com
@@ -71,5 +71,5 @@ function post_start( $startingMemory ) {
71
*/
72
function post_setupPostman() {
73
require_once 'Postman/Postman.php';
74
- $kevinCostner = new Postman( __FILE__, '1.8.1' );
75
}
4
* Plugin Name: Post SMTP
5
* Plugin URI: https://wordpress.org/plugins/post-smtp/
6
* Description: Email not reliable? Post SMTP is the first and only WordPress SMTP plugin to implement OAuth 2.0 for Gmail, Hotmail and Yahoo Mail. Setup is a breeze with the Configuration Wizard and integrated Port Tester. Enjoy worry-free delivery even if your password changes!
7
+ * Version: 1.8.2
8
* Author: Jason Hendriks, Yehuda Hassine
9
* Text Domain: post-smtp
10
* Author URI: https://postmansmtp.com
71
*/
72
function post_setupPostman() {
73
require_once 'Postman/Postman.php';
74
+ $kevinCostner = new Postman( __FILE__, '1.8.2' );
75
}
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=yehuda@m
4
Tags: postman smtp, postman, smtp, email, mail, mailer, email log, oauth2, gmail, google apps, hotmail, yahoo, mandrill api, sendgrid api, elastic email, office365, mailgun
5
Requires at least: 3.9
6
Tested up to: 4.9.4
7
- Stable tag: 1.8.1
8
License: GPLv2 or later
9
License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
@@ -284,6 +284,9 @@ To avoid being flagged as spam, you need to prove your email isn't forged. On a
284
285
== Changelog ==
286
287
= 1.8.1 - 2017-12-24
288
* New: Sendgrid API & Client Version 6
289
* New: Add email log 'send to' column
4
Tags: postman smtp, postman, smtp, email, mail, mailer, email log, oauth2, gmail, google apps, hotmail, yahoo, mandrill api, sendgrid api, elastic email, office365, mailgun
5
Requires at least: 3.9
6
Tested up to: 4.9.4
7
+ Stable tag: 1.8.2
8
License: GPLv2 or later
9
License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
284
285
== Changelog ==
286
287
+ = 1.8.2 - 2017-12-24
288
+ * Fix: SendGrid API Call Structure
289
+
290
= 1.8.1 - 2017-12-24
291
* New: Sendgrid API & Client Version 6
292
* New: Add email log 'send to' column