Отправка multipart/ альтернатива с Mutt
Мне бы хотелось, чтобы для некоторых электронных писем и / или получателей был запущен скрипт перед отправкой (либо автоматически, либо путем нажатия клавиш), который берет мой text/plain
запускает над ним скрипт, а затем присоединяет вывод этого скрипта к text/html
тип, устанавливая все сообщение в multipart/alternative
,
Side ramble: было бы неплохо, если бы это происходило автоматически непосредственно перед отправкой, но только если тип телосложения в настоящее время установлен на text/markdown
, поскольку это означало бы, что ожидающее электронное письмо никогда не будет в состоянии, когда я снова редактирую источник, но забываю заново создать HTML, и у меня все еще есть возможность отправлять только text/plain
, Тогда у меня была бы другая привязка, чтобы установить тип содержимого тела в text/markdown
так, чтобы это было подобрано. Но у меня также возникает проблема, связанная с тем, что многие почтовые клиенты (включая Gmail) отказываются отображать text/markdown
(даже в виде простого текста), вместо этого предлагая его для загрузки, поэтому мне нужно было бы переключить тип содержимого исходной части обратно на text/plain
,
Такое возможно с дураком?
К сожалению, насколько я могу судить, Mutt не поддерживает отправку multipart/alternative
сообщения, отказываясь отправлять что-либо, кроме multipart/mixed
, но я бы хотел, чтобы мне показали, что я не прав.
Лучшее решение, которое мне удалось найти, - это макрос:
macro compose M "<filter-entry>commonmark<return>y<edit-type><kill-line>text/html<return>" "convert message to HTML with Commonmark"
Есть несколько проблем с этим:
- Он полностью заменяет исходный простой текст, поэтому редактировать его намного сложнее
- Мне не нравится, что есть
y
в макросе сказать "да" диалогу, спрашивающему, можно ли перезаписать файл - Я должен нажать клавишу возврата после этого запуска
- И, конечно, главное: он не отправляет текстовую альтернативу
Есть ли лучшее решение?
Я потенциально открыт для другого почтового клиента в текстовом режиме, если он
- можно использовать со Службами Google и синхронизировать флаги и т. д. в обоих направлениях
- поддерживает GPG
- имеет vim-подобные привязки, или я могу их настроить
- позволяет мне использовать vim в качестве редактора сообщений
- имеет потоковое представление сообщений
- позволяет мне фильтровать / искать почту довольно сложным способом (отправитель, получатель, наличие вложений, поиск по теме и по тексту)
- Обрабатывает типы вложений немного как Mutt, т.е. mailcap или эквивалентный, поэтому я могу запускать входящую HTML-почту через lynx или нажимать что-то, чтобы открыть ее в графическом браузере, если это необходимо, я могу запускать средства просмотра изображений при нажатии кнопки и т. д.
2 ответа
Я забыл про NeoMutt поддерживает multipart. https://neomutt.org/guide/mimesupport.
#!/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