使用 mutt 发送 multipart/alternative

使用 mutt 发送 multipart/alternative

我希望某些电子邮件和/或收件人可以在发送之前运行一个脚本(无论是自动还是通过按下键绑定),该脚本获取我的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

相关内容