이메일을 통해 여러 개의 텍스트 첨부 파일을 보내보세요

이메일을 통해 여러 개의 텍스트 첨부 파일을 보내보세요

"Red Had Enterprise Linux Server 버전 5.11(Tikanga)"에서 이 스크립트를 실행합니다.

이메일은 버전 8.1 6/6/93(오래된 것처럼 보임)입니다.

다양한 것을 시도했지만 제대로 작동하지 않는 것 같습니다.

echo "Email message" | mail -a /home/user/checks/notprocessed.txt -a /home/user/checks/dirlist.txt -s "Subject" [email protected] /home/user/checks

결과 메시지:

메일: 잘못된 옵션 -- a

mutt는 아직 설치되지 않았으며 이 시스템은 제가 일하는 회사 소유이므로 시스템에 대한 액세스가 제한되어 있습니다. 다른 구성요소를 추가할 수도 있지만 변경 관리 및 관련 프로세스를 거쳐야 했습니다.

uuencode도 사용할 수 없습니다.

이것이 제가 오늘 사용하고 있는 것입니다. 두 번째 파일을 추가하려고 합니다.

if grep 'Not Empty' /home/user/checks/notprocessed.txt
   then
   echo "files were found";

   SUBJECT="NIGHTLY DIRECTORY LISTING OF FILES SENT TO VENDOR";
   FROM="SENDER<[email protected]>"
   # EMAIL="JOHN DOE<[email protected]>"
   EMAIL="MARY DOE<[email protected]>";
   /bin/mail -s "$SUBJECT" "$EMAIL" -- -f "$FROM" < /home/user/checks/notprocessed.txt /home/user/checks/dirlist.txt

   exit -20
fi

그리고.. /home/user/checks/dirlist.txt는 이메일에 첨부되거나 포함되지 않습니다. /home/user/checks/dirlist.txt가 실제로 첨부 파일이기를 바랍니다.

이것은 실제로 작동하지만 이메일 본문에 notprocessed.txt를 포함합니다.

if grep 'Not Empty' /home/user/checks/notprocessed.txt
   then
   echo "files were found";

   SUBJECT="NIGHTLY DIRECTORY LISTING OF FILES SENT TO VENDOR";
   FROM="SENDER<[email protected]>"
   # EMAIL="JOHN DOE<[email protected]>"
   EMAIL="MARY DOE<[email protected]>";
   /bin/mail -s "$SUBJECT" "$EMAIL" -- -f "$FROM" < /home/user/checks/notprocessed.txt

   exit -20
fi

답변1

표준 입력 리디렉션( )을 수행 <하면 첫 번째 파일(첫 번째 파일만)이 열리고 해당 내용이 mail이를 본문으로 사용하여 표준 입력으로 전달됩니다.

구현이 오래되었기 때문에 MIME 첨부 파일 생성을 위한 현재 버전의 플래그를 mailx지원하지 않습니다 . -a당신이 할 수 있는 일은 사용 가능한 것을 사용하여 MIME 형식을 직접 만드는 것입니다.

운 좋게도 간단한 bash 스크립트를 사용하는 것은 그리 어렵지 않습니다(RHEL 5에서도 100% 작동한다고 확신합니다 :-). 다음과 같이 간단하게 수행할 수 있습니다.

#!/bin/bash
msgid="$RANDOM$RANDOM$RANDOM$RANDOM"
to="$1"
shift
subject="$1"
shift
echo "To: $to"
echo "From: [email protected]"
echo "Subject: $subject"
echo "Message-ID: $msgid"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=$msgid"
echo "" # header termination
while [ -n "$1" ]; do 
    echo "--$msgid"
    echo "Content-Type: text/plain; charset=UTF-8"
    echo "Content-Disposition: attachment; filename=\"$(basename $1)\""
    echo "Content-Transfer-Encoding: base64"
    echo ""
    base64 < "$1"
    shift
done

그런 다음 전송을 위해 생성된 이메일 텍스트를 sendmail다음과 같이 제출하면 됩니다.

mail.sh "$SUBJECT" "$EMAIL" /home/user/checks/notprocessed.txt \
   /home/user/checks/dirlist.txt | sendmail -t

스크립트는 base64"ASCII Armor" 파일에 대한 명령을 사용하므로 텍스트 파일과 바이너리 파일을 모두 보낼 수 있지만 텍스트 파일을 보내지 않는 경우 첨부 파일을 올바르게 설정하는 방법을 알아내는 것이 좋습니다 Content-type(또는 모두 다음으로 변경). application/octet-stream, 즉 "바이너리"입니다.) 이 명령은 RHEL 5에서 coreutils의 일부로 제공되므로 사용하는 데 아무런 문제가 없을 것으로 예상됩니다.

또한 이 -t플래그를 사용하면 MTA가 메시지 자체에서만 전자 메일 봉투를 읽을 수 있으므로 명령 매개 변수에 다른 항목을 추가할 sendmail필요가 없습니다 . sendmail스크립트에 출력에 필요한 모든 필드가 포함되어 있는지 확인하세요. 명령줄에서 수신자와 제목을 이와 같이 읽도록 했지만 mailx그럴 필요는 없으며 보낸 사람 주소는 어쨌든 하드코딩되어 있습니다.

관련 정보