새 주문 이메일 확인이 전송되지 않습니다


답변:


96
  1. Magento 1.9.1부터는 이메일을 체크 아웃하는 동안 직접 보내지 않고 대기열에 넣습니다.
  2. 대기열이 Magento cronjob을 통해 처리 중입니다. 대기열이 설정되어 있고 올바르게 실행 중인지 확인하십시오 .
  3. 확장 AOE_Scheduler 는 Magento cronjob이 올바르게 구성되어 실행 중인지 확인하는 데 도움이됩니다.

6
cron.sh실행 중인지 확인하십시오 ! 우리는 방금 크론이 잘못 구성되었음을 발견하기 위해 하루 종일 이것을 디버깅했습니다.
forsvunnet

2
cron.php의 작동 여부를 확인하는 방법은 무엇입니까?
Teja Bhagavan Kollepara

2
/ var / log / cron
Beto Castillo

Magento 2에서 주문 이메일에 문제가 있습니다. Cron도 실행 중이지만 메일이 발송되지 않습니다. 데이터베이스 테이블에서 대부분의 크론 태스크가 누락되었습니다. 어떻게 해결할 수 있습니까?
마법사 코드

@Magecode 먼저 Magento 2 관련 질문을 검색하는 것이 좋습니다. 아무도 없다면 지금까지 찾거나 배제 한 것에 대한 세부 사항으로 자신의 질문을 자유롭게 추가하십시오.
Fooman의 Kristof

29

Magento 1 매장에서 메일을 발송하는 방법은 2 가지가 있습니다.

  1. cron을 사용하여
  2. cron을 피함으로써

cron을 피하려면 :

order.php 파일을여십시오.

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

라인 # 1356,1450,

변화

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

에:

$mailer-> send();

에서 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

완벽하게 작동하면 정상적으로 작동하는 것없이 success.phtml becoz에 코드를 추가해야합니다.
Suneth Kalhara

3
안녕하세요. 기뻐요. 거래 메일이 즉시 이메일에 도달하므로 코드를 추가 할 필요가 없습니다.
Teja Bhagavan Kollepara

1
공급 업체 코드를 변경하거나 덮어 쓰지 마십시오. 업그레이드 할 때 어떻게됩니까?
Bachi

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로 롤백하면 뉴스 레터 구독 문제가 해결되었습니다.
balajisoundar

14

다음과 같은 두 가지 해결책이 있습니다.

솔루션 -01 : cron 사용

시스템> 구성> 고급> 시스템> Cron

기본 설정은 다음과 같습니다.

우선, Magento 1.9+는 트랜잭션 이메일을 보내기 위해 크론 작업에 전적으로 의존합니다. cron 작업이 제대로 설정되지 않았다면 지금해야합니다.

우선 Magento 관리자에서 cron 작업을 설정했는지 확인하십시오.

시스템> 구성> 고급> 시스템> Cron

기본 설정은 다음과 같습니다.

15 일 내에 실행하지 않으면 누락 된 20 개에 대해 15 개 스케줄마다 스케줄 생성

이 설정을 변경해야한다고 제안하는 사람들이 있지만 최상의 조합에 동의 할 수 없기 때문에 그대로 둡니다.

그런 다음 호스팅 제어판으로 가서 크론 작업을 설정해야합니다. cPanel에서는 고급> 크론 작업 아래에 있습니다. 5 분마다 실행되도록 설정하고 다음 명령을 사용하십시오.

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

위의 경로가 올바른지 확인하고 cron.php 파일이 실제로 Magento 설치 루트에 있는지 확인하십시오 (방금 업그레이드 한 경우). 사용자 이름을 올바른 계정으로 변경하십시오.

이제 처음에는 wget 명령 문자열을 사용한다고 말하는 xtento.com 개발자의 조언을 따르지 않았습니다. wget -O / dev / null -q http://www.YOURDOMAIN.com/PATH_TO_MAGENTO/cron. PHP

솔루션 -02 : 크론 피하기

거래 이메일은 즉시 발송됩니다.

//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을 통해 전송됩니다.

마 젠토 1.9 릴리즈 노트

Cron을 통해 거래 이메일을 보내 려면 Cron 탭의 시스템 > 구성 > 시스템 에서 cron을 설정 하거나 Cpanel 에서 cron을 만들어 루트 Magento 디렉토리에있는 cron.sh 또는 cron.php로 직접 보내십시오 .


10

"SMTP Pro Email"확장명을 설치하십시오 : http://www.magentocommerce.com/magento-connect/smtp-pro-email-free-custom-smtp-email.html

사용자 정의 SMTP 세부 사항을 입력하고 완료하십시오.


알아내는 데 이틀이 걸렸습니다. 크론 작업이 필요하지 않지만 크론 작업을 원하고 위의 작업을 원하지 않는 경우 다음을 수행 할 수 있습니다.

Magento 루트 디렉토리에서 cron.php 편집

후:

$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

SMTP Pro의 경우 Magento 1.9.1 이상에서이 구성을 수행해야합니다. 시스템-> 구성-> SMTP Pro-> 대기열 구성-> 대기열 사용량이 기본값에서 안함으로 변경됩니다.
Shrenik

8

Magento 1.9.1.0에서 Magento는 새로운 기능을 추가했습니다. 주문 이메일을 core_email_queue표에 주문 이메일을 저장합니다 . cron.php서버 를 설정해야 합니다

cron.php파일을 설정 core_email_queue_send_all크론 스케줄 표에. 크론이에서 호출 된 "보내기"메소드를 실행합니다 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

1 분마다 실행됩니다.여기에 이미지 설명을 입력하십시오


5

주문 이메일 만 발송하지 않는 경우 Magento는 주문 이메일 만 대기열에 저장하고 배치하여 발송하기 때문입니다. Heartbeat Cron 설정이 없으면 Magento 대기열을 떠나지 않습니다.

다른 Magento 이메일은 Magento에서 메일러 데몬으로 직접 전달되므로 발송됩니다. 주문 이메일과 같은 Magento 대기열은 Hearbeat Cron이 실행될 때까지 메일러 데몬에게 전달되지 않습니다.

강제로 나가려면 ... http://yourmagentodomain.com/cron.php로 이동하여 5 분마다 해당 페이지를 새로 고침하면 대기중인 주문 이메일이 발송되기 시작합니다. 하트 비트 크론이이 작업을 수행해야합니다. 아, 그리고 그 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
마 젠토 SE에 오신 것을 환영합니다! 답변에 대해 더 자세히 설명 할 수 있습니까 (제공 코드 예제 등)?
benmarks

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
연락처 양식 기능이 중단됩니다.
Zoya

9
핵심 편집하지 마십시오
케빈 슈뢰더

1
CORE를 변경해야하는 솔루션을 제공하지 마십시오. 핵심 수업은 절대 변경해서는 안됩니다.
Ahsan Horani

2

확장 SMTPpro가있는 경우이를 비활성화하십시오. 그리고 다시 확인하십시오. 모든 이메일은 제대로 작동하며 올바르게 구성하기 만하면됩니다.


0

더 나은 방법은 앱 / 코드 / 코어 / 마법사 / 코어 / 모델 / 이메일 / 템플릿 / Mailer.php의 사본을 만드는 것입니다

로컬 폴더 app / code / local / Mage / Core / Model / Email / Template / Mailer.php로

그런 다음 76 행에서이 행을 주석 처리하십시오.

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

그런 다음 끝났습니다. success.phtml 템플릿을 수정할 필요가 없습니다. :디

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.