Enviando multipart / alternativo com mutt

12

Gostaria da opção de certos emails e / ou destinatários executarem um script antes de enviá text/plain-los (seja automaticamente ou pressionando uma tecla de atalho), o que leva meu , executa um script sobre ele e anexa a saída desse script ao text/htmltipo , definindo a mensagem inteira como multipart/alternative.

Caminhada lateral: pode ser bom se isso aconteceu automaticamente imediatamente antes do envio, mas apenas se o tipo de corpo estiver definido no momento text/markdown, pois isso significa que o e-mail pendente nunca está em um estado em que edito a fonte novamente, mas esqueço de regenerar o HTML, e ainda tenho a opção de enviar apenas text/plain. Então eu teria outra ligação para definir o tipo de conteúdo do corpo text/markdown, para que isso fosse escolhido. Mas também tenho o problema de que muitos clientes de email (inclusive o Gmail) se recusam a renderizar text/markdown(mesmo como texto sem formatação), em vez de oferecê-lo como um download, por isso precisaria voltar o tipo de conteúdo da parte de origem para text/plain.

Isso é possível com vira-lata?

Infelizmente, até onde eu sei, o vira-lata não suporta o envio de multipart/alternativemensagens, recusando-se a enviar qualquer coisa multipart/mixed, mas eu adoraria mostrar que estou errado.

A melhor solução que consegui encontrar é essa macro:

macro compose M "<filter-entry>commonmark<return>y<edit-type><kill-line>text/html<return>" "convert message to HTML with Commonmark"

Existem alguns problemas com isso:

  • Ele substitui inteiramente o texto sem formatação original, tornando muito mais difícil editar
  • Não gosto que haja yna macro para dizer sim à caixa de diálogo perguntando se não há problema em substituir o arquivo
  • Eu tenho que pressionar return depois que isso for executado
  • E, claro, o principal: não envia a alternativa em texto sem formatação

Existe uma solução melhor?

Estou potencialmente aberto a outro cliente de email em modo de texto, desde que

  • é utilizável no Google Apps e sincroniza sinalizadores etc. nas duas direções
  • suporta GPG
  • tem ligações semelhantes a vim, ou eu posso configurá-las
  • permite-me usar o vim como um editor de mensagens
  • tem uma exibição de mensagem encadeada
  • permite filtrar / pesquisar mensagens de uma maneira um pouco sofisticada (remetente, destinatário, presença de anexos, pesquisa de assunto e texto do corpo)
  • lida com tipos de anexos um pouco como mutt, por exemplo, mailcap ou equivalente, para que eu possa executar o correio HTML recebido através do lynx ou pressionar algo para abri-lo no navegador gráfico, se necessário, posso iniciar os visualizadores de imagens com o pressionar de um botão, e assim por diante
tremer
fonte

Respostas:

1

Esqueci o NeoMutt suporta multipart. https://neomutt.org/guide/mimesupport .

Davey
fonte
Isso é bom de ouvir. A página que você vinculou disse que o suporte ao envio de várias partes / alternativa é rudimentar, mas tentarei em breve. Obrigado por apontar isso.
tremby
Supõe-se que Neomutt seja um substituto para o velho mutante comum. A outra coisa interessante é que aparentemente ele tem um desenvolvimento ativo bastante grande.
Davey
Parece que o recurso foi adicionado há apenas um ano: github.com/neomutt/neomutt/pull/734
tremby
Isso funciona muito bem. Fiz uma macro semelhante à sugerida nos documentos que você publicou em neomutt.org/guide/… - ainda preciso pressionar enter depois de usar a macro e ainda não tenho certeza do que acontecerá se eu quiser criar muda depois de gerar a alternativa, mas antes de enviar, mas vou descobrir tudo isso no devido tempo. Observe que a primeira versão para oferecer suporte a multipart / alternativa é a versão 2018-05-12, que ainda não está em minha distribuição. Eu compilei da fonte com --gnutls --prefix/usr/local --tokyocabinet.
tremby
-1
    #!/bin/bash

    cp $1 $1.tmp
    ##CHANGE OVERALL TYPE IN HEADER TO MULTIPART

    #HANDLE CONTENT-TYPE LINE IN HEADER
    if grep -q "Content-Type:" $1; then
            sed -i -e 's/Content-Type:.*?;/Content-Type: multipart\/alternative; boundary=boundary42/' $1.tmp
    else
            sed -i '1iContent-Type: multipart/alternative; boundary=boundary42' $1.tmp
    fi

    #EXTRACT HEADER AND BODY
    header="$(sed '/^$/q' $1.tmp)"
    body="$(sed -n -e '/^$/,$p' $1.tmp | tail -n +2)"

    #CREATE HTML VERSION
    HTMLbody="$(echo "$body" | commonmark)"

    #ADD HEADER
    echo "$header" > $1

    #START PLAIN TEXT
    echo -e "\n--boundary42\n" >> $1
    echo -e "Content-Type: text/plain; charset=us-ascii\n" >> $1
    echo "$body" >> $1

    #START HTML
    echo -e "\n--boundary42\n" >> $1
    echo "Content-Type: text/html; charset=UTF-8" >> $1
    echo "Content-Transfer-Encoding: quoted-printable\n" >> $1
    echo "$HTMLbody" >> $1

    echo -e "\n--boundary42--" >> $1

    msmtp $1
Davey
fonte
Parece que você está respondendo à pergunta "é possível usar assinaturas diferentes por endereço de e-mail 'de'", o que não é de todo a pergunta que eu fiz. Não vejo como isso ajuda no envio de emails alternativos / com várias partes.
tremby
Vejo que você editou sua resposta. OK, para verificar quais endereços de e-mail você está enviando de e para (não parece que você faz nada com "from") e possivelmente adiciona alguns cabeçalhos. Mas ainda não vejo como isso ajuda no envio de emails alternativos / com várias partes.
Tremby 04/04/19
Você provavelmente precisará ajustar isso para suas próprias necessidades, então provavelmente não posso explicar tudo para você. Mas a solução geral é que você defina seu editor como um script que chama seu editor e analise o arquivo de rascunho.
Davey
Qual edição específica do arquivo de rascunho permitirá que o mutt envie várias partes / alternativa? Onde estão as duas versões do arquivo, HTML e texto sem formatação?
tremby
Você parece ter uma maneira de converter com marca comum. Substitua isso pela linha someMultipartScript. $ 1 nesse momento serão texto simples. Envie-o através da sua ferramenta de conversão e direcione-o para o mesmo nome de arquivo $ 1. Quando esse script termina, ele envia um sinal ao programa de chamada (mutt), informando que seu editor está fechado e, nesse ponto, ele deve estar pronto para enviar.
Davey