Magento
がメールを送信していない、国境を越えた、お問い合わせフォームでエラーが発生する
cannot send your mail at this moment
私はチェックした
/var/log/system.logおよびexception.logはエラーの原因ではなくエラーのみを示します
exception 'Zend_Mail_Transport_Exception' with message 'Unable to send mail. ' in /var/webshop/httpdocs/lib/Zend/Mail/Transport/Sendmail.php:137
Magentoが忘れたパスワードのメールを送信していないときにこの問題に遭遇しました(まだユーザーに報告していました)、_/var/log/exception.log
_を調べたところ、発生していたエラーが見つかりました:
_2012-05-30T04:27:54+00:00 ERR (3):
exception 'Exception' with message 'This letter cannot be sent.' in /home/magento/www/app/code/core/Mage/Core/Model/Email/Template.php:354
Stack trace:
#0 /home/magento/www/app/code/core/Mage/Core/Model/Email/Template.php(463): Mage_Core_Model_Email_Template->send(Array, Array, Array)
#1 /home/magento/www/app/code/core/Mage/Core/Model/Email/Template/Mailer.php(79): Mage_Core_Model_Email_Template->sendTransactional('customer_passwo...', 'support', Array, Array, Array, '1')
#2 /home/magento/www/app/code/core/Mage/Customer/Model/Customer.php(646): Mage_Core_Model_Email_Template_Mailer->send()
#3 /home/magento/www/app/code/core/Mage/Customer/Model/Customer.php(663): Mage_Customer_Model_Customer->_sendEmailTemplate('customer/passwo...', 'customer/passwo...', Array, '1')
#4 /home/magento/www/app/code/core/Mage/Customer/controllers/AccountController.php(554): Mage_Customer_Model_Customer->sendPasswordResetConfirmationEmail()
#5 /home/magento/www/app/code/core/Mage/Core/Controller/Varien/Action.php(420): Mage_Customer_AccountController->forgotPasswordPostAction()
#6 /home/magento/www/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('forgotpasswordp...')
#7 /home/magento/www/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#8 /home/magento/www/app/code/core/Mage/Core/Model/App.php(349): Mage_Core_Controller_Varien_Front->dispatch()
#9 /home/magento/www/app/Mage.php(640): Mage_Core_Model_App->run(Array)
#10 /home/magento/www/index.php(84): Mage::run('default', 'store')
#11 {main}
_
そのため、_/app/code/core/Mage/Core/Model/Email/Template.php
_を開き、このエラー(354行目)をスローしていたコードは次のとおりでした。
_if (!$this->isValidForSend()) {
Mage::logException(new Exception('This letter cannot be sent.')); // translation is intentionally omitted
return false;
}
_
isValidForSend()
を見てみました:
_public function isValidForSend()
{
return !Mage::getStoreConfigFlag('system/smtp/disable')
&& $this->getSenderName()
&& $this->getSenderEmail()
&& $this->getTemplateSubject();
}
_
これらのいずれかがfalse
を返す必要があるため、関数の開始時に変数のロギングを追加しました。
_Mage::Log(var_export(!Mage::getStoreConfigFlag('system/smtp/disable'),true).';'.var_export($this->getSenderName(),true).';'.var_export($this->getSenderEmail(),true).';'.var_export($this->getTemplateSubject(),true),null,'email.log');
_
これにより、次のようなログファイル_/var/log/email.log
_が作成されます。
_2012-05-30T04:44:37+00:00 DEBUG (7): false;'CustomerSupport';'[email protected]';'Password Reset Confirmation for {{var customer.name}}'
_
したがって、問題は次のとおりです:!Mage::getStoreConfigFlag('system/smtp/disable')
これを_Admin > System > Configuration > Advanced > System > Mail Sending Settings
_で修正し、_Disable Email Communications
_をNo
に変更して、メールを[〜#〜]に変更できますnot [〜#〜]無効。
今それは動作します:)
すべてのphpプログラムは、phpmailを使用してメールを送信するという適切な作業を行うことができます。
エラーメッセージが表示された場合、Magentoビルドが実行しようとしていることは異なります。Zendライブラリ経由でSendmailを使用してください。
Sendmailのインストールをビルドしてテストする必要があります。または、gmailなどの他のメールサービスを使用して、Magentoで使用できるようにします。
それが自分、自分のコンピュータ、Magentoのいずれであるかをテストするには、Roundcube Mailなどの他のプログラムをそこに置きます。 Roundcube Mailがメールを送信できる場合は、Sendmailが機能していることがわかります。機能していない場合は、Sendmailに問題があることがわかります。
Sendmailの修正はディストリビューション固有です。
また、注文メールがCE 1.9.1で送信されない問題にも苦労しましたが、しばらくすると問題が見つかりました。
Magento CE 1.9.1以降、Magentoは注文プロセス中に注文メールを直接送信しません。代わりに、メールはキューに入れられ、cronによって送信されます。そのため、Magento cronjobを適切に設定してください。
以下も参照してください。
http://www.magentocommerce.com/knowledge-base/entry/ee1141-ce191-responsive-email#cronhttp://www.magentocommerce.com/knowledge-base/ entry/ce18-and-ee113-installing#install-cron
public function isValidForSend()
{
return !Mage::getStoreConfigFlag('system/smtp/disable')
&& $this->getSenderName()
&& $this->getSenderEmail()
&& $this->getTemplateSubject();
}
また、私の場合は、エラーログでこの機能に移動しました。管理者の設定は問題ありませんでした。しかし、テンプレートが/ app/locale /フォルダーの下にないため、$ this-> getTemplateSubject()はfalse値を送信していました。欠けていたテンプレートを追加しました。その後、それは私のために働いた。
sendmail
デフォルトのトランスポートでMagento
が電子メールを送信する場合、これはphp
問題になる可能性があります。
SendmailがMXドメインにメールをリレーするのではなく、ローカルドメインのメールを拒否する状況を経験しました
http://www.masterdef.net/blog/magento-unable-to-send-mail-sendmail-configuration/#more-1
確認することをお勧めしますmail.log
サーバー上で、user unknown
は、誤ったsendmail
構成を意味します
メールテンプレートに問題がある場合は、このエラーが発生します。メールログを確認する前に、メールテンプレートを確認してください。さらに、カスタムメールテンプレートを使用している場合は、コードが壊れていません。