Magentoの最新版では注文メールの再送ができなくなっています
この記事は公開から 1年以上が経過しています。現在の最新情報との整合性については弊社では一切の責任を負いかねます。
Magentoの最新版はCommunity Editionが1.8.1.0。Enterprise Editionは1.13.1.0ですが、この両方で普段の運用に関わる部分で少し困った修正が行われています。
CE-1.8.1 / EE-1.13.1をお使いの場合はこれまでのバージョンと挙動が異なりますので、注意してください。
CE-1.8.0 / EE-1.13.0までは注文メールの再送が可能だった
Magentoの注文管理画面には、「メール送信」というボタンが用意されています。
このボタンをクリックすると、その注文の内容を記載したメールを送信することができます。
例えば送信側、つまりはサイト側の障害によってメールが送信できなかった場合や、受信側やネットワーク障害でメールが受け取れなかった場合(あるいはスパムフィルタに引っかかったり、間違って削除してしまった場合など)に、メールを送り直すことができました。
開発者としてはこの機能を利用して、サイト構築時の注文メールのテスト(テンプレートの修正など)を行っていましたし、運営者の方でもメールが不達の場合に再送することができたので、利便性の高い機能であったと思います。
CE-1.8.1 / EE-1.13.1からは注文メールの再送はできなくなった
ところが最新版のCE-1.8.1 / EE-1.13.1では注文メールの再送ができなくなりました。
一度でも注文メールを送信した注文データに対しては、注文メールそのものの再送はできません。
管理画面には「メール送信」ボタンが表示されているのですが、ここをクリックしても何も起きません。
なぜこうなったのか。
理由は app/core/core/Mage/Sales/Model/Order.php の1264行目付近に加えられた4行の変更が理由です。
$emailSentAttributeValue = $this->load($this->getId())->getData('email_sent');
$this->setEmailSent((bool)$emailSentAttributeValue);
if ($this->getEmailSent()) {
return $this;
}
Magentoの注文データ上には、注文メールを送信したかどうかを管理する項目があります。「email_sent」という項目がそれにあたります。
この項目がtrueである場合、メール送信がされたものとしてMagentoは判断します。
つまり、Magentoからメールが送信されたにも関わらず、送信側の都合や受信側の都合でメールが届かなかった・削除された等の場合はすべてMagentoは「メールを送信済みである」と認識するのです。
先ほどの4行の修正によって、メールが送信されたとMagentoが認識している場合は、メールを送信せずに処理を終了してしまうため、1回でもメールを送信した注文データは、再度メールを送信できなくなるわけです。
対策方法
2014年1月8日現在での対策方法は以下のとおりです。
- app/core/core/Mage/Sales/Model/Order.phpをapp/local/core/Mage/Sales/Model/Order.phpにコピーする
- 先ほど示した4行を探し、削除するか、コメントアウト(//を行頭につける)する
やり方がわからない、自分で作業するのが怖い、という方はをご利用ください。
- お知らせ (34)
- Magento Open Source (169)
- Adobe Commerce (86)
- Magentoトピックス (349)
- Magentoバージョンアップ (11)
- OroCommerce (1)
- AkeneoPIM (16)
- Shopware (26)
- 世界のプライバシー保護規制 (11)
- OroCRM (14)
- Typo3 (9)
- イベント (27)
- Mage-OS (1)
- エクステンションリリース情報 (75)
- Mautic (1)