mutt
有没有办法使用像or这样的 linux 命令将图像嵌入到电子邮件的正文中sendmail
?
我用这个
mutt -e 'set content_type="text/image"' \
u.mohan@6dtech.co.in -s "TEST" \
-i image001.jpg < data.txt
但它不起作用。
我编写了一个 shell 脚本来发送mutt
带有嵌入图像而不是链接图像的 HTML 消息。
几个步骤:
<img>
下载由原始 HTML 中的标签链接的所有图像文件,src
通过将url 更改为 a 来准备 HTML 文件cid
,(neo)mutt
sendmail
这是将 HTML 文件名作为参数的主脚本(未执行检查,请不要将其视为 alpha 软件):
#!/bin/bash
F=$(basename "$1")
DIR="/tmp/inlinizer-$$/"
mkdir -p $DIR/Img
grep "src=" "$1" | sed -e "s,.*src=\"\([^\"]*/\)*\([^\"/]*\)\".*,wget \1\2 -O $DIR/Img/\2," > $DIR/get_img.sh
bash $DIR/get_img.sh
sed -e 's,src="\([^"]*/\)*\([^"/]*\)",src="cid:\2@example.com",g' < "$1" > "$DIR/$F"
neomutt -e 'set smtp_url=""' -e 'set sendmail="mysendmail"' -e "set content_type=text/html" me@example.com -s "test" -a $DIR/Img/* < "$DIR/$F"
还需要一个自定义的 sendmail 命令(mysendmail
在上面),它对以下生成的电子邮件文件进行后处理mutt
:
sed -e 's,Content-Disposition: attachment; filename="\([^"]*\)",Content-Disposition: inline; name="\1"\nContent-ID: <\1@example.com>,' < /dev/stdin | sed -e 's,Content-Type: multipart/mixed;,Content-Type: multipart/related;,' | sendmail $*
我已经在 GMail 和其他一些网络邮件中对其进行了测试。欢迎报告邮件客户端或网络邮件的问题。
对于那些希望使用 bash 脚本将带有嵌入图像的电子邮件作为电子邮件的一部分发送的人,我将这段代码拼凑在一起。
电子邮件以以下行开头:
EMAILBODY="echo \"Alarm went off! "
EMAILATTACH=""
在定义要附加的每个文件的循环内部:
EMAILATTACH=$EMAILATTACH" -a /home/xyz/"$ID"/"$Event"/"$Frame"-capture.jpg"
EMAILBODY=$EMAILBODY"<BR> <IMG Height=150 SRC=\"$Frame-capture.jpg\">"
循环之后,电子邮件通过以下几行完成:
EMAILBODY=$EMAILBODY"\" | mutt -e \"set content_type=text/html\" -s \"House Alarm went off!\""
EMAILSTRING=$EMAILBODY$EMAILATTACH" -- user@server.net"
eval $EMAILSTRING
我的最后一个障碍是,当我在我的 android 手机上收到这个(可能在其他浏览器上也一样)时,它不显示图片,只有一个小盒子(即使你已经下载了附件)。但它在 Outlook 中显示良好。
您可以通过将命令行中的-i更改为-a来附加图像。这不会嵌入图像本身,但会包含它。如果你想嵌入它,你发送的邮件必须是内容类型,并包含一个标签来显示附加的图像。text/html
img
请参阅此 SO 页面,了解如何在 HTML 邮件中正确嵌入图像附件。
甚至可以使用基本的邮件命令
您想创建一个 mime HTML 电子邮件,例如:
然后获取标题(第一个边界之前的所有行),从该输入中删除它们并在邮件之后使用 -a 命令单独添加它们,例如:
https://stackoverflow.com/a/12262421/2244213 或 使用 shell 脚本发送 HTML 邮件
我为此目的构建了一个命令行https://github.com/gonejack/embed-email
go get github.com/gonejack/embed-email
Usage:
embed-email *.eml [flags]
Flags:
-v, --verbose verbose
-h, --help help for embed-email
这个不需要自定义sendmail
命令,因为它会动态创建一个,使用它并在之后将其删除。
它是参数化的,因此您无需针对不同的收件人等更改其代码,并且它还提供了一些其他好处。
前几行代码应该足够清楚解释五个位置参数的含义,但这里举个例子,以防万一:
<script.sh> /srv/emailbody.html "Sender's Name" sender@example.com "Embedded images" 'Recipent's name <recipient@example.net>'
这取决于mktemp
(原始脚本没有),因为我喜欢它而不是 using $$
,但这只是一个品味问题。
#!/bin/bash
HTMLFULLPATH="$1"
SENDER="$2"
SENDEREMAIL="$3"
SUBJECT="$4"
RECIPIENT="$5"
HTML=$(basename "${HTMLFULLPATH}")
SENDERDOMAIN=$(echo "${SENDEREMAIL}" | cut -d@ -f2)
if ! [[ "${RECIPIENT}" == '*<*' ]] ; then
RECIPIENT="${RECIPIENT}"'<'"${RECIPIENT}"'>' # TO_NO_BRKTS_* SpamAssassin rules
fi
function atexit
{
rm -rf "${TEMPDIR}" "${NEOMUTTCONFIG}" >/dev/null 2>&1
}
trap atexit INT TERM EXIT
TEMPDIR=$(mktemp -d)
mkdir -p "${TEMPDIR}/img"
grep "src=" "${HTMLFULLPATH}" | sed -e "s,.*src=\"\([^\"]*/\)*\([^\"/]*\)\".*,wget \1\2 -O ${TEMPDIR}/img/\2," > "${TEMPDIR}/getimg.sh"
bash "${TEMPDIR}/getimg.sh" >/dev/null 2>&1
sed -e 's,src="\([^"]*/\)*\([^"/]*\)",src="cid:\2@'${SENDERDOMAIN}'",g' < "${HTMLFULLPATH}" > "${TEMPDIR}/${HTML}"
SENDMAIL="${TEMPDIR}/sendmail.sh"
cat > "${SENDMAIL}" << EOF
#!/bin/bash
sed -e 's,Content-Disposition: attachment; filename="\([^"]*\)",Content-Disposition: inline; name="\1"\nContent-ID: <\1@'${SENDERDOMAIN}'>,' < /dev/stdin | sed -e 's,Content-Type: multipart/mixed;,Content-Type: multipart/related;,' | sendmail \$*
EOF
chmod a+rx "${SENDMAIL}"
NEOMUTTCONFIG=$(mktemp)
echo 'set from="'"${SENDER}"' <'"${SENDEREMAIL}"'>"' >> "${NEOMUTTCONFIG}"
echo 'set smtp_url=""' >> "${NEOMUTTCONFIG}"
echo 'set sendmail="'${SENDMAIL}'"' >> "${NEOMUTTCONFIG}"
echo "set content_type=text/html" >> "${NEOMUTTCONFIG}"
neomutt -F "${NEOMUTTCONFIG}" "${RECIPIENT}" -s "${SUBJECT}" -a "${TEMPDIR}/img/"* < "${TEMPDIR}/${HTML}"
EMAILBODY="echo \"Alarm went off! "
EMAILATTACH=""
EMAILATTACH=$EMAILATTACH" -a "/home/uat12mgr/XXDBD_AR_INV_PRINT.jpg""
EMAILBODY=$EMAILBODY"<BR> <IMG Height=150 SRC=\""/home/uat12mgr/XXDBD_AR_INV_PRINT.jpg"\">"
EMAILBODY=$EMAILBODY"\" | mutt -e \"set content_type=text/html\" -s \"House Alarm went off!\""
EMAILSTRING=$EMAILBODY$EMAILATTACH" -- myaka@abc.com"
eval $EMAILSTRING