回答:
cron.sh
実行されていることを確認してください!cronが正しく構成されていないことを発見するために、これを1日中デバッグしました。
Magento 1ストアからメールを送信するには、2つの方法があります。
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
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;
}
次の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
Magento 1.9では、すべての電子メールがキューに入れられ、後でCronを介して送信されます。
あなたのトランザクションの電子メールは、クロンを介して送信されるようにしたい場合は、よりからのcronを設定することができ、システム ]> [ 設定 ]> [ システム ]タブの下のクーロン ORでのcronを作成CPanelのあなたにそれを指示cron.shかcron.phpルートMagentoのディレクトリにあります。
「SMTP Pro Email」拡張機能をインストールするだけです:http : //www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html
カスタムSMTPの詳細を入力して完了します。
これを理解するのに丸2日かかりました。cronジョブは必要ありませんが、cronジョブを機能させたい場合や、上記の作業をしたくない場合は、次のことができます。
後:
$isShellDisabled = (stripos(PHP_OS, ‘win’) === false) ? $isShellDisabled : true;
次のコード行を追加します。
$isShellDisabled = true;
Cパネルで[Cronジョブ]セクションを開き
ます。15分ごとに次のコマンドを実行するcronジョブを作成します。
php -f /home/USERNAME/public_html/domain.com/magento_folder/cron.php
Magento 1.9.1.0では、Magentoに新しい機能が追加されましたcore_email_queue
。注文の電子メールを送信するために、注文の電子メールをテーブルに保存します。cron.php
サーバーで設定する必要があります
cron.php
ファイルには、設定core_email_queue_send_all
のcronスケジュールテーブルに。クローンがから呼び出された「送信」メソッドを実行するときMage_Core_Model_Email_Queue
。彼らは顧客にメールを送ります。
したがって、上記の修正はコアファイルを変更せずに機能しています。
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秒ごとに送信されます。
送信していない注文メールのみの場合、Magentoは注文メールのみをキューに入れて保存し、バッチで送信するためです。Heartbeat Cronのセットアップがない場合は、Magentoのキューから離れることはありません。
他のMagentoの電子メールは、Magentoからメーラーデーモンに直接渡されるため、表示されています。Magentoのキュー(注文メールなど)は、Hearbeat Cronが実行されるまでメーラーデーモンに渡されません。
それらを強制的に外に出すには、http://yourmagentodomain.com/cron.phpに移動し、そのページを5分ごとに更新し続けると、キューに入れられた注文の電子メールが送信され始めます。Heartbeat Cronはあなたのためにこれを行うことになっています。ああ、そのcron.phpファイルに移動すると、ページは空白になるはずなので、心配しないでください...動作します。
私は知識ベースに従ってそれを機能させました: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
メールシステム(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\*/) {