Magento 1.9.1을 사용하고 있으며 프런트 엔드에서든 Admin에서든 새로운 주문을 만들 때 시스템은 2 개의 이메일을 보냅니다.
나는 그물을보고 오래된 버그 인 버그를 발견했으며 언급 한 코드를 찾을 수 없었으며 Paypal 주문과 관련이있는 것처럼 보였지만 그렇지 않습니다.
모든 확장 프로그램을 사용 중지했지만 시도했지만 여전히 동일한 문제가 발생하여 확장 문제가 아니라고 확신합니다.
Magento 1.9.1을 사용하고 있으며 프런트 엔드에서든 Admin에서든 새로운 주문을 만들 때 시스템은 2 개의 이메일을 보냅니다.
나는 그물을보고 오래된 버그 인 버그를 발견했으며 언급 한 코드를 찾을 수 없었으며 Paypal 주문과 관련이있는 것처럼 보였지만 그렇지 않습니다.
모든 확장 프로그램을 사용 중지했지만 시도했지만 여전히 동일한 문제가 발생하여 확장 문제가 아니라고 확신합니다.
답변:
이 문제는받는 사람 테이블에 고아 레코드를 남기는 새로운 Magento Email Queue 시스템과 관련이 있어야합니다. 이것이 귀하의 문제인 경우 수정을 보내드립니다.
새로운 Magento Email Queue 시스템은 core_email_queue 및 core_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 테이블을, 그리고 잘못된받는 사람에게 중복 된 메시지는 미래에 전송되지 않습니다.
나는 같은 문제가 있었다. 모든 주문에 대해 고객 이메일과 매장 이메일 주소 (내 상점 이메일 계정의 우편함)로 별도의 이메일을받습니다.
Magento Admin에서 : 시스템> 구성> 영업 이메일> 주문
전자 메일 "주문 전자 메일 복사 방법"을 "Separate E-Mail"에서 "Bcc"로 설정했는데 지금 작동합니다. 주문 당 하나의 이메일 만 받고 있습니다.
나는 같은 문제가 있었다. 제 경우에는 cron.sh 스크립트 의 소스 코드로 인해 문제가 발생했습니다 .
내 호스팅 제공 업체 는 Magento cron-job에 자신의 버전의 cron.sh 및 cron.php 스크립트를 사용했습니다.
Magento-Cron-Job을 시작하기 위해 cron.sh 스크립트에서 cron.php 스크립트로 변경했을 때 새 주문 전자 메일이 한 번만 전송 되었으므로 probelm 이 해결되었습니다.
어쩌면 문제는 cron.sh 또는 cron.php 스크립트 의 코드와 관련이있을 수 있습니다.