使用Mutt发送多部分/替代


12

我希望某些电子邮件和/或收件人可以选择在发送之前运行脚本(无论是自动执行还是通过按键盘快捷键)text/plain,该脚本接收我的脚本,在其上运行脚本,然后将该脚本的输出附加text/html类型,将整个消息设置为multipart/alternative

旁听:最好在发送前立即自动发生这种情况,但前提是当前的正文类型设置为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 Apps一起使用,并在两个方向上同步标志等
  • 支持GPG
  • 具有类似vim的绑定,或者我可以配置它们
  • 让我使用vim作为消息编辑器
  • 具有线程化消息视图
  • 使我能够以某种复杂的方式过滤/搜索邮件(发件人,收件人,附件的存在,主题和正文文本搜索)
  • 处理有点像mutt的附件类型,即mailcap或类似的附件,因此我可以通过lynx运行传入的HTML邮件,或者按需要在图形浏览器中按某种方式打开它,我可以在按下按钮时启动图像查看器,依此类推

Answers:


1

我忘了NeoMutt支持multipart。 https://neomutt.org/guide/mimesupport


这是个好消息。您链接的页面说,支持多部分/替代发送是基本的,但是我会尽快尝试。感谢您指出。
tremby

Neomutt应该是常规ol'mutt的替代品。另一个好处是,它显然有相当大的主动开发。
戴维

似乎该功能是在一年前添加的:github.com/neomutt/neomutt/pull/734
tremby

效果很好。我做了一个宏,类似于您在neomutt.org/guide/上发布的文档中建议的宏。在生成替代方案之后但在发送之前进行了更改,但我会在适当的时候弄清所有问题。请注意,第一个支持multipart / alternative的版本是2018-05-12版本,该版本尚未发布。我使用的源代码进行了编译--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

您似乎正在回答问题“每个“发件人”电子邮件地址是否可以使用不同的签名”,这根本不是我问的问题。我看不出这对发送多部分/替代电子邮件有何帮助。
tremby

我看到您已经修改了答案。好的,这样可以检查您要发送和发送的电子邮件地址(看起来好像对“发件人”不做任何事情)并可能添加一些标题。但是我仍然看不到这对发送多部分/替代电子邮件有什么帮助。
tremby

您可能需要根据自己的需要进行调整,所以我可能无法为您解决所有问题。但是一般的解决方案是将编辑器设置为脚本,该脚本调用编辑器然后解析草稿文件。
戴维

对草稿文件进行的哪些特定编辑将允许mutt发送多部分/替代内容?文件的两个版本(HTML和纯文本)在哪里?
tremby

您似乎有一种使用commonmark进行转换的方法。将其替换为someMultipartScript行。此时的$ 1将是纯文本。通过那里的转换工具将其发送并通过管道传递到相同的文件名$ 1。当该脚本终止时,它将向调用程序(mutt)发送信号,表明您的编辑器已关闭,此时应准备好发送该信号。
戴维
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.