summaryrefslogtreecommitdiff
path: root/Postman/Postman-Mail/PostmanMyMailConnector.php
diff options
context:
space:
mode:
Diffstat (limited to 'Postman/Postman-Mail/PostmanMyMailConnector.php')
-rw-r--r--Postman/Postman-Mail/PostmanMyMailConnector.php222
1 files changed, 222 insertions, 0 deletions
diff --git a/Postman/Postman-Mail/PostmanMyMailConnector.php b/Postman/Postman-Mail/PostmanMyMailConnector.php
new file mode 100644
index 0000000..203fbf5
--- /dev/null
+++ b/Postman/Postman-Mail/PostmanMyMailConnector.php
@@ -0,0 +1,222 @@
+<?php
+define ( 'MYMAIL_POSTMAN_REQUIRED_VERSION', '2.0' );
+define ( 'MYMAIL_POSTMAN_ID', 'postman' );
+
+/**
+ * Enables MyMail to deliver via Postman
+ *
+ * @author jasonhendriks
+ *
+ */
+if (! class_exists ( 'PostmanMyMailConnector' )) {
+ class PostmanMyMailConnector {
+
+ // PostmanLogger
+ private $logger;
+
+ /**
+ * No-argument constructor
+ */
+ public function __construct($file) {
+ register_activation_hook ( $file, array (
+ $this,
+ 'activate'
+ ) );
+ register_deactivation_hook ( $file, array (
+ $this,
+ 'deactivate'
+ ) );
+
+ add_action ( 'init', array (
+ $this,
+ 'init'
+ ), 1 );
+ }
+
+ /**
+ * Initialize the Connector
+ */
+ public function init() {
+ if (! defined ( 'MYMAIL_VERSION' ) || version_compare ( MYMAIL_POSTMAN_REQUIRED_VERSION, MYMAIL_VERSION, '>' )) {
+ // no-op
+ } else {
+ // create an instance of the Logger
+ $this->logger = new PostmanLogger ( get_class ( $this ) );
+ $this->logger->debug ( 'Starting' );
+
+ add_filter ( 'mymail_delivery_methods', array (
+ &$this,
+ 'delivery_method'
+ ) );
+ add_action ( 'mymail_deliverymethod_tab_postman', array (
+ &$this,
+ 'deliverytab'
+ ) );
+
+ if (mymail_option ( 'deliverymethod' ) == MYMAIL_POSTMAN_ID) {
+ add_action ( 'mymail_initsend', array (
+ &$this,
+ 'initsend'
+ ) );
+ add_action ( 'mymail_presend', array (
+ &$this,
+ 'presend'
+ ) );
+ add_action ( 'mymail_dosend', array (
+ &$this,
+ 'dosend'
+ ) );
+ add_action ( 'MYMAIL_POSTMAN_cron', array (
+ &$this,
+ 'reset'
+ ) );
+ }
+ }
+ }
+
+ /**
+ * initsend function.
+ *
+ * uses mymail_initsend hook to set initial settings
+ *
+ * @access public
+ * @param mixed $mailobject
+ * @return void
+ */
+ public function initsend($mailobject) {
+ $this->logger->trace ( 'initsend' );
+ // disable dkim
+ $mailobject->dkim = false;
+ }
+
+ /**
+ * presend function.
+ *
+ * uses the mymail_presend hook to apply setttings before each mail
+ *
+ * @access public
+ * @param mixed $mailobject
+ * @return void
+ */
+ public function presend($mailobject) {
+
+ // embedding images doesn't work
+ $mailobject->embed_images = false;
+
+ // use pre_send from the main class
+ // need the raw email body to send so we use the same option
+ $mailobject->pre_send ();
+ }
+
+ /**
+ * dosend function.
+ *
+ * uses the mymail_dosend hook and triggers the send
+ *
+ * @access public
+ * @param mixed $mailobject
+ * @return void
+ */
+ public function dosend($mailobject) {
+ $this->logger->trace ( 'dosend' );
+ $this->logger->trace ( $mailobject->mailer );
+
+ // create a PostmanWpMail instance
+ $postmanWpMail = new PostmanWpMail ();
+ $postmanWpMail->init ();
+
+ // create a PostmanMessage instance
+ $message = $postmanWpMail->createNewMessage ();
+ $message->addHeaders ( $mailobject->headers );
+ $message->setBodyTextPart ( $mailobject->mailer->AltBody );
+ $message->setBodyHtmlPart ( $mailobject->mailer->Body );
+ $message->setBody ( $mailobject->mailer->AltBody . $mailobject->mailer->Body );
+ $message->setSubject ( $mailobject->subject );
+ $message->addTo ( $mailobject->to );
+ $message->setReplyTo ( $mailobject->reply_to );
+ $message->setAttachments ( $mailobject->attachments );
+
+ // create a PostmanEmailLog instance
+ $log = new PostmanEmailLog ();
+
+ // send the message and store the result
+ $mailobject->sent = $postmanWpMail->sendMessage ( $message, $log );
+
+ // give error message back to MyMail
+ $result = apply_filters ( 'postman_wp_mail_result', null );
+ if (! $mailobject->sent) {
+ $mailobject->set_error ( $result ['exception']->getMessage () );
+ }
+ }
+
+ /**
+ * reset function.
+ *
+ * resets the current time
+ *
+ * @access public
+ * @param mixed $message
+ * @return array
+ */
+ public function reset() {
+ update_option ( '_transient__mymail_send_period_timeout', false );
+ update_option ( '_transient__mymail_send_period', 0 );
+ }
+
+ /**
+ * delivery_method function.
+ *
+ * add the delivery method to the options
+ *
+ * @access public
+ * @param mixed $delivery_methods
+ * @return void
+ */
+ public function delivery_method($delivery_methods) {
+ $delivery_methods [MYMAIL_POSTMAN_ID] = __ ( 'Postman SMTP', Postman::TEXT_DOMAIN );
+ return $delivery_methods;
+ }
+
+ /**
+ * deliverytab function.
+ *
+ * the content of the tab for the options
+ *
+ * @access public
+ * @return void
+ */
+ public function deliverytab() {
+ apply_filters ( 'print_postman_status', null );
+ }
+
+ /**
+ * activate function.
+ *
+ * @access public
+ * @return void
+ */
+ public function activate() {
+ if (defined ( 'MYMAIL_VERSION' ) && version_compare ( MYMAIL_POSTMAN_REQUIRED_VERSION, MYMAIL_VERSION, '<=' )) {
+ mymail_notice ( sprintf ( __ ( 'MyMail: Change the delivery method in the %s!', Postman::TEXT_DOMAIN ), sprintf ( '<a href="options-general.php?page=newsletter-settings&mymail_remove_notice=mymail_delivery_method#delivery">%s</a>', __ ( 'Settings', 'postman-smtp' ) ) ), '', false, 'delivery_method' );
+ $this->reset ();
+ }
+ }
+
+ /**
+ * deactivate function.
+ *
+ * @access public
+ * @return void
+ */
+ public function deactivate() {
+ d;
+ if (defined ( 'MYMAIL_VERSION' ) && function_exists ( 'mymail_option' ) && version_compare ( MYMAIL_POSTMAN_REQUIRED_VERSION, MYMAIL_VERSION, '<=' )) {
+ if (mymail_option ( 'deliverymethod' ) == MYMAIL_POSTMAN_ID) {
+ mymail_update_option ( 'deliverymethod', 'simple' );
+ /* Translators where %s is the name of the page */
+ mymail_notice ( sprintf ( __ ( 'MyMail: Change the delivery method in the %s!', Postman::TEXT_DOMAIN ), sprintf ( '<a href="options-general.php?page=newsletter-settings&mymail_remove_notice=mymail_delivery_method#delivery">%s</a>', __ ( 'Settings', 'postman-smtp' ) ) ), '', false, 'delivery_method' );
+ }
+ }
+ }
+ }
+}