How To send Order Email Programmatically
In Magento 2.2.8
2 Answers
You can try this code:
$email = '[email protected]';
$orderid = 100;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$order = $objectManager->create('Magento\Sales\Model\Order')->load($orderid);
$order->setCustomerEmail($email);
if ($order) {
try {
$objectManager->create('\Magento\Sales\Model\OrderNotifier')->notify($order);
echo 'You sent the order email.';
} catch (\Magento\Framework\Exception\LocalizedException $e) {
echo($e->getMessage());
} catch (\Exception $e) {
echo(__('We can\'t send the email order right now.'));
echo($e->getMessage());
}
}
-
Should avoid using object manager like this devdocs.magento.com/guides/v2.3/extension-dev-guide/… Jul 8, 2019 at 17:26
-
-
@RkRathod Please do up vote and accept the answer so it will helpful for other developers.– KKRJul 22, 2019 at 5:06
-
Something like this
use Magento\Sales\Model\Order\Email\Sender\OrderSender;
{
/**
* @var \Psr\Log\LoggerInterface
*/
private $logger;
/**
* @var OrderSender
*/
private $orderSender;
/**
* @param \Psr\Log\LoggerInterface $logger
* @param OrderSender $orderSender
*/
public function __construct(
\Psr\Log\LoggerInterface $logger,
OrderSender $orderSender
) {
$this->logger = $logger;
$this->orderSender = $orderSender;
}
/**
* @return void
*/
public function doStuff()
{
// load order however you would like
$order = [load order logic]
try {
$this->orderSender->send($order);
} catch (\Exception $e) {
$this->logger->critical($e);
}
}
}