SmtpTransportAdapter.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace Dotdigitalgroup\Email\Model\Mail;
  3. use Dotdigitalgroup\Email\Helper\Transactional;
  4. use Magento\Framework\Mail\TransportInterface;
  5. use Zend\Mail\Message;
  6. use Zend_Mail;
  7. class SmtpTransportAdapter
  8. {
  9. /**
  10. * @var Transactional
  11. */
  12. private $transactionalEmailSettings;
  13. /**
  14. * @var SmtpTransportZend1
  15. */
  16. private $smtpTransportZendV1;
  17. /**
  18. * @var SmtpTransportZend2
  19. */
  20. private $smtpTransportZendV2;
  21. /**
  22. * SmtpTransportAdapter constructor.
  23. *
  24. * @param Transactional $transactionalEmailSettings
  25. * @param SmtpTransportZend1 $smtpTransportZendV1
  26. * @param SmtpTransportZend2 $smtpTransportZendV2
  27. */
  28. public function __construct(
  29. Transactional $transactionalEmailSettings,
  30. SmtpTransportZend1 $smtpTransportZendV1,
  31. SmtpTransportZend2 $smtpTransportZendV2
  32. ) {
  33. $this->transactionalEmailSettings = $transactionalEmailSettings;
  34. $this->smtpTransportZendV1 = $smtpTransportZendV1;
  35. $this->smtpTransportZendV2 = $smtpTransportZendV2;
  36. }
  37. /**
  38. * @param TransportInterface $subject
  39. * @param int $storeId
  40. *
  41. * @throws \ReflectionException
  42. * @throws \Zend_Mail_Transport_Exception
  43. */
  44. public function send($subject, $storeId)
  45. {
  46. $message = $this->getMessage($subject);
  47. $this->sendMessage($message, $storeId);
  48. }
  49. /**
  50. * @param TransportInterface $subject
  51. *
  52. * @return Zend_Mail|\Magento\Framework\Mail\Message
  53. * @throws \ReflectionException
  54. */
  55. private function getMessage($subject)
  56. {
  57. if (method_exists($subject, 'getMessage')) {
  58. $message = $subject->getMessage();
  59. } else {
  60. $message = $this->useReflectionToGetMessage($subject);
  61. }
  62. return $message;
  63. }
  64. /**
  65. * @param Zend_Mail|\Magento\Framework\Mail\Message $message
  66. * @param int $storeId
  67. *
  68. * @throws \Zend_Mail_Transport_Exception
  69. */
  70. private function sendMessage($message, $storeId)
  71. {
  72. if ($message instanceof \Zend_Mail) {
  73. $this->smtpTransportZendV1->send(
  74. $message,
  75. $storeId
  76. );
  77. } else {
  78. $this->smtpTransportZendV2->send(
  79. Message::fromString($message->getRawMessage()),
  80. $storeId
  81. );
  82. }
  83. }
  84. /**
  85. * @param TransportInterface $subject
  86. *
  87. * @return Zend_Mail
  88. * @throws \ReflectionException
  89. */
  90. private function useReflectionToGetMessage($subject)
  91. {
  92. $reflection = new \ReflectionClass($subject);
  93. $property = $reflection->getProperty('_message');
  94. $property->setAccessible(true);
  95. $message = $property->getValue($subject);
  96. return $message;
  97. }
  98. }