我希望某些电子邮件和/或收件人可以在发送之前运行一个脚本(无论是自动还是通过按下键绑定),该脚本获取我的text/plain
,在其上运行一个脚本,然后将该脚本的输出附加到类型上text/html
,将整个消息设置为multipart/alternative
。
旁白:如果在发送之前自动发生这种情况可能会很好,但前提是当前正文类型设置为text/markdown
,因为这意味着待处理的电子邮件永远不会处于我再次编辑源但忘记重新生成 HTML 的状态,并且我仍然可以选择仅发送text/plain
。然后我会有另一个绑定来将正文的内容类型设置为text/markdown
,以便将其拾取。但我也遇到一个问题,许多邮件客户端(包括 Gmail)拒绝呈现text/markdown
(即使是纯文本),而是将其作为下载提供,所以我需要将源部分的内容类型切换回text/plain
。
mutt 能实现这样的事吗?
遗憾的是,据我所知,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 Apps 一起使用,并双向同步标志等
- 支持GPG
- 有类似 vim 的绑定,或者我可以配置它们
- 让我使用 vim 作为消息编辑器
- 有线程消息视图
- 允许我以比较复杂的方式过滤/搜索邮件(发件人、收件人、附件的存在、主题和正文搜索)
- 处理附件类型有点类似 mutt,即 mailcap 或同等程序,这样我就可以通过 lynx 运行传入的 HTML 邮件,或者在需要时按下某个按钮在图形浏览器中打开它,我可以通过按下按钮启动图像查看器,等等
答案1
我忘了 NeoMutt 支持多部分。 https://neomutt.org/guide/mimesupport。
答案2
#!/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