Como especificar a codificação de anexos na linha de comando do mutt?

3

Estou tentando enviar um e-mail com anexo de um script perl.

Primeiro, eu crio o anexo (um arquivo 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);

Eu também tentei open(XMLFILE, ">", $xmlfile); com binmode XMLFILE, ":utf8"; .

Depois, envio o email assim:

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

No entanto, a parte de texto e o anexo têm Content-Type: text/plain; charset=iso-8859-1 .

Eu também tentei open(MUTT, "|/usr/bin/mutt -e \"set file_charset=utf-8\" -a $xmlfile ... , mas isso me deu um Error in command line: file_charset: unknown variable .

O que estou fazendo de errado?

    
por Martin Hennings 13.06.2013 / 11:05

3 respostas

0

Não consegui atualizar a versão mutt, mas encontrei uma solução alternativa - outros podem achar isso útil também.

Incluir um comentário com caracteres especiais permite que perl e mutt escolham a codificação correta (utf-8) (provavelmente o 'ł' seria suficiente, mas a intenção fica mais clara com os caracteres trema):

No xml, é assim:

<?xml ... ?>
<?comment <!-- ł€èÄöÜß --> ?>
<content>
    ...
</content>
    
por 31.07.2013 / 09:23
2

Que tal algo como isto:

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

Altere tudo para o tipo de conteúdo que você deseja. Em Perl algo assim:

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

Se você não quiser usar mutt , use 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

Você também pode fazer isso usando o sendmail diretamente:

(
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

Referências

por 13.06.2013 / 11:30
1

Como de costume, o excelente Wiki do Arch tem a resposta ( link ). Citando textualmente:

E-mail character encoding

When using Mutt there are two levels where the character sets that must be specified:

  1. The text editor used to write the e-mail must save it in the desired encoding.
  2. Mutt will then check the e-mail and determine which encoding is the more appropriate according to the priority you specified in the send_charset variable. Default: "us-ascii:iso-8859-1:utf-8".

So if you write an e-mail with characters allowed in ISO-8859-1 (like 'résumé'), but without characters specific to Unicode, then Mutt will set the encoding to ISO-8859-1.

To avoid this behaviour, set the variable in your muttrc:

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

or even

set send_charset="utf-8"

The first compatible charset starting from the left will be used. Since UTF-8 is a superset of US-ASCII it does not harm to leave it in front of UTF-8, it may ensure old MUA will not get confused when seeing the charset in the e-mail header.

Você pode fazer isso a partir da linha de comando, e não a partir do muttrc, prefixando

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

para os flags de comando.

    
por 14.04.2018 / 19:23