이메일 첨부 파일의 파일 이름을 어떻게 생성합니까?

이메일 첨부 파일의 파일 이름을 어떻게 생성합니까?

저는 Amazon Linux를 사용하고 bash 스크립트를 생성하고 있습니다. 이메일로 첨부파일을 보내려고 하는데 성공했습니다.

(cat $TFILE1; uuencode $output_file $output_file) | mailx -s "$subject" "$to_email"

그러나 내가 겪고 있는 문제는 첨부 파일이 (적어도 Gmail에서는) "noname"이라는 이름으로 표시된다는 것입니다. "$output_file" 변수와 동일한 이름으로 첨부 파일을 표시할 수 있는 방법이 있습니까?

답변1

첨부 파일 문제가 있음을 mail발견 했습니다 . 이것을 mailx사용해 보십시오 mutt. 첨부 파일을 잘 처리하고 파일 이름을 그대로 유지해야 합니다.

mutt -a "$attachment_file" -s "$subject" -- "$to_email" < "$TFILE1"

"$TFILE1"이메일 메시지의 본문은 어디에 있나요? /dev/null첨부파일만 보내시려면 로 바꾸세요.

답변2

mpack첨부 파일 이름을 입력 파일 이름과 동일하게 설정하십시오. 따라서 예를 들어( -a인라인이 아닌 첨부 파일의 경우, -s제목 설정, -cMIME 유형 설정, 1.png첨부할 파일, anthony@localhost보낼 이메일 주소):

mpack -a -s 'test mpack' -c image/png 1.png anthony@localhost

1.png파일 이름을 이메일로 보내주세요:

Content-Type: image/png; name="1.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="1.png"
Content-MD5: EGqHjkvvXXcaO+41lBN2uA==

따라서 파일 이름을 올바르게 지정하고 mpack.

또 다른 옵션은 메시지를 완전히 제어하려는 경우입니다 mime-construct.

답변3

uuencode1990년대 초반의 잔재이므로 적절한 MIME 도구를 사용하면 가능하면 피해야 합니다.

아쉽게도 아직은 없네요사실은MIME 메시지를 보내기 위한 표준 단순 Unix 명령줄 유틸리티입니다. 비록 mutt가깝지만(그러나 여전히 기본적으로 대화형 프로그램이므로 스크립트에서 MTA에 메시지를 제출하는 것뿐이라면 꽤 많은 용량이 포함되어 있습니다).

최신 스크립팅 언어를 사용하여 단 몇 줄의 코드만으로 텍스트 본문 부분과 바이너리 첨부 파일이 포함된 여러 부분으로 구성된 메시지를 보내는 도구입니다. 베어 쉘 스크립트에서 코드는 약간 부피가 크지만 작업을 올바르게 수행할 수 있을 만큼 MIME에 대해 충분히 아는 것이 종종 문제입니다. 즉, MIME 메시지의 전체 구조와 사용하려는 본문 부분 유형을 인코딩하는 방법을 이해해야 합니다.

( printf 'From: %s\nTo: %s\nSubject: %s\n' "$sender" "$recipient" "$subject"
   printf 'Mime-Version: 1.0\nContent-type: multipart/mixed; boundary="foooobar"\n'
   printf '\n--foooobar\n\n'
   cat "$TFILE1"
   printf '\n--foooobar\nContent-type: application/octet-stream; name="%s"\n' "${output_file##*/}"
   printf 'Content-transfer-encoding: base64\n\n'
   base64 "$output_file"
   printf '\n--foooobar--\n' ) |
sendmail -t

이는 기본 7비트 US-ASCII 텍스트에 작동합니다. 특히 헤더에 8비트 텍스트가 필요한 경우 다양한 추가 변형이 있습니다(사람이 읽을 수 있는 텍스트의 경우 RFC 2047, 파일 이름의 경우 RFC 2047 등). RFC 2231 ), 이 시점에서는 이러한 세부 사항을 캡슐화하는 언어로 전환해야하므로 세부 사항을 이해하거나 걱정할 필요가 없습니다.

실제 커밋에 대한 종속성을 제외하면 base64이는 순전히 내장 함수이자 매우 기본적인 셸 유틸리티입니다. 마지막 슬래시에 있는 모든 것을 제거하려면 최신 쉘에서 sendmail매개변수 확장을 ${output_file##*/}사용해야 하지만, 아주 오래된 쉘을 사용하는 경우에는 이를 사용해야 할 수도 있습니다 basename.

관련 정보