*/ // must be run within Dokuwiki if(!defined('DOKU_INC')) die(); class action_plugin_smtp extends DokuWiki_Action_Plugin { /** * Registers a callback function for a given event * * @param Doku_Event_Handler $controller DokuWiki's event controller object * @return void */ public function register(Doku_Event_Handler $controller) { $controller->register_hook('MAIL_MESSAGE_SEND', 'BEFORE', $this, 'handle_mail_message_send'); } /** * [Custom event handler which performs action] * * @param Doku_Event $event event object by reference * @param mixed $param [the parameters passed as fifth argument to register_hook() when this * handler was registered] * @return void */ public function handle_mail_message_send(Doku_Event &$event, $param) { require_once __DIR__ . '/loader.php'; // prepare the message /** @var Mailer $mailer Our Mailer with all the data */ $mailer = $event->data['mail']; $body = $mailer->dump(); // this also prepares all internal variables of the mailer $rcpt = $event->data['to'] . ',' . $event->data['cc'] . ',' . $event->data['bcc']; $from = $event->data['from']; $message = new \splitbrain\dokuwiki\plugin\smtp\Message( $from, $rcpt, $body ); // prepare the SMTP communication lib $logger = new \splitbrain\dokuwiki\plugin\smtp\Logger(); $smtp = new \Tx\Mailer\SMTP($logger); $smtp->setServer( $this->getConf('smtp_host'), $this->getConf('smtp_port'), $this->getConf('smtp_ssl') ); if($this->getConf('auth_user')){ $smtp->setAuth( $this->getConf('auth_user'), $this->getConf('auth_pass') ); } $smtp->setEhlo( helper_plugin_smtp::getEHLO($this->getConf('localdomain')) ); // send the message try { $smtp->send($message); $ok = true; } catch (Exception $e) { msg('There was an unexpected problem communicating with SMTP: '.$e->getMessage(), -1); $ok = false; } // give debugging help on error if(!$ok && $this->getConf('debug')) { $log = array(); foreach($logger->getLog() as $line) { $log[] = trim($line[1]); } $log = trim(join("\n", $log)); msg('SMTP log:
'.hsc($log).'
Above may contain passwords - do not post online!',-1); } // finish event handling $event->preventDefault(); $event->stopPropagation(); $event->result = $ok; $event->data['success'] = $ok; } } // vim:ts=4:sw=4:et: