증상
주문 메일에서 배송지를 추출해 "자사 주소면 본인 구매로 제외" 규칙을 걸었다. 실제 배송지는 다른 도시인데 자사 주소 우편번호가 배송지에서 검출돼 매칭이 거부됐다.
원인
메일 본문에서 Shipping address 헤더 뒤로 고정 길이 300자를 잘라 배송지로 썼다. 그 메일 형식은 배송지 바로 뒤에 Billing address 블록이 붙는다. 배송지가 짧으면 300자 안에 청구지가 통째로 딸려 들어온다. 청구지가 자사 주소였으니 규칙은 틀린 구간 위에서 정확히 동작한 셈이고, 에러는 없다.
해법
구간은 다음 헤더 위치에서 끊는다. 시작 마커에서 다음 마커(Billing address, 없으면 다음 빈 줄이나 섹션 헤더)까지. 고정 길이 절단 금지.
start = body.index("Shipping address")
end = body.find("Billing address", start)
ship = body[start:end if end != -1 else start + LIMIT]
검증
추출 결과에 다음 블록의 헤더 문자열이 들어 있으면 실패로 본다. 배송지 안에 Billing이 있으면 절단이 틀린 것이다.
★ 구간 추출은 시작점만 잡으면 안 된다. 끝점도 잡아야 한다. 고정 길이는 "다음 블록이 그 안에 안 들어온다"는 근거 없는 가정이다.