mutt 명령줄에서 첨부 파일 인코딩을 지정하는 방법은 무엇입니까?

mutt 명령줄에서 첨부 파일 인코딩을 지정하는 방법은 무엇입니까?

Perl 스크립트의 첨부 파일이 포함된 이메일을 보내려고 합니다.

먼저 첨부 파일(xml 파일)을 만듭니다.

open(XMLFILE, ">:utf8", $xmlfile);
print XMLFILE "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
print XMLFILE "<data>\n";
#print XMLFILE "...\n";
print XMLFILE "</data>\n";
close (XMLFILE);

나도 open(XMLFILE, ">", $xmlfile);그것을 시도했습니다 binmode XMLFILE, ":utf8";.

그런 다음 다음과 같이 이메일을 보냅니다.

open(MUTT, "|/usr/bin/mutt -s \"TestSubject\" -a $xmlfile \"test\@example.com\"");
binmode MUTT, ":utf8";
print MUTT ("TestBody");
close (MUTT);

그럼에도 불구하고 본문과 첨부파일은 모두 이용 가능합니다 Content-Type: text/plain; charset=iso-8859-1.

나는 또한 그것을 시도했지만 open(MUTT, "|/usr/bin/mutt -e \"set file_charset=utf-8\" -a $xmlfile ...그것은 나에게 Error in command line: file_charset: unknown variable.

내가 뭘 잘못했나요?

답변1

늘 그렇듯이 훌륭한 Arch wiki에 답이 있습니다(https://wiki.archlinux.org/index.php/Mutt). 그대로 인용:

이메일 문자 인코딩

Mutt를 사용할 때 두 가지 수준의 문자 집합을 지정해야 합니다.

  1. 이메일을 작성하는 데 사용되는 텍스트 편집기는 이를 필수 인코딩으로 저장해야 합니다.
  2. 그런 다음 Mutt는 이메일을 검사하고 send_charset 변수에 지정한 우선 순위에 따라 어떤 인코딩이 더 적절한지 결정합니다. 기본값: "us-ascii:iso-8859-1:utf-8".

따라서 ISO-8859-1에서 허용되는 문자(예: "resume")가 포함되어 있지만 유니코드 관련 문자는 포함되지 않은 이메일을 작성하는 경우 Mutt는 인코딩을 ISO-8859-1로 설정합니다.

이 동작을 방지하려면 muttrc에서 변수를 설정하십시오.

set send_charset="us-ascii:utf-8"

심지어

set send_charset="utf-8"

왼쪽에서 첫 번째 호환 가능한 문자 세트가 사용됩니다. UTF-8은 US-ASCII의 상위 집합이므로 UTF-8 앞에 두는 데 아무런 해가 없으며 이전 MUA가 이메일 헤더의 문자 집합을 볼 때 혼동하지 않도록 보장합니다.

muttrc에 접두사를 붙이는 대신 명령줄에서 이 작업을 수행할 수 있습니다.

-e 'set send_charset="utf-8"'

명령 플래그에.

답변2

다음과 같은 것은 어떻습니까?

$ mutt -e "set content_type=text/html" Email address -s "subject" < test.html

원하는 content_type으로 변경하세요. Perl에서는 다음과 같습니다:

open(MUTT, "|/usr/bin/mutt -e \"set content_type=text/xml\" -s \"TestSubject\" -a $xmlfile \"test\@example.com\"");

이를 사용하지 않으려면 다음을 mutt사용할 수 있습니다 mail.

### method #1
$ mail -a 'MIME-Version: 1.0' -a 'Content-Type: text/xml; charset=iso-8859-1' -a 'X-AUTOR: Some Guy' -s 'MTA STATUS: mail queue' <to user>  -- -f <from user>  < /tmp/eximrep.xml

### method #2
 $ mail -a 'Content-type: text/xml; charset="us-ascii"' <to user> < /tmp/file.xml

sendmail을 직접 사용하여 이 작업을 수행할 수도 있습니다.

(
echo "From: [email protected]"
echo "To: [email protected]"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed;"
echo ' boundary="BOUNDARY"'
echo "Subject: Test Message"
echo ""
echo "This is a MIME-encapsulated message"
echo "--BOUNDARY"
echo "Content-Type: text/plain"
echo ""
echo "This is what someone would see without an HTML capable mail client."
echo ""
echo "--BOUNDARY"
echo "Content-Type: text/html"
echo ""
echo "<html>
<body bgcolor='black'>
<blockquote><font color='green'>GREEN</font> <font color='white'>WHITE</font> <font color='red'>RED</font></blockquote>
</body>
</html>"
echo "--BOUNDARY--"
) | sendmail -t

인용하다

답변3

mutt 버전을 업데이트할 수 없지만 해결 방법을 찾았습니다. 다른 사람들도 이 방법이 도움이 될 수 있습니다.

특수 문자가 포함된 주석을 포함하면 Perl과 mutt가 올바른(utf-8) 인코딩을 선택할 수 있습니다(아마도 "ł"이면 충분하지만 움라우트 문자를 사용하면 의도가 더 명확해집니다).

XML에서는 다음과 같습니다.

<?xml ... ?>
<?comment <!-- ł€èÄöÜß --> ?>
<content>
    ...
</content>

관련 정보