Magento 2:プログラムでメールを送信する


24

Magento 2には、Amazon SES、Mandrillなどのサードパーティトランザクションメール配信システムとの組み込み統合がありますか、それとも組み込みのメール機能はまだPHPのmail機能に基づいていますか?または、電子メールは3つ目のものと一緒に送信されますか?

答えがの場合、mailMagento 2用のSMTPProのようなサードパーティの拡張機能があり、開発者が標準の電子メールシステムを置き換えることができますか?

回答:


13

メールを送信するものが見つかるまで、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);
    }
}

12

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();

3
ボディをhtml形式で送信する場合は、次を使用できます$email->setBodyHtml($body)
アニッシュカリム

これは素晴らしいです、しかし、あなたがGoogleのようなものを経由して、SMTPを使用している場合には、このスレッドに従うstackoverflow.com/questions/3455674/...
Ahdee

私は、Magentoの上でこれを試みたが、エラーが致命的なエラーになっています:致命的なエラー:不明なエラー:クラスのZend_Mailを使用」は/srv/public_html/pub/test.phpでは見られない
Nagaraju K

@NagarajuK、作曲家のオートローダーをあなたに含めました/srv/public_html/pub/test.phpか?
アレックスグセフ

test.phpファイルに作曲家の自動ローダーを追加する方法について、@ AlexGusevをガイドすることはできませんか?
ナガラジュK

8

PHPがmail()時代遅れであり、3 番目をサポートしていないという仮定がしばしば行われます。パーティーサービス。
すべての良い3番目として、それは実際に間違っています。パーティサービスはSMTPインターフェイスをサポートしていmail()ます。

Amazon SESはSMTPをサポートします。

SMTPを介した送信mail()については、この回答で説明されています:https : //stackoverflow.com/a/14457410/716029


1
有益な情報を得るために+1-しかし、MagentoがHTTPサービス経由でさまざまな電子メールをサポートするために持っている抽象化がある場合、それが何であるかにまだ興味があります。
アランストーム

残念ながら、Zend_Mail以外の特定の実装はありません。
ピーターヤープブラクメール16年

-1

Magento 2 は、カスタムメールの送信に\ Magento \ Framework \ Mail \ Template \ TransportBuilderクラスを使用します。

シンプルなモジュールを作成し、トランザクションメールテンプレートを定義するためにemail_tempaltes.xmlファイルを設定する必要があります。

AdminhtmlまたはFrontend Scopeエリアからメールを送信できます。

モジュールを使用してMagento 2からカスタムメールを送信するためのステップバイステップガイドのリンクを共有しました。

Magento 2モジュールからカスタムメールを送信する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.