新規注文の確認メールが送信されていません


回答:


96
  1. Magento 1.9.1以降、メールはチェックアウト時に直接送信されず、キューに入れられます。
  2. キューは、Magento cronジョブを介して処理されています-これが設定され、正しく実行されいることを確認してください。
  3. 拡張機能AOE_Schedulerは、Magento cronjobが正しく構成され、実行されていることを確認するのに役立ちます。

6
cron.sh実行されていることを確認してください!cronが正しく構成されていないことを発見するために、これを1日中デバッグしました。
forsvunnet

2
cron.phpが機能しているかどうかを知る方法は?
Teja Bhagavan Kollepara

2
/ var / log / cron内のログをトレースできます
Beto Castillo

Magento 2の注文メールに問題があります。Cronも実行されていますが、メールが送信されません。cronタスクのほとんどは、データベーステーブルにありません。どうすれば解決できますか?
Magecode

@Magecode最初にMagento 2固有の質問を検索することをお勧めします。誰もあなたがこれまでに見つけた/除外したものに関する詳細を含むあなた自身の質問を自由に追加してください。
フーマンでクリストフ

29

Magento 1ストアからメールを送信するには、2つの方法があります。

  1. cronを使用して
  2. cronを回避する

cronを避けたい場合:

でorder.phpファイルを開きます

app / code / core / Mage / Sales / Model / Order.php

Line#1356,1450、

変化する

//$mailer->setQueue($emailQueue)->send(); 

に:

$mailer-> send();

In app/design/frontend/base/default/template/checkout/success.phtml:次の行を追加メールを直接送信するための成功ページ

$order = Mage::getModel('sales/order');
$incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
$order->loadByIncrementId($incrementId);
try{ 
    $order->sendNewOrderEmail();
} catch (Exception $ex) { 
    echo "Email Not Sent..."; 
}
$customer = Mage::getSingleton('customer/session')->getCustomer();
$email = $customer->getEmail();
//End Email Sending

完璧に働いて、必要がbecoz、それが正常に動作しているように見えることなく、success.phtmlにコードを追加することである
Suneth Kalhara

3
こんにちはこれを聞いて幸せ。トランザクションメールはすぐにメールに到達するため、コードを追加する必要はありません。
テジャバガヴァンKollepara

1
ベンダーコードを変更(または上書き)しないでください-アップグレードするとどうなりますか?
バチ

20

Template.phpから次のメールキューコードを削除し、顧客から注文があったとき、または管理パネルの[販売/注文]タブで[メールを送信]をクリックしたときにメールの受信を開始しました。

Magentoは、インスタントメールの代わりにスケジュールジョブで送信されるように注文メールを設定していました...おそらくパフォーマンス上の理由からですか?( Template.phpと5分ごとに実行するスケジュールジョブを設定および実行する方法を見つけます...

Template.phpは=> /app/code/core/Mage/Core/Model/Email/Template.phpにあります

   if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) { 

    /** @var $emailQueue Mage_Core_Model_Email_Queue */
        $emailQueue = $this->getQueue();
        $emailQueue->setMessageBody($text);
        $emailQueue->setMessageParameters(array(
                'subject'           => $subject,
                'return_path_email' => $returnPathEmail,
                'is_plain'          => $this->isPlain(),
                'from_email'        => $this->getSenderEmail(),
                'from_name'         => $this->getSenderName(),
                'reply_to'          => $this->getMail()->getReplyTo(),
                'return_to'         => $this->getMail()->getReturnPath(),
            ))
            ->addRecipients($emails, $names, Mage_Core_Model_Email_Queue::EMAIL_TYPE_TO)
            ->addRecipients($this->_bccEmails, array(), Mage_Core_Model_Email_Queue::EMAIL_TYPE_BCC);
        $emailQueue->addMessageToQueue();

        return true;
    }

この方法で問題は解決しましたが、ニュースレターの購読は機能していません。古いtemplate.phpに戻すとニュースレターの購読の問題が解決しました。
バラジサンダル

14

次の2つのソリューションがあります。

解決策-01:cronを使用する

システム>設定>詳細設定>システム> Cron

デフォルト設定は次のとおりです。

まず、Magento 1.9+はcronジョブに完全に依存してトランザクションメールを送信します。以前にcronジョブを適切に設定していない場合は、今すぐにそれを行う必要があります。

まず、Magento adminの下でcronタスクを設定したことを確認してください

システム>設定>詳細設定>システム> Cron

デフォルト設定は次のとおりです。

15ごとにスケジュールを生成します20以内に実行されない場合は20のスケジュールを先送りします15履歴ごとにクリーンアップ10成功ごとライフタイム60失敗履歴ライフタイム600

これらの設定を変更することを提案する人もいますが、最良の組み合わせについては同意できないようなので、そのままにしておきます。

次に、ホスティングコントロールパネルに移動して、cronジョブを設定する必要があります。cPanelでは、[詳細設定]> [Cronジョブ]の下にあります。5分ごとに実行するように設定し、次のコマンドを使用します。

php -f /home/username/public_html/cron.php

上記のパスが正しいこと、およびファイルcron.phpが実際にMagentoインストールのルートに存在することを確認してください(アップグレードしたばかりの場合はそうである必要があります)。ユーザー名を正しいアカウントに変更します。

今、私は最初にxgetto.comのwgetコマンド文字列を使用するように言っている開発者のアドバイスに従うというミスを犯しました:wget -O / dev / null -q http://www.YOURDOMAIN.com/PATH_TO_MAGENTO/cron。 php

解決策-02:cronを避ける

トランザクションメールはすぐに送信されます。

//app/code/core/Mage/Sales/Model/Order.php Line#1356,1450 
  //$mailer->setQueue($emailQueue)->send(); Change To 

          $mailer->send();

app/design/frontend/base/default/template/checkout/success.phtml
    //add following line Top success page for sending mail direct
    // Start Send Emai Here......
    $order = Mage::getModel('sales/order');
    $incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId(); 
    $order->loadByIncrementId($incrementId);

    try{ $order->sendNewOrderEmail();} 
    catch (Exception $ex) { echo "Email Not Sent..."; }
    $customer = Mage::getSingleton('customer/session')->getCustomer();
    $email = $customer->getEmail();//End Email Sending

10

Magento 1.9では、すべての電子メールがキューに入れられ、後でCronを介して送信されます。

Magento 1.9リリースノート

あなたのトランザクションの電子メールは、クロンを介して送信されるようにしたい場合は、よりからのcronを設定することができ、システム ]> [ 設定 ]> [ システム ]タブの下のクーロン ORでのcronを作成CPanelのあなたにそれを指示cron.shcron.phpルートMagentoのディレクトリにあります。


10

「SMTP Pro Email」拡張機能をインストールするだけです:http : //www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html

カスタムSMTPの詳細を入力して完了します。


これを理解するのに丸2日かかりました。cronジョブは必要ありませんが、cronジョブを機能させたい場合や、上記の作業をしたくない場合は、次のことができます。

Magentoルートディレクトリでcron.phpを編集します

後:

$isShellDisabled = (stripos(PHP_OS, win’) === false) ? $isShellDisabled : true;

次のコード行を追加します。

$isShellDisabled = true;

Cronジョブを設定する

Cパネルで[Cronジョブ]セクションを開き
ます。15分ごとに次のコマンドを実行するcronジョブを作成します。

php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php

SMTP Proでは、Magento 1.9.1以降でこの設定を行う必要があることに注意してください。システム->設定-> SMTP Pro->キュー設定->キュー使用法がデフォルトからなしに変更されます。
シュレニック

8

Magento 1.9.1.0では、Magentoに新しい機能が追加されましたcore_email_queue。注文の電子メールを送信するために、注文の電子メールをテーブルに保存します。cron.phpサーバーで設定する必要があります

cron.phpファイルには、設定core_email_queue_send_allのcronスケジュールテーブルに。クローンがから呼び出された「送信」メソッドを実行するときMage_Core_Model_Email_Queue。彼らは顧客にメールを送ります。

したがって、上記の修正はコアファイルを変更せずに機能しています。


6

以下のコマンドのように、サーバーでcronのセットアップを行うだけで、セールスメールの受信が開始されます。

php -q /home/YOUR_USER_NAME/public_html/Path_to_cron.php

一般的な設定を「*****」として使用します

YOUR_USER_NAMEとPath_to_cron.phpをあなたのものに置き換える必要があります。


6

n98-magerunを使用して、次を実行します。

n98-magerun sys:cron:run core_email_queue_send_all

または、常に実行したくない場合に時間を計るには:

watch -n 10 n98-magerun sys:cron:run core_email_queue_send_all

これにより、キュー内のすべての電子メールが10秒ごとに送信されます。


6

godaddyサーバーの場合、cronjobのセットアップ中に次のコードを使用します。

*   *   *   *   *   /usr/local/bin/php -q /home/steelwa/public_html/project_name/cron.php

これは毎分実行されます。ここに画像の説明を入力してください


5

送信していない注文メールのみの場合、Magentoは注文メールのみをキューに入れて保存し、バッチで送信するためです。Heartbeat Cronのセットアップがない場合は、Magentoのキューから離れることはありません。

他のMagentoの電子メールは、Magentoからメーラーデーモンに直接渡されるため、表示されています。Magentoのキュー(注文メールなど)は、Hearbeat Cronが実行されるまでメーラーデーモンに渡されません。

それらを強制的に外に出すには、http://yourmagentodomain.com/cron.phpに移動し、そのページを5分ごとに更新し続けると、キューに入れられた注文の電子メールが送信され始めます。Heartbeat Cronはあなたのためにこれを行うことになっています。ああ、そのcron.phpファイルに移動すると、ページは空白になるはずなので、心配しないでください...動作します。


5

私は同じ問題を抱えていて、それが拡張機能に関連していることがわかりました。Fooman Email Attachmentsがv0.10.4。に更新されました。v0.10.3以下のバージョンは、Magento 1.9では動作しません。


5

私は知識ベースに従ってそれを機能させました:http : //www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-responsive-email#contact-info

「トランザクション電子メールのローカライズ」の部分では、前の指示に従って/ en_UKにコピーすると、最終的に電子メール(以前に送信されなかったものも含む)を取得し、注文確認ページが顧客に表示されないという問題もありました完了。これも修正されました。

たとえば、en_GBロケールの場合、次の場所にあるファイルをコピーする必要があります。

app / locale / en_US / template / email

場所へ:

app / locale / en_GB / template / email


2
Magento SEへようこそ!あなたの答えをさらに詳しく説明することはできますか(コード例など)。
ベンチマーク14

3

メールシステム(smtp、zend_mail)が正常に機能する場合。mailQueueを無効にすると、問題が解決する場合があります。

/app/code/core/Mage/Core/Model/Email/Template.php

行407を変更

if ($this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue) {

if (false /\*$this->hasQueue() && $this->getQueue() instanceof Mage_Core_Model_Email_Queue\*/) {

5
これにより、連絡先フォームの機能が破損します。
ゾヤ

9
コアを編集しないでください
ケビンシュローダー

1
COREへの変更が必要なソリューションを提供しないでください。コアクラスは変更しないでください。
アーサンホラニ

2

拡張機能SMTPproがある場合は、無効にします。もう一度確認してください。すべての電子メールは正常に機能し、正しく構成する必要があるだけです。


0

より良い方法は、app / code / core / Mage / Core / Model / Email / Template / Mailer.phpのコピーを作成することです

ローカルフォルダーにapp / code / local / Mage / Core / Model / Email / Template / Mailer.php

次に、76行目のこの行をコメントアウトします。

->setQueue($this->getQueue())

これで完了です。success.phtmlテンプレートを変更する必要はありません。:D

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