이메일 서버(IMAP)에서 첨부 파일 삭제/삭제

이메일 서버(IMAP)에서 첨부 파일 삭제/삭제

내 메일 서버(IMAP)에 첨부 파일(PDF 등)이 포함된 이메일이 많이 있습니다. 이러한 첨부 파일은 공간을 낭비합니다. 내 서버의 HDD 공간은 호스팅 회사에 의해 제한되어 있습니다. 저는 이메일의 첨부 파일을 삭제하여 해당 공간의 일부를 되찾으려고 합니다. (거의 모두 로컬로 다운로드되거나 업로드되므로 메일 서버에서 중복됩니다.)

(오래 전) Windows를 사용할 때 메일 서버에 로그인하고 메시지를 조작하고 첨부 파일을 삭제하는 데 사용할 수 있는 "클라이언트 유형" 이메일 처리기인 "IMAPSize"라는 응용 프로그램이 있었습니다. 하지만 저는 Unix/Linux를 사용했지만 (지금까지) 사용 편의성과 작업 완수 측면에서 비슷한 것을 찾지 못했습니다. (비록 우리가 더 좋고 더 강력한 솔루션을 갖고 있을 수도 있지만, 어느 솔루션인지는 모르겠습니다. )

나는 munpack(로컬에 설치하여 사용함)과 ripmime에 대해 알고 있지만 이러한 프로그램은 로컬에 저장된 메시지인 Mbox 또는 MailDir을 처리하도록 설계된 것 같습니다. 저는 이메일을 로컬에서 동기화하지 않고 우리 서버에 남겨둡니다. (이메일이 너무 많아서 총 100,000개가 넘습니다.)

그리고 Munpack은 첨부파일 추출에 꽤 능숙한 것 같은데, 메시지 자체를 파괴하지 않고 첨부파일만 제거할 수 있는 방법을 찾지 못했습니다.

웹 GUI로 Horde, Roundcube 및 SquirrelMail을 사용할 수 있지만 첨부 파일을 삭제하는 방법을 찾지 못했습니다.

또한 복잡한 설정 및 구성 등이 포함되지 않는 솔루션을 찾고 있습니다. (나는 꿈을 꾸고 있거나 너무 많은 것을 요구하고 있을지도 모른다.)

저는 이 접근 방식을 시도하고 싶습니다. 오프라인imap을 사용하여 모든 이메일을 로컬로 다운로드하고 동기화한 다음 munpack이나 ripmime을 사용하여 첨부 파일을 제거할 수 있습니다(단지 추출하는 대신 그렇게 할 수 있는 방법을 찾을 수 있다고 가정). -서버와 동기화하면 이메일이 첨부 파일 없이 서버로 다시 돌아오길 바라지만 a) 작동하는지 확실하지 않고 2) 다시 말하지만 수만 개의 로컬 이메일을 로컬로 다운로드하고 싶지 않습니다.... ..

나는 나를 위한 해결책이 있다고 확신합니다. (아마도 서버에서 이메일을 조작하거나 첨부 파일을 삭제할 수 있는 일종의 클라이언트 유형 GUI 응용 프로그램이거나 다른 덜 복잡한 방법일 것입니다.)

참고: 저는 Thunderbird를 사용하지 않으며 이를 설치하거나 사용할 생각도 없습니다. Wine도 마찬가지입니다. 나는 가능할 때마다 더 적은 공간을 차지하는 앱을 사용하여 내 상자를 "최소화" 상태로 유지하려고 노력합니다.

올바른 방향을 알려주셔서 감사합니다.

답변1

stdin에서 모든 첨부 파일을 제거하고 stdout을 반환하는 다음 Perl 코드가 있습니다. 이것이 도움이 될 수 있습니다.

#!/usr/bin/perl -w
use strict; 

use Mail::Audit; 
use Mail::Audit::Attach qw(Attach); 

my $mail = Mail::Audit->new; 

my $attachments = $mail->attachments; 

foreach (@$attachments) 
{ 
      $_->remove; 
} 
$mail->print();

Maildir의 파일에 대한 간단한 루프 대신 첨부 파일을 제거하고 싶다고 가정해 보겠습니다.

for filename in <list> 
do 
  ./strip.pl < "$filename" > "$filename".lock && mv "$filename".lock "$filename" 
  rm "$filename".lock
done 

흥미로운 수정 방법은 먼저 첨부 파일을 추출하고 메시지에서 삭제하기 전에 별도로 저장하는 것입니다.

foreach (@$attachments) 
{ 
      $_->save("/path/to/attachment/dir");
      $_->remove; 
}

단, 먼저 백업을 해주세요 ;)

답변2

나는 노력했다IMAP 크기동일하지만 더 이상 지원되지 않으며 때로는 충돌이 발생하고 삭제해야 할 것 같은 메시지가 남습니다. 게다가첨부 취소Gmail 사용자를 위한 앱이지만 보증할 수는 없습니다.

이 문제를 직접 해결하기 위해 유용할 수 있는 Python 스크립트를 만들었습니다.IMAP 크기 감소기

실행될 때마다 지정된 폴더에서 작동합니다. 명령줄에서 Python 스크립트를 실행하는 방법, 서버에 로그인하는 방법(URL, 사용자 이름, 비밀번호) 및 IMAP 폴더 사양(예: "INBOX.Sent")을 알고 있으면 모든 IMAP에서 작동합니다. 폴더. (필요한 경우 ISP가 이러한 세부 정보를 제공하는 데 도움을 줄 수 있습니다.)

"필요한 최대 메시지 크기"(예: "메시지가 이 크기보다 크면 이 크기보다 작아질 때까지 첨부 파일을 삭제하세요.") 및 "허용 가능한 부분 크기"(예: "개별 메시지 부분이 이 크기보다 작은 경우)를 지정할 수 있습니다. 크기" ", 전체 크기에 관계없이 메시지를 삭제하지 마십시오").

다음 MIME 유형은 부분 제거 후보로 간주됩니다.

Anything with Content-Disposition "attachment"
Content-Type image/*
Content-Type audio/*
Content-Type video/*
Content-Type music/*
Content-Type x-music/*
Content-Type application/*

다양한 이메일 제공업체에서 엄격한 테스트를 거치지는 않았지만 제게는 잘 작동합니다. 자세한 이용내역은 홈페이지를 참고해주세요.

답변3

이를 달성하기 위해 Thunderbird 및 AttachmentExractor 플러그인을 사용할 수 있습니다. Thunderbird에 메일 계정을 추가하고 AttachmentExtractor를 시작하세요. 이메일에 첨부 파일 이름을 유지하면서 첨부 파일의 내용을 제거할 수 있습니다.

답변4

서버에서 첨부 파일을 삭제하는 것은 매우 쉽습니다. 첨부 파일은 단지 (텍스트) 파일일 뿐입니다. - 첨부 파일이 포함된 이메일 배포(보통 더 큰 이메일):

find -P /home/*/mail/*/*/* -mindepth 1 -maxdepth 1 -name "*=*" -size +2M -mtime '+367'

메일 디렉토리가 있는 WHM 서버에서 100% 작동하며 mbox에서는 테스트되지 않았습니다.

  • 파일을 통해 루프
  • if grep -e '------=_' ${file}; # 문자열을 포함합니다....그런 다음
  • 다음과 같은 공통 기준에 따라 이메일을 분할합니다.csplit --prefix=split4mail2clean. -z ${file} /commonstring/
  • 분할된 문자열 파일에서 할당/찾기, 첨부 파일에는 몇 가지 일반적인 문자열이 포함됩니다. 해당 부분을 삭제하세요.
  • 나머지 임시 분할 파일(일반적인 첨부 파일이 없는 파일)을 역순으로 결합하여 원본 이메일을 재구성합니다.
  • 수정 타임스탬프 재적용
  • 필요한 경우 여기에서 다른 작업을 수행하세요.

성공하려면 3, 4개 이상의 IF 조건이 필요할 수 있습니다. 파일에 이 문자열이 포함되어 있으면 삭제하세요... 임시 폴더에서 권장 쉘 스크립트를 실행하고 크기를 조정하고 기타 검색 기준을 적용하세요. 예, 약 40,000개의 메일 파일에 대해 테스트한 작업 스크립트가 있으며 지정된 검색 및 삭제 기준 내에 첨부 파일이 0개 남아 있습니다.

관련 정보