我正在尝试使用以下命令发送邮件。我将此命令从 sqr 发送到命令行,工作正常。$FilePath_mail
有To
、From
和其他信息以及 HTML 格式的邮件正文。我想在正文中包含图像(徽标),因此我想将其作为附件发送。
/usr/sbin/sendmail -t < $FilePath_mail
我需要更改上述命令以将附件(基本上是图像)添加到邮件中?
答案1
您需要将图像作为 MIME 部分添加到邮件中,然后使用Content-ID
已答复的 (CID)引用它这里
背后的人快递MTA已经实现了实用程序模仿。它将作为 Courier MTA 的一部分安装,但在某些系统上,它是一个独立的软件包或作为邮件投递公用事业。
这makemime
使得从命令行对邮件消息进行 MIME 编码变得更加容易。他们页面上的示例是:
例如:
# Take two files containing the text and the html version of a message, and
# add MIME headers to them.
makemime -c "text/plain; charset=iso-8859-1" -o tmp1.txt msg.txt
makemime -c "text/html; charset=iso-8859-1" -o tmp1.html msg.html
# Combine the result into a multipart/alternative collection
makemime -m "multipart/alternative" -a "Content-Disposition: inline" \
-o tmp.ma1 tmp1.txt
makemime -j tmp.ma1 -o tmp.ma2 tmp1.html
# Add MIME headers to an image attachment.
makemime -c "image/gif" -a "Content-Disposition: attachment" \
-o tmp2.gif attachment.gif
# Create the final multipart/mixed collection
makemime -m "multipart/mixed" -a "Mime-Version: 1.0" \
-o tmp.mm1 tmp.ma2
makemime -j tmp.mm1 -o output.msg tmp2.gif
output.msg 现在包含完整的 MIME 集合。只需添加“Subject:”、“From:”和“To:”标头(当然也可以通过附加 -a 选项来完成),然后继续发送。
这就是你所要求的——而且这是可以做到的。使用类似的工具makemime
可以使该过程相当安全。
不过,您应该阅读 Sendgrid 的文章“如何在电子邮件中嵌入图像:事实”。由于许多客户端处理不当,我通常最终只是引用网络服务器上的图像。这是最简单的方法,尽管它通常需要用户“单击查看”,但它似乎可以在客户端之间提供最一致的结果。
另一种选择是将徽标内联嵌入 HTML 源代码中。
<img alt="Logo" src="data:image/jpeg;base64,">
或者
<img alt="Logo" src="data:image/png;base64,"
之后添加图像文件的 Base64 编码数据,base64,
然后就可以开始了。但同样,许多客户不会喜欢它。
您可以使用以下命令在线对文件进行编码base64encode.org。我强烈建议首先使用类似的东西压缩图像小PNG
答案2
如果您选择仅发送图像,您可以随时通过电子邮件发送图像mpack
您需要的语法大致是:
mpack -s "This is my image" $FilePath_mail [email protected]
从man mpack
姓名
mpack - pack a file in MIME format
描述 mpack 程序将指定文件编码为一个或多个 MIME 消息。生成的消息将邮寄给一个或多个收件人、写入指定文件或一组文件,或者发布到一组新闻组。
在 Debian 中,您可以按以下方式安装它:
sudo apt-get install mpack