전체 재설치 후 구성에 문제가 발생했습니다. 발신자 주소가 잘못되어 일부 수신자 (메일 서버)가 거부했습니다.
따라서 Postfix 대기열에 많은 메일이 붙어 있습니다.
큐에있는 메일에서 직접 보낸 사람 주소를 변경 한 다음 큐를 플러시하는 것이 가장 좋습니다.
나는 이 문제를 해결하는 이 대답 을 시도했다 . 그러나 내가 가지고있는 버전 (2.11.0)에서는 메시지를 쉽게 수정할 수없는 것 같습니다.
예를 들어 /var/spool/mqueue
, dir은 없지만 대신에/var/spool/postfix/...
active
bounce
corrupt
defer
deferred
dev
etc
flush
hold
incoming
lib
maildrop
pid
private
public
saved
trace
usr
그리고 관심사는 deferred
. 올바른 도메인으로 잘못된 도메인을 변경하는 몇 가지 파일을 수정하려고했습니다 (변경된 파일 만 확인하도록주의를 기울였습니다).
그러나이 메일은로 이동되었으므로 corrupt
간단한 텍스트 변경이 작동하지 않는 것 같습니다 (로 완료 vi
).
대기중인 메일에서 발신자를 변경하는 다른 깔끔한 방법이 있습니까?
답변
나는 이 문제를 해결하는이 답변을 시도했다 . 그러나 내가 가지고있는 버전 (2.11.0)에서는 메시지를 쉽게 수정할 수없는 것 같습니다.
예를 들어 / var / spool / mqueue 디렉토리는 없지만 대신 / var / spool / postfix / …가 있습니다.
두 가지를 명확히하고 싶습니다.
- 첫째,이 답변은 sendmail NOT postfix에 적용되었습니다.
- 둘째, 직접 조작 -raw-queue 파일은 전혀 지원되지 않았습니다.
여기 몇 가지 옵션이 있습니다
1. smtp_generic_maps 매개 변수
이 답변은이 훌륭한 답변에서 영감을 얻었습니다 . 이전 주소를 새 주소로 자동으로 다시 작성합니다. 이전 주소를 새 주소로 매핑 할 파일을 정의 할 수 있습니다.
/etc/postfix/main.cf:
smtp_generic_maps = hash:/etc/postfix/generic
/etc/postfix/generic:
account@localdomain.example.com account@example.com
잊지 마세요 postmap /etc/postfix/generic
및 실행postfix reload
- 거꾸로 : 당신은 메시지를 다시 큐에 넣을 필요가 없습니다
- 단점 : Postfix는 해당 발신자와 수신자 주소를 다시 작성합니다
account@localdomain.example.com
.
2. sender_canonical_address
첫 번째 옵션의 단점을 극복하기 위해을 사용할 수 있습니다 sender_canonical_maps
. 이 솔루션은 Postfix 작성자 제안을 기반으로 합니다 . 첫 번째 옵션과 동일하게 파일을 정의하여 이전 주소를 새 주소에 매핑 할 수 있습니다.
/etc/postfix/main.cf:
sender_canonical_maps = hash:/etc/postfix/sender_canonical
/etc/postfix/sender_canonical:
account@localdomain.example.com account@example.com
실행 postmap /etc/postfix/sender_canonical
한 다음 실행하십시오 postfix reload
. postfix 대기열의 흐름으로 인해 명령을 사용하여 영향을받는 대기열을 다시 큐에 넣어야합니다.postsuper -r queueid
- 거꾸로 : Postfix가 수신자 주소를 다시 쓰지 않습니다.
- 단점 : 영향을받는 모든 메시지를 다시 큐에 넣어야합니다. 그러나 하나의 명령으로 연기 된 모든 것을 다시 큐에 넣을 수 있습니다
postsuper -r ALL deferred
3. postfix queue의 직접 조작
이것은 고급 처리를 위해 큐를 수정하는 수동 이전 방법입니다. 이 답변은 postfix-users 메일 링리스트 에서 나왔습니다.
한마디로
-
대기열 추출
# postsuper -h queueid # postcat -qbh queueid > tempfile.eml # vi tempfile.eml
-
큐를 다시 제출하고 이전 큐를 삭제하십시오.
# sendmail -f $sender $recipient < tempfile.eml # postsuper -d queueid
위의 명령에 대한 설명서는 이 페이지를 참조하십시오
참고 : postfix-users 메일 링리스트의
원래 솔루션은 대기열을 추출 하는 데 사용 합니다. 이 명령은 대기열의 헤더, 본문 및 메타 정보를 추출합니다. 아래 뾰족한 Azendale으로 , 때문에 메타 정보의 잘못된 이메일을 보내 거부합니다.postcat -q queueid >tempfile
sendmail
-bh
매개 변수와 함께 매개 변수를 사용하면 q
postcat이 메타 정보를 포함하지 않고 머리글과 본문에만 출력을 필터링합니다. 이것의 부작용은 임시 파일이 대부분의 전자 메일 클라이언트가 .eml 형식으로 인식하는 형식이므로 결과 (편집 된) 메시지를 볼 수 있다는 것입니다.
답변
그레이트 쓰기. 구성이 잘못되어 며칠 동안 실행중인 메일 서버에 문제가있어서 새 수신자에게 다시 보내야하는 대기열이 많이있었습니다. 그래서 모든 대기열을 반복하는 두 개의 라이너를 만들었습니다.
먼저 모든 대기열을 찾아서 보류하고 .eml 파일로 저장 한 후 다시 보내십시오.
for ID in `mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }' | tr -d \!`; do postsuper -h $ID; postcat -qbh $ID > tempfile$ID.eml; sendmail -f $sender $recipient < tempfile$ID.eml; done
대기열 삭제에 대한 두 번째 :
for ID in `mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }' | tr -d \!`; do postsuper -d $ID; done
이 마지막 코드를 실행하기 전에 보류되지 않은 새 큐가 없는지 확인하십시오. 이것을 발행하여 ‘!’없이 큐 ID를 찾으십시오. 끝에 :
mailq | awk '$1 !~/^$|[@\(^$-]/ { print $1 }'
On은 두 개의 하나의 라이너를 쉽게 넣을 수는 있지만 대기열을 삭제하기 전에 실제로 메일을 받았는지 확인하여 더 많은 제어권을 가지고 있다고 느꼈습니다.