Mail.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Contact\Model;
  7. use Magento\Framework\Mail\Template\TransportBuilder;
  8. use Magento\Framework\Translate\Inline\StateInterface;
  9. use Magento\Store\Model\StoreManagerInterface;
  10. use Magento\Framework\App\ObjectManager;
  11. use Magento\Framework\App\Area;
  12. class Mail implements MailInterface
  13. {
  14. /**
  15. * @var ConfigInterface
  16. */
  17. private $contactsConfig;
  18. /**
  19. * @var TransportBuilder
  20. */
  21. private $transportBuilder;
  22. /**
  23. * @var StateInterface
  24. */
  25. private $inlineTranslation;
  26. /**
  27. * @var StoreManagerInterface
  28. */
  29. private $storeManager;
  30. /**
  31. * Initialize dependencies.
  32. *
  33. * @param ConfigInterface $contactsConfig
  34. * @param TransportBuilder $transportBuilder
  35. * @param StateInterface $inlineTranslation
  36. * @param StoreManagerInterface|null $storeManager
  37. */
  38. public function __construct(
  39. ConfigInterface $contactsConfig,
  40. TransportBuilder $transportBuilder,
  41. StateInterface $inlineTranslation,
  42. StoreManagerInterface $storeManager = null
  43. ) {
  44. $this->contactsConfig = $contactsConfig;
  45. $this->transportBuilder = $transportBuilder;
  46. $this->inlineTranslation = $inlineTranslation;
  47. $this->storeManager = $storeManager ?: ObjectManager::getInstance()->get(StoreManagerInterface::class);
  48. }
  49. /**
  50. * Send email from contact form
  51. *
  52. * @param string $replyTo
  53. * @param array $variables
  54. * @return void
  55. */
  56. public function send($replyTo, array $variables)
  57. {
  58. /** @see \Magento\Contact\Controller\Index\Post::validatedParams() */
  59. $replyToName = !empty($variables['data']['name']) ? $variables['data']['name'] : null;
  60. $this->inlineTranslation->suspend();
  61. try {
  62. $transport = $this->transportBuilder
  63. ->setTemplateIdentifier($this->contactsConfig->emailTemplate())
  64. ->setTemplateOptions(
  65. [
  66. 'area' => Area::AREA_FRONTEND,
  67. 'store' => $this->storeManager->getStore()->getId()
  68. ]
  69. )
  70. ->setTemplateVars($variables)
  71. ->setFrom($this->contactsConfig->emailSender())
  72. ->addTo($this->contactsConfig->emailRecipient())
  73. ->setReplyTo($replyTo, $replyToName)
  74. ->getTransport();
  75. $transport->sendMessage();
  76. } finally {
  77. $this->inlineTranslation->resume();
  78. }
  79. }
  80. }