有没有办法使用mutt
或sendmail
等linux命令将图像嵌入到电子邮件正文中?
我用过这个
mutt -e 'set content_type="text/image"' \
u.mohan@6dtech.co.in -s "TEST" \
-i image001.jpg < data.txt
但它不起作用。
答案 0 :(得分:2)
我编写了一个shell脚本,用于通过mutt
发送带有嵌入式图像而不是链接图像的HTML消息。
几个步骤:
<img>
标记链接的所有图像文件,src
网址更改为cid
,准备HTML文件,(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和其他一些网络邮件中对其进行了测试。欢迎报告邮件客户端或网络邮件的问题。
答案 1 :(得分:0)
您可以附加图片,方法是将命令行中的 -i 更改为 -a 。这不会嵌入图像perse,但会包含它。如果您要嵌入它,您发送的邮件必须是内容类型text/html
并包含img
标记以显示附加图像。
请参阅此SO页面,了解如何在HTML邮件中正确嵌入图像附件。
答案 2 :(得分:0)
对于那些希望使用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中显示得很好。
答案 3 :(得分:0)
甚至可以使用基本邮件命令
您想要创建一个mime HTML电子邮件la:
然后取出标题(第一个边界之前的所有行),从该输入中删除它们,并在邮件之后使用-a命令单独添加它们,如:
https://stackoverflow.com/a/12262421/2244213 要么 Sending HTML mail using a shell script
答案 4 :(得分:0)
此命令不需要自定义sendmail
命令,因为它可以即时创建一个命令,然后使用它并随后将其删除。
它是参数化的,因此您无需为其他收件人等更改其代码,它还提供了其他一些优点。
前几行代码应该足够清楚,以解释五个位置参数的含义,但这是一个示例,以防万一:
<script.sh> /srv/emailbody.html "Sender's Name" sender@example.com "Embedded images" 'Recipent's name <recipient@example.net>'
这取决于mktemp
(原始脚本没有),因为我比使用$$
更喜欢它,但这仅是一个口味问题。
#!/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}"
答案 5 :(得分:0)
我为此构建了一个命令行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
答案 6 :(得分:-1)
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