Envoi multipart / alternative avec mutt

12

J'aimerais que certains e-mails et / ou destinataires aient la possibilité d'exécuter un script avant de l'envoyer (automatiquement ou en appuyant sur une liaison de touches) qui prend my text/plain, exécute un script dessus, puis attache la sortie de ce script avec le text/htmltype , définissant le message entier sur multipart/alternative.

Randonnée latérale: il pourrait être intéressant que cela se produise automatiquement immédiatement avant l'envoi, mais uniquement si le type de corps était actuellement défini sur text/markdown, car cela signifierait que l'e-mail en attente n'est jamais dans un état où je modifie à nouveau la source mais oublie de régénérer le HTML, et j'ai toujours la possibilité d'envoyer uniquement text/plain. Ensuite, j'aurais une autre liaison pour définir le type de contenu du corps text/markdown, afin que cela soit repris. Mais j'ai aussi le problème que beaucoup de clients de messagerie (Gmail inclus) refusent de rendre text/markdown(même en texte brut), au lieu de le proposer en téléchargement, donc je devrais avoir le type de contenu de la partie source repassé à text/plain.

Une telle chose est-elle possible avec mutt?

Malheureusement, autant que je sache, mutt ne prend pas en charge l'envoi de multipart/alternativemessages, refusant d'envoyer quoi que ce soit multipart/mixed, mais j'aimerais qu'on me montre que j'ai tort.

La meilleure solution que j'ai pu trouver est cette macro:

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

Il y a quelques problèmes avec ceci:

  • Il remplace entièrement le texte brut d'origine, il est donc beaucoup plus difficile à modifier
  • Je n'aime pas qu'il y ait ydans la macro pour dire oui à la boîte de dialogue demandant si c'est correct d'écraser le fichier
  • Je dois appuyer sur Retour après cette exécution
  • Et bien sûr, l'essentiel: il n'envoie pas l'alternative en texte brut

Y a-t-il une meilleure solution?

Je suis potentiellement ouvert à un autre client de messagerie en mode texte, tant qu'il

  • est utilisable avec Google Apps et synchronise les drapeaux, etc. dans les deux sens
  • prend en charge GPG
  • a des liaisons de type vim, ou je peux les configurer
  • me permet d'utiliser vim comme éditeur de messages
  • a une vue de message fileté
  • me permet de filtrer / rechercher le courrier d'une manière quelque peu sophistiquée (expéditeur, destinataire, présence de pièces jointes, recherche de sujet et de corps de texte)
  • gère les types de pièces jointes un peu comme mutt, c'est-à-dire mailcap ou équivalent afin que je puisse exécuter le courrier HTML entrant via lynx, ou appuyer sur quelque chose pour l'ouvrir dans le navigateur graphique si besoin est, je peux lancer les visionneuses d'images en appuyant sur un bouton, etc.
tremby
la source

Réponses:

1

J'ai oublié que NeoMutt prend en charge les parties multiples. https://neomutt.org/guide/mimesupport .

Davey
la source
C'est bon à entendre. La page que vous avez liée a déclaré que le support pour l'envoi de plusieurs parties / alternative est rudimentaire, mais je vais essayer bientôt. Merci de l'avoir signalé.
tremby
Neomutt est censé être un remplacement sans rendez-vous pour ol 'mutt ordinaire. L'autre chose intéressante est que son développement actif est apparemment assez important.
Davey
Il semble que la fonctionnalité ait été ajoutée il y a un an à peine
tremby
Cela fonctionne très bien. J'ai créé une macro similaire à celle suggérée dans les documents que vous avez publiés sur neomutt.org/guide/… - Je dois encore appuyer sur Entrée après avoir utilisé la macro, et je ne suis pas encore sûr de ce qui se passera si je veux faire changements après avoir généré l'alternative mais avant d'envoyer, mais je vais comprendre tout cela en temps voulu. Notez que la première version à prendre en charge plusieurs parties / alternative est la version 2018-05-12, qui n'est pas encore dans ma distribution. J'ai compilé à partir de la source avec --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
la source
Vous semblez répondre à la question "est-il possible d'utiliser des signatures différentes par adresse e-mail" de "", ce qui n'est pas du tout la question que j'ai posée. Je ne vois pas en quoi cela aide à envoyer des e-mails en plusieurs parties / alternatifs.
tremby
Je vois que vous avez modifié votre réponse. OK, cela vérifie les adresses e-mail à partir desquelles vous envoyez (ne semble pas faire quoi que ce soit avec "de") et ajoute éventuellement des en-têtes. Mais je ne vois toujours pas en quoi cela aide à envoyer des e-mails en plusieurs parties / alternatifs.
tremby
Vous devrez probablement ajuster cela pour vos propres besoins, donc je ne peux probablement pas tout expliquer pour vous. Mais la solution générale est que vous définissez votre éditeur sur un script qui appelle votre éditeur puis analyse le fichier brouillon.
Davey
Quelle modification spécifique du fichier brouillon permettra à mutt d'envoyer plusieurs parties / alternatives? Où sont les deux versions du fichier, HTML et texte brut?
tremby
Vous semblez avoir un moyen de convertir avec commonmark. Remplacez cela par la ligne someMultipartScript. $ 1 à ce stade sera en texte brut. Envoyez-le via votre outil de conversion et dirigez-le vers le même nom de fichier $ 1. Lorsque ce script se termine, il envoie un signal au programme appelant (mutt), que votre éditeur est fermé, auquel cas il devrait être prêt à envoyer.
Davey