10

mutt有没有办法使用像or这样的 linux 命令将图像嵌入到电子邮件的正文中sendmail

我用这个

mutt -e 'set content_type="text/image"' \
   u.mohan@6dtech.co.in -s "TEST" \
    -i image001.jpg < data.txt

但它不起作用。

4

7 回答 7

4

我编写了一个 shell 脚本来发送mutt带有嵌入图像而不是链接图像的 HTML 消息。

几个步骤:

  1. <img>下载由原始 HTML 中的标签链接的所有图像文件,
  2. src通过将url 更改为 a 来准备 HTML 文件cid
  3. 准备一封多部分的电子邮件(neo)mutt
  4. 修复此电子邮件中的一些内容描述标签
  5. 发送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 和其他一些网络邮件中对其进行了测试。欢迎报告邮件客户端或网络邮件的问题。

于 2019-02-05T14:32:39.823 回答
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 中显示良好。

于 2013-05-03T23:42:29.453 回答
0

您可以通过将命令行中的-i更改为-a来附加图像。这不会嵌入图像本身,但会包含它。如果你想嵌入它,你发送的邮件必须是内容类型,并包含一个标签来显示附加的图像。text/htmlimg

请参阅此 SO 页面,了解如何在 HTML 邮件中正确嵌入图像附件。

在 HTML 电子邮件中嵌入附加图像

于 2013-02-02T00:32:11.000 回答
0

甚至可以使用基本的邮件命令

您想创建一个 mime HTML 电子邮件,例如:

如何在电子邮件中嵌入图像

然后获取标题(第一个边界之前的所有行),从该输入中删除它们并在邮件之后使用 -a 命令单独添加它们,例如:

https://stackoverflow.com/a/12262421/2244213使用 shell 脚本发送 HTML 邮件

于 2014-01-09T16:37:55.530 回答
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
于 2021-03-29T02:26:47.253 回答
0

这是Joce脚本的改进版本。

这个不需要自定义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}"
于 2019-07-12T23:20:24.727 回答
-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
于 2016-09-23T03:05:36.137 回答