quickemail.snippet.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. /**
  3. * QuickEmail
  4. *
  5. * Copyright 2011-2017 Bob Ray
  6. *
  7. * @author Bob Ray
  8. * @date 1/15/11
  9. *
  10. * QuickEmail is free software; you can redistribute it and/or modify it
  11. * under the terms of the GNU General Public License as published by the Free
  12. * Software Foundation; either version 2 of the License, or (at your option) any
  13. * later version.
  14. *
  15. * QuickEmail is distributed in the hope that it will be useful, but WITHOUT ANY
  16. * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  17. * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License along with
  20. * QuickEmail; if not, write to the Free Software Foundation, Inc., 59 Temple
  21. * Place, Suite 330, Boston, MA 02111-1307 USA
  22. *
  23. * @package quickEmail
  24. */
  25. /**
  26. * MODX QuickEmail Snippet
  27. * @description A quick email sending and diagnostic snippet for MODX Revolution
  28. * @package quickemail
  29. * @version 1.0.4
  30. * @var $modx modX
  31. * @var $scriptProperties array
  32. *
  33. * @property string message - Message for the email body; default: `Default Message`.
  34. * @property string subject - Subject for the email message; default: `Default Subject`.
  35. * @property string to - Address the email message will be sent to; default: emailsender System Setting.
  36. * @property string toName - Value for message toName; default; emailsender System Setting.
  37. * @property string fromName - Value for message fromName; default; site_name System Setting.
  38. * @property string emailSender - Email address for from field of email; default: emailsender System Setting.
  39. * @property string replyTo - Value for replyTo field for email; default: emailsender System Setting.
  40. * @property boolean debug - Turn on debugging (still attempts to send email); default: `0`
  41. * @property boolean html - Allow HTML in message; default: `1`
  42. * @property string msgTpl - If sent, the specified chunk will be used for the message body and the &message parameter will be ignored.
  43. * @property boolean hideOutput - Stifle all output from the snippet; ignored if debug is set; default: `0`
  44. * @property string success - Message to display when send is successful
  45. * @property string failure - Message to display when send is successful
  46. * @property string errorHeader - Header for mail error message
  47. * @property string smtpErrorHeader - Header for smtp server error messages section
  48. */
  49. /* Bail if the user is not logged in to the Manager -- prevents bots
  50. from triggering emails */
  51. if (! $modx->user->hasSessionContext('mgr')) return 'Unauthorized';
  52. /* save some typing */
  53. $sp = $scriptProperties;
  54. /* get the MODX mailer object */
  55. $modx->getService('mail', 'mail.modPHPMailer');
  56. /* set default values */
  57. $output = '';
  58. $debug = $modx->getOption('debug',$sp,false);
  59. if (is_string($debug) && strlen($debug) > 1) {
  60. $debug = stristr('no',$debug)? false : true;
  61. }
  62. $tpl = $modx->getOption('msgTpl',$scriptProperties,false);
  63. $message = $modx->getOption('message',$sp,false);
  64. $message = empty($message)? 'Default Message' : $message;
  65. $subject = $modx->getOption('subject',$sp);
  66. $subject = empty($subject)? 'Default Subject' : $subject;
  67. $to = $modx->getOption('to',$sp);
  68. $to = empty($to)? $modx->getOption('emailsender') : $to;
  69. $toName = $modx->getOption('toName',$sp);
  70. $toName = empty($toName)? $modx->getOption('emailsender') : $to;
  71. $fromName = $modx->getOption('fromName',$sp);
  72. $fromName = empty($fromName)? 'QuickEmail' : $fromName;
  73. $emailSender = $modx->getOption('emailSender',$sp);
  74. $emailSender = empty($emailSender) ? $modx->getOption('emailsender',null,false): $emailSender;
  75. $replyTo = $modx->getOption('replyTo',$sp);
  76. $replyTo = empty($replyTo)? $modx->getOption('emailsender'): $replyTo;
  77. $cc = $modx->getOption('cc', $sp, '');
  78. $bcc = $modx->getOption('bcc', $sp, '');
  79. $html = $modx->getOption('allowHtml',$sp,false);
  80. if (is_string($html) && strlen($html) > 1) {
  81. $html = stristr('no',$html)? false : true;
  82. }
  83. $hideOutput = $modx->getOption('hideOutput',$sp,false);
  84. if (is_string($hideOutput) && strlen($hideOutput) > 1) {
  85. $hideOutput = stristr('yes',$hideOutput)? true : false;
  86. }
  87. $failureMessage = $modx->getOption('failureMessage',$sp,false);
  88. $successMessage = $modx->getOption('successMessage',$sp,false);
  89. $errorHeader = $modx->getOption('errorHeader',$sp,false);
  90. if (! empty ($tpl) ) {
  91. $msg = $modx->getChunk($tpl);
  92. if (empty($msg) && $debug) {
  93. $output .= '<br />Error: Cannot find Tpl chunk: ' . $tpl;
  94. }
  95. } else {
  96. $msg = $message;
  97. }
  98. if (! $msg) {
  99. $msg = 'Default Message';
  100. }
  101. if ($debug) {
  102. $output .= '<h3>System Settings (used if property is missing):</h3>';
  103. $output .= '<b>emailsender System Setting:</b> ' .$modx->getOption('emailsender',$sp);
  104. $output .= '<br /><b>site_name System Setting:</b> ' .$modx->getOption('site_name',$sp);
  105. $output .= '<h3>Properties (from parameters, property set, or snippet default properties:</h3>';
  106. $output .= '<b>Tpl chunk name:</b> ' . $modx->getOption('msgTpl',$sp);
  107. $output .= '<br /><b>subject:</b> ' . $modx->getOption('subject',$sp);
  108. $output .= '<br /><b>to:</b> ' . $modx->getOption('to',$sp,'empty');
  109. $output .= '<br /><b>fromName:</b> ' . $modx->getOption('fromName',$sp);
  110. $output .= '<br /><b>replyTo:</b> ' . $modx->getOption('replyTo',$sp);
  111. $output .= '<br /><b>emailSender:</b> ' . $modx->getOption('emailSender',$sp);
  112. $output .= '<br /><b>allowHtml:</b> ' . $modx->getOption('allowHtml',$sp);
  113. $output .= '<br /><b>message:</b> ' . $modx->getOption('message',$sp);
  114. $output .= '<h3>Final Values (actually used when sending email):</h3>';
  115. $output .= '<b>subject:</b> ' .$subject;
  116. $output .= '<br /><b>to:</b> ' .$to;
  117. $output .= '<br /><b>fromName:</b> ' .$fromName;
  118. $output .= '<br /><b>replyTo:</b> ' .$replyTo;
  119. $output .= '<br /><b>emailSender:</b> ' .$emailSender;
  120. $output .= '<br /><b>allowHtml:</b> ' . $html;
  121. $output .= '<br /><b>Message Body:</b> ' . $msg;
  122. }
  123. $modx->mail->set(modMail::MAIL_BODY, $msg);
  124. $modx->mail->set(modMail::MAIL_FROM, $emailSender);
  125. $modx->mail->set(modMail::MAIL_FROM_NAME, $fromName);
  126. $modx->mail->set(modMail::MAIL_SENDER, $emailSender);
  127. $modx->mail->set(modMail::MAIL_SUBJECT, $subject);
  128. $modx->mail->address('to', $to, $toName);
  129. $modx->mail->address('reply-to', $replyTo);
  130. if (! empty ($cc)) {
  131. $modx->mail->address('cc', $cc);
  132. }
  133. if (!empty ($bcc)) {
  134. $modx->mail->address('bcc', $bcc);
  135. }
  136. $modx->mail->setHTML($html);
  137. if ($debug) {
  138. ob_start();
  139. echo '<pre>';
  140. if ($modx->getOption('mail_use_smtp') ) {
  141. $modx->mail->mailer->SMTPDebug = 2;
  142. }
  143. }
  144. $sent = $modx->mail->send();
  145. if ($debug) {
  146. echo '</pre>';
  147. $ob = ob_get_contents();
  148. ob_end_clean();
  149. }
  150. $modx->mail->reset();
  151. if ($sent) {
  152. $output .= $successMessage;
  153. if ($debug) {
  154. $output .= $ob;
  155. }
  156. } else {
  157. $output .= $failureMessage;
  158. $output .= $errorHeader;
  159. $output .= $modx->mail->mailer->ErrorInfo;
  160. if (!empty($ob)) {
  161. $output .= $smtpErrorHeader;
  162. }
  163. $output .= $ob;
  164. }
  165. $output = $hideOutput && (! $debug )? '' : $output . "<br /><br />";
  166. return $output;