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를 사용할 때 두 가지 수준의 문자 집합을 지정해야 합니다.
- 이메일을 작성하는 데 사용되는 텍스트 편집기는 이를 필수 인코딩으로 저장해야 합니다.
- 그런 다음 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>