回答:
メールを送信するものが見つかるまで、Magento 2コードベースで「メール」、「メッセージ」などの文字列を検索し始めました。でsendPaymentFailedEmail()を見つけましたvendor/magento/module-checkout/Helper/Data.php
。これにより多くの変数が設定されますが、最終的にそれらを「transportBuilder」を介して作成されるトランスポートオブジェクトに結び付けます。このtransportBuilderはのインスタンスです\Magento\Framework\Mail\Template\TransportBuilder
。
そのファイルに$transport
は、のインスタンスである変数が存在します\Magento\Framework\Mail\TransportInterface
。インターフェースがあるため、と呼ばれる通常のクラスもあります\Magento\Framework\Mail\Transport
。ファイルを開くと、vendor/magento/framework/Mail/Transport.php
これがZend_Mail_Transport_Sendmailを拡張していることがわかります。
Transportクラスは\ Zend_Mail_Transport_Sendmailを拡張し、\ Magento \ Framework \ Mail \ TransportInterfaceを実装します
これはあなたが探しているものです。DIを使用すると、このトランスポートを、Zend_Mailの代わりにMandrillやAmazon SESなどの別のメールフレームワークに置き換えることができます。
send()
メソッドはinで呼び出されるため、必ずメソッドを含めるようにしてくださいsendMessage()
。
public function sendMessage()
{
try {
parent::send($this->_message);
} catch (\Exception $e) {
throw new \Magento\Framework\Exception\MailException(new \Magento\Framework\Phrase($e->getMessage()), $e);
}
}
Magento 2 TransportBuilder
は、メールテンプレートを使用してメールの本文を作成します。プレーンテキストを送信するために見つけた最も簡単な方法-使用Zend_Mail
(Magento 2自体で使用):
$email = new \Zend_Mail();
$email->setSubject("Feedback email");
$email->setBodyText($body);
$email->setFrom($from, $nameFrom);
$email->addTo($to, $nameTo);
$email->send();
/srv/public_html/pub/test.php
か?
PHPがmail()
時代遅れであり、3 番目をサポートしていないという仮定がしばしば行われます。パーティーサービス。
すべての良い3番目として、それは実際に間違っています。パーティサービスはSMTPインターフェイスをサポートしていmail()
ます。
Amazon SESはSMTPをサポートします。
SMTPを介した送信mail()
については、この回答で説明されています:https : //stackoverflow.com/a/14457410/716029
Magento 2 は、カスタムメールの送信に\ Magento \ Framework \ Mail \ Template \ TransportBuilderクラスを使用します。
シンプルなモジュールを作成し、トランザクションメールテンプレートを定義するためにemail_tempaltes.xmlファイルを設定する必要があります。
AdminhtmlまたはFrontend Scopeエリアからメールを送信できます。
モジュールを使用してMagento 2からカスタムメールを送信するためのステップバイステップガイドのリンクを共有しました。
$email->setBodyHtml($body)