Invio multipart / alternativa con mutt


12

Vorrei l'opzione per determinate e-mail e / o destinatari di eseguire uno script prima di inviarlo (automaticamente o premendo un tasto di scelta rapida) che prende il mio text/plain, esegue uno script su di esso e quindi allega l'output di quello script con il text/htmltipo , impostando l'intero messaggio su multipart/alternative.

Inclusione laterale: potrebbe essere bello se ciò accadesse automaticamente immediatamente prima dell'invio, ma solo se il tipo di corpo era attualmente impostato su text/markdown, poiché ciò significherebbe che l'email in sospeso non è mai in uno stato in cui modifico di nuovo la fonte ma dimentica di rigenerare l'HTML, e ho ancora la possibilità di inviare solo text/plain. Quindi avrei un'altra associazione per impostare il tipo di contenuto del corpo text/markdown, in modo che questo venga raccolto. Ma poi ho anche il problema che molti client di posta (incluso Gmail) si rifiutano di eseguire il rendering text/markdown(anche come testo normale), invece di offrirlo come download, quindi dovrei cambiare il tipo di contenuto della parte di origine a text/plain.

È possibile con mutt?

Purtroppo per quanto ne so mutt non supporta l'invio di multipart/alternativemessaggi, rifiutando di inviare qualsiasi cosa multipart/mixed, ma mi piacerebbe essere mostrato che mi sbaglio.

La migliore soluzione che sono riuscito a trovare è questa macro:

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

Ci sono alcuni problemi con questo:

  • Sostituisce del tutto il testo normale originale, quindi è molto più difficile modificarlo
  • Non mi piace il fatto che c'è ynella macro di dire di sì alla finestra di dialogo chiedendo se va bene sovrascrivere il file
  • Devo premere invio dopo questo funziona
  • E ovviamente la cosa principale: non invia l'alternativa in testo semplice

C'è una soluzione migliore?

Sono potenzialmente aperto a un altro client di posta in modalità testo, purché

  • è utilizzabile con Google Apps e sincronizza flag ecc. in entrambe le direzioni
  • supporta GPG
  • ha associazioni simili a vim, oppure posso configurarle
  • mi permette di usare vim come editor di messaggi
  • ha una vista messaggi filettata
  • mi permette di filtrare / cercare la posta in un modo un po 'sofisticato (mittente, destinatario, presenza di allegati, ricerca di soggetto e corpo)
  • gestisce i tipi di allegati un po 'come mutt, ovvero mailcap o equivalenti in modo da poter eseguire la posta HTML in arrivo tramite lynx o premere qualcosa per aprirlo nel browser grafico, se necessario, posso avviare i visualizzatori di immagini premendo un pulsante e così via

Risposte:


1

Ho dimenticato che NeoMutt supporta multipart. https://neomutt.org/guide/mimesupport .


È una buona notizia. La pagina che hai linkato dice che il supporto per l'invio di multipart / alternative è rudimentale, ma ci proverò presto. Grazie per segnalarlo.
tremby

Neomutt dovrebbe essere un sostituto drop-in per il vecchio mutt normale. L'altra cosa bella è che a quanto pare ha avuto uno sviluppo attivo piuttosto grande.
Davey,

Sembra che la funzione sia stata aggiunta solo un anno fa: github.com/neomutt/neomutt/pull/734
tremby

Funziona benissimo. Ho creato una macro simile a quella suggerita nei documenti che hai pubblicato su neomutt.org/guide/… - Devo ancora premere Invio dopo aver usato la macro, e non sono ancora sicuro di cosa accadrà se voglio fare cambia dopo aver generato l'alternativa ma prima di inviarlo, ma lo scoprirò a tempo debito. Nota che la prima versione a supportare multipart / alternative è la versione 2018-05-12, che non è ancora nella mia distribuzione. Ho compilato dalla fonte con --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

Sembra che tu stia rispondendo alla domanda "è possibile usare firme diverse per" da "indirizzo email", che non è affatto la domanda che ho posto. Non vedo come questo aiuti con l'invio di e-mail multipart / alternative.
tremby

Vedo che hai modificato la tua risposta. OK, questo controlla quali indirizzi email stai inviando e verso (non sembra che tu faccia nulla con "da") e probabilmente aggiunge alcune intestazioni. Ma non vedo ancora come questo aiuti con l'invio di e-mail multipart / alternative.
tremby

Probabilmente dovrai adattarlo alle tue esigenze, quindi probabilmente non posso precisare tutto per te. Ma la soluzione generale è impostare il tuo editor su uno script che richiama il tuo editor e quindi analizzi il file di bozza.
Davey,

Quale modifica specifica al file di bozza consentirà a mutt di inviare multipart / alternativa? Dove sono le due versioni del file, HTML e testo normale?
tremby

Sembra che tu abbia un modo di convertire con il segno comune. Sostituiscilo con la riga someMultipartScript. $ 1 a quel punto saranno in chiaro. Invialo tramite lo strumento di conversione lì e lo instrada allo stesso nome file $ 1. Quando questo script termina, invia un segnale al programma chiamante (mutt), che il tuo editor è chiuso, a quel punto dovrebbe essere pronto per l'invio.
Davey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.