8

我一直在使用 mutt 发送带有 pdf 附件的纯文本电子邮件,使用:

mutt -s "主题" -a file.pdf < mybody.txt

和没有附件的 html 电子邮件使用:

mutt -e "my_hdr Content-Type: text/html" -s "主题" < mybody.html

但我现在想发送一封带有 pdf 附件的 html 电子邮件,并且:

mutt -e "my_hdr Content-Type: text/html" -s "主题" -a file.pdf < mybody.html

不起作用。

html 和编码的 pdf 以及它们的标题都在电子邮件正文中显示为纯文本。

有人知道怎么做吗?

干杯

加里

4

2 回答 2

9

通过迦勒罗杰戴维斯

笨蛋版本:1.5.21

在同事的一些研究和帮助下,我能够让它工作(将 html 文件作为正文和 pdf 附件发送)。

我将 .html 文件和 .pdf 作为单独的文件。在发送之前,我在 .html 文件中进行了一些关键字替换(替换客户名称等)。

这是有效的 bash 脚本。

如果有人感兴趣,我想我也可以让它与 sendmail 一起使用。

#!/bin/bash
START=`date`

# --------------------------------------------------------------------------------------
# can be comma delimited list of email addresses
FROM=me@mycom.com
TO=me@mycom.com

subject="Monthly PDF report"
attachments="../src/test/resources/my.pdf ../src/test/resources/my2.pdf"

html_file="../src/main/resources/email_template.html"

# --------------------------------------------------------------------------------------
# send html with pdf attachment
# You can send additional attachments, the attachment list can be terminated with the "--"
mutt -e "set content_type=text/html" -s "$subject" $TO -a $attachments -- < $html_file

END=`date`
echo "START=$START"
echo "END=$END"
于 2014-03-04T17:55:34.510 回答
7

你真的不能这样做。Mutt 不是用来以编程方式发送消息的,它是一个交互式邮件客户端。用于发送消息的命令行标志仅作为次要附加组件存在,以这种方式不可能实现很多。

my_hdr命令不应该用于设置 MIME 标头,例如Content-Type. 即使您不包含附件,它也不会真正起作用。第二个命令的消息将有两个Content-Type标题;mutt 生成的第一个声明消息是text/plain,而您指定的第二个。碰巧您用来检查消息的客户端正在查看您的标题。对我来说,mutt 会将该消息显示为 HTML,但 Thunderbird 会显示未渲染的文档。

当尝试结合发送 HTML 和附件时,会发生同样的事情。有多个Content-Type标题。第一个来自 mutt 说消息是multipart/mixed,第二个说它是text/html。在我的测试中,mutt 将再次尊重第二个标题,因此尝试将整个消息(包括附件)呈现为 HTML。Thunderbird 再次尊重第一个Content-Type标头,因此找到了两个部分,HTML 和附件,但 HTML 部分没有自己的Content-Type标头指定它是 HTML,因此它不会按原样呈现,而是原始源是显示。

通过将 HTML 和 PDF 作为附件发送,正文为空,您可以稍微接近一点:

mutt -s "Subject" -a mybody.html -a file.pdf -- user@example.com < /dev/null

但是您可能最好使用实际上旨在以编程方式发送更复杂消息的工具。

于 2012-11-29T15:49:50.700 回答