새로운 주문 이메일이 두 번 발송 됨


25

Magento 1.9.1을 사용하고 있으며 프런트 엔드에서든 Admin에서든 새로운 주문을 만들 때 시스템은 2 개의 이메일을 보냅니다.

나는 그물을보고 오래된 버그 인 버그를 발견했으며 언급 한 코드를 찾을 수 없었으며 Paypal 주문과 관련이있는 것처럼 보였지만 그렇지 않습니다.

모든 확장 프로그램을 사용 중지했지만 시도했지만 여전히 동일한 문제가 발생하여 확장 문제가 아니라고 확신합니다.


1
이 문제를 해결 했습니까? 나는 때때로 같은 이상한 이중 주문 확인을 받았으며 확인 메일에도 bcc를 사용했습니다. 고객에게 두 개의 메일이 발송되는지 여부는 알 수 없지만 희망하지는 않습니다.
폭스

이메일 주소는 누구입니까? 관리자 이메일 중 하나를 사용하여 체크 아웃하고 있습니까?
SR_Magento

동일한 문제가 발생합니다 (새 주문을 한 후 사용자에게 두 개의 이메일이 수신됩니다). 아래 답변이 확실하지 않으며 "core_email_queue"및 "core_email_queue_recipients"테이블이 모두 비어 있으므로 이것이 내 경우가 아니라고 생각합니다. 이것 좀 도와주세요.
Abi Sharma

Abi Sharma, 같은 문제가 있는데 여전히 이메일이 중복됩니다. 문제를 해결하셨습니까? 알려주세요
Lior Loria

답변:


48

이 문제는받는 사람 테이블에 고아 레코드를 남기는 새로운 Magento Email Queue 시스템과 관련이 있어야합니다. 이것이 귀하의 문제인 경우 수정을 보내드립니다.

새로운 Magento Email Queue 시스템은 core_email_queuecore_email_queue_recipients의 두 테이블을 관리합니다 . 전자는 전자 메일 메시지를 처리하고 후자는 전자 메일 메시지를 처리합니다.

core_email_queue 젠토 이메일 대기열에 이메일이 전송으로 테이블을 깨끗이한다. 이 정리는 core_email_queue_clean_up 이라는 cron 탭 작업에 의해 수행되며 , app / code / core / Mage / Core / etc / config.xm l 구성 파일 내에 정의되어 있습니다. 정리를 수행하는 코드 는 Mage_Core_Model_Resource_Email_Queue 클래스 의 removeSentMessages 함수에 정의되어 있습니다 .

/**
 * Remove already sent messages
 *
 * @return Mage_Core_Model_Resource_Email_Queue
 */
public function removeSentMessages()
{
    $this->_getWriteAdapter()->delete($this->getMainTable(), 'processed_at IS NOT NULL');
    return $this;
}

위 코드는 cron 태스크에 의해 하루에 한 번 실행됩니다.

그러나 core_email_queue_recipients 테이블 (이메일 수신자를 보유하고 message_id 필드에 의해 core_email_queue 테이블에 링크 된 테이블 )이 core_email_queue 테이블 (이메일 메시지를 보유하는 테이블) 과 함께 정리되지 않아 고아 레코드가 내부에 남게됩니다. 메시지 테이블을 정리할 때 해당 수신자 테이블.

여기에 설명 된 문제는 core_email_queue 테이블 (메시지)이 재설정 되고이 테이블의 자동 증분 message_id 필드 가 1로 다시 시작될 때 발생합니다 .

core_email_queue_recipients 테이블 (수신자)이 그에 따라 정리되지 않았기 때문에 새 이메일이 Magento Email Queue에 추가되면 core_email_queue 테이블 에 새 레코드가 작성되고 ( message_id 가 1부터 다시 시작됨 ) 동시에 새 레코드가 작성됩니다 온 core_email_queue_recipients의 이러한 동일한 ID를 가진 테이블 (1부터 다시 시작).

문제는 이러한 ID가 이전 전자 메일 메시지로 인해받는 사람 테이블에 고아 레코드로 이미 존재할 수 있다는 것입니다. 이 새로운 메시지 ID는 core_email_queue_recipients 테이블 내에서 반복됩니다 . 결국 다른 전자 메일 메시지는 message_id에 의해 해당받는 사람과 연결 되지만 이전 전자 메일 과 동일한 message_id 가 할당 된 이전 받는 사람 과 잘못 연결됩니다 .

따라서, 수신자가 주어진 메시지를 보내기 위해 검색 될 때, 적절한 수신자 외에, 다른 잘못된 수신자가 발생할 수 있습니다.

다행히이 문제에 대한 수정은 쉽게 수행 할 수 있습니다.

필요한 것을 모두는 모든 반복 메시지 ID를 청소 core_email_queue_recipients의 테이블 및 확인하는 메시지가에서 삭제 될 때 core_email_queue 의 해당받는 사람이에서 삭제 얻을 동시에, 테이블 core_email_queue_recipients의 테이블.

이를 달성하는 가장 좋은 방법은 이러한 레코드를 연결하고 캐스케이드에서 삭제하는 외래 키를 만드는 것입니다.

이 문제를 해결하는 절차는 다음과 같습니다.

1) 고아 레코드 및 반복 된 메시지 ID에서 core_email_queue_recipients 테이블 을 정리하려면 다음 두 SQL 쿼리를 실행하십시오 .

DELETE FROM core_email_queue_recipients WHERE message_id NOT IN (SELECT message_id FROM core_email_queue);
DELETE FROM core_email_queue_recipients WHERE recipient_id < (SELECT recipient_id FROM (SELECT recipient_id FROM core_email_queue_recipients ORDER BY message_id ASC, recipient_id DESC LIMIT 1) AS r);

첫 번째 쿼리는 고아 레코드를 삭제하고 두 번째 쿼리는 더 이상 유효하지 않은 오래된 레코드를 삭제합니다.

2) core_email_queue_recipients 테이블 에 외래 키를 작성하여 계단식에서 수신자 레코드를 삭제하십시오. 이 외래 키를 생성하기위한 SQL 쿼리는 다음과 같습니다.

ALTER TABLE core_email_queue_recipients ADD FOREIGN KEY(message_id) REFERENCES core_email_queue(message_id) ON DELETE CASCADE;

이 새로운 외래 키를 사용하여 더 고아 레코드가에 남아되지 않습니다 core_email_queue_recipients의 청소 때 테이블 core_email_queue 테이블을, 그리고 잘못된받는 사람에게 중복 된 메시지는 미래에 전송되지 않습니다.


2
훌륭한 연구와 César 작업 수정 제공. Magento 팀은 고객의 이름과 주소를 다른 고객에게 보낼 수 있다는 점을 감안할 때 이것이 주요 감독입니다. 이 문제가 발견 된 이후에 어떤 패치 / 릴리스에서 해결되었는지 아는 사람이 있습니까?
zigojacko

위의 솔루션을 구현 한 후 동일한 주문 이메일이 동일한 이메일 주소로 여러 번 전송되는 문제에 여전히 직면하고 있습니다.
aton1004

두 테이블이 모두 비어 있는지 확인하고 있으므로이 두 단계 (쿼리)를 실행해야합니까 ???
Abi Sharma

내가 어떻게 이러한 질문을 수행했지만 도움이되지 않습니다 .. 주문 이메일을 두 번 계속 받기
Abi Sharma

5

나는 같은 문제가 있었다. 모든 주문에 대해 고객 이메일과 매장 이메일 주소 (내 상점 이메일 계정의 우편함)로 별도의 이메일을받습니다.

Magento Admin에서 : 시스템> 구성> 영업 이메일> 주문

전자 메일 "주문 전자 메일 복사 방법"을 "Separate E-Mail"에서 "Bcc"로 설정했는데 지금 작동합니다. 주문 당 하나의 이메일 만 받고 있습니다.


3
나는 Bcc 방법을 이미 사용하고 있기 때문에 불행히도 나에게는 문제가되지 않는다 :(
Christopher Thrower

이미이 설정을 사용하고 있지만 새로 주문한 후 2 개의 이메일을받습니다.
Abi Sharma

1

나는 같은 문제가 있었다. 제 경우에는 cron.sh 스크립트 의 소스 코드로 인해 문제가 발생했습니다 .

내 호스팅 제공 업체 는 Magento cron-job에 자신의 버전의 cron.shcron.php 스크립트를 사용했습니다.

Magento-Cron-Job을 시작하기 위해 cron.sh 스크립트에서 cron.php 스크립트로 변경했을 때 새 주문 전자 메일이 한 번만 전송 되었으므로 probelm 이 해결되었습니다.

어쩌면 문제는 cron.sh 또는 cron.php 스크립트 의 코드와 관련이있을 수 있습니다.


안녕하세요, 우리는 이미 Magento cron 작업에 cron.php 스크립트를 사용하고 있지만 두 번 이메일을 받고 있습니다.
Abi Sharma
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.