만료된 이전 서버에서 이메일 백업을 복구하는 상황을 해결해 달라는 요청을 받았습니다.
Maildir 파일과 일부 헤더 데이터를 사용하면 postfix+courier라고 부르는 조합과 달리 서버가 postfix+dovecot을 실행하기 위해 어떤 조합을 사용하고 있는지 탐정 작업을 통해 쉽게 확인할 수 있습니다.
따라서 Postfix 3.1.6과 dovecot-imapd 2.2.27을 사용하여 Debian 9 서버를 설정했습니다.
몇 가지 조정 후에 폴더는 표시되었지만 이메일은 왜곡된 것처럼 보였습니다.
현재 디렉토리와 새 디렉토리를 확인하면 이메일 파일이 일반 Maildir 형식인 것처럼 보이지만 파일을 열면 왜곡된 것으로 보입니다.
명령을 실행 file
하고 메시지가 모두 gzip 압축 형식인지 확인합니다.
무슨 일인가요? 관리자가 백업하기 전에 압축한 모든 이메일 상자 메시지 파일을 백업하게 됩니까?
답변1
주제를 더 깊이 탐구하면서 뭔가 옳지 않다는 것이 분명해졌습니다.
일부 메시지의 압축을 풀 때 dovecot이 메시지를 볼 때 이름이 실제로 새로운 더 큰 크기를 반영하도록 업데이트되었기 때문에 내 의심도 더욱 높아졌습니다.
그래서 추가 조사 끝에 비둘기집이 압축된 면적을 가지고 있을 수 있다는 사실이 밝혀졌습니다.
방금 Dovecot 메일 저장소에 압축을 적용할 수 있다는 것을 발견했습니다.
압축은 "새" 이메일에서만 작동합니다.
/etc/dovecot/conf.d/10*에 추가하세요.
# Enable zlib plugin globally for reading/writing: mail_plugins = $mail_plugins zlib # Enable these only if you want compression while saving: plugin { zlib_save_level = 6 # 1..9; default is 6 zlib_save = gz # or bz2, xz or lz4 }
/etc/dovecot/conf.d/20*에 추가하세요.
protocol imap { mail_plugins = zlib } protocol pop3 { mail_plugins = zlib }
서비스를 다시 시작하십시오 dovecot
.
service dovecot restart
그러면 구성 변경 후 생성된 모든 메시지에 압축 설정이 적용됩니다.
지침Dovecot WiKi(Zlib 플러그인)이렇게 하면 저장된 이메일을 압축하는 데 도움이 됩니다.
Zlib 플러그인을 사용하여 압축된 mbox, maildir 또는 dbox 파일을 읽을 수 있습니다. 또한 (IMAP, LDA 및/또는 LMTP를 통해) 압축된 메시지를 dbox 또는 Maildir 사서함에 쓰는 데 사용할 수도 있습니다. Zlib 플러그인은 zlib/gzip, bzlib/bzip2, liblzma/xz(v2.2.9+) 및 liblz4/lz4(v2.2.11+)를 사용한 압축을 지원합니다.
...
메일 디렉토리
이 플러그인이 로드되면 Dovecot은 Maildir에서 압축된 파일과 압축되지 않은 파일을 읽을 수 있습니다. gzip 및 bzip2 지원을 활성화하면 Maildir에서 압축 파일 중 하나를 사용할 수 있습니다. 압축은 파일의 처음 몇 바이트를 읽고 유효한 gzip 또는 bzip2 헤더인지 확인하여 감지됩니다. 파일 이름은 중요하지 않습니다.
또는 성능상의 이유로 압축된 메일함을 처리하고 싶지 않은 경우 일괄적으로 압축을 푸는 한 가지 방법은 bash 스크립트를 작성하는 것입니다.
현재 스크립트에는 몇 가지 단점이 있지만 일반적인 지침은 다음과 같습니다.
#!/bin/bash
TMPDIR="/tmp"
service dovecot stop
find /home/*/Maildir -type f |
while read file
do
file "$file" | grep gzip > /dev/null
if [ $? -eq 0 ]
then
echo "$file"" gzipped...decompacting"
mv "$file" $TMPDIR/$$.gz
gunzip -c $TMPDIR/$$.gz > "$file"
rm -f $TMPDIR/$$.gz
fi
done
find /home -name "dovecot.index.cache*" -delete
service dovecot start