No Description

Mailer.php 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace MailPoet\API\JSON\v1;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\API\JSON\Endpoint as APIEndpoint;
  5. use MailPoet\API\JSON\Error as APIError;
  6. use MailPoet\Config\AccessControl;
  7. use MailPoet\Mailer\MailerLog;
  8. use MailPoet\Mailer\MetaInfo;
  9. use MailPoet\Services\AuthorizedEmailsController;
  10. use MailPoet\Services\Bridge;
  11. use MailPoet\Settings\SettingsController;
  12. use MailPoet\WP\Functions as WPFunctions;
  13. class Mailer extends APIEndpoint {
  14. /** @var AuthorizedEmailsController */
  15. private $authorizedEmailsController;
  16. /** @var Bridge */
  17. private $bridge;
  18. /** @var SettingsController */
  19. private $settings;
  20. /** @var MetaInfo */
  21. private $mailerMetaInfo;
  22. public $permissions = [
  23. 'global' => AccessControl::PERMISSION_MANAGE_EMAILS,
  24. ];
  25. public function __construct(
  26. AuthorizedEmailsController $authorizedEmailsController,
  27. SettingsController $settings,
  28. Bridge $bridge,
  29. MetaInfo $mailerMetaInfo
  30. ) {
  31. $this->authorizedEmailsController = $authorizedEmailsController;
  32. $this->settings = $settings;
  33. $this->bridge = $bridge;
  34. $this->mailerMetaInfo = $mailerMetaInfo;
  35. }
  36. public function send($data = []) {
  37. try {
  38. $mailer = new \MailPoet\Mailer\Mailer();
  39. $mailer->init(
  40. (isset($data['mailer'])) ? $data['mailer'] : false,
  41. (isset($data['sender'])) ? $data['sender'] : false,
  42. (isset($data['reply_to'])) ? $data['reply_to'] : false
  43. );
  44. // report this as 'sending_test' in metadata since this endpoint is only used to test sending methods for now
  45. $extraParams = [
  46. 'meta' => $this->mailerMetaInfo->getSendingTestMetaInfo(),
  47. ];
  48. $result = $mailer->send($data['newsletter'], $data['subscriber'], $extraParams);
  49. } catch (\Exception $e) {
  50. return $this->errorResponse([
  51. $e->getCode() => $e->getMessage(),
  52. ]);
  53. }
  54. if ($result['response'] === false) {
  55. $error = sprintf(
  56. WPFunctions::get()->__('The email could not be sent: %s', 'mailpoet'),
  57. $result['error']->getMessage()
  58. );
  59. return $this->errorResponse([APIError::BAD_REQUEST => $error]);
  60. } else {
  61. return $this->successResponse(null);
  62. }
  63. }
  64. public function resumeSending() {
  65. if ($this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING)) {
  66. $this->authorizedEmailsController->checkAuthorizedEmailAddresses();
  67. }
  68. MailerLog::resumeSending();
  69. return $this->successResponse(null);
  70. }
  71. public function getAuthorizedEmailAddresses() {
  72. $authorizedEmails = $this->bridge->getAuthorizedEmailAddresses();
  73. return $this->successResponse($authorizedEmails);
  74. }
  75. }