如何使用 Linux 命令行发送 HTML 邮件

2024-10-29 08:35:00
admin
原创
325
摘要:问题描述:我需要发送 html 格式的电子邮件。我只有 linux 命令行和命令“mail”。目前已使用过:echo "To: address@example.com" > /var/www/report.csv echo "Subject: Sub...

问题描述:

我需要发送 html 格式的电子邮件。我只有 linux 命令行和命令“mail”。

目前已使用过:

echo "To: address@example.com" > /var/www/report.csv
echo "Subject: Subject" >> /var/www/report.csv
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv

echo "<html>" >> /var/www/report.csv
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv
echo "</html>" >> /var/www/report.csv

mail -s "Built notification" address@example.com < /var/www/report.csv

但在我的邮件代理中我只收到纯文本。

替代文本


解决方案 1:

这对我有用:

echo "<b>HTML Message goes here</b>" | mail -s "$(echo -e "This is the subject
Content-Type: text/html")" foo@example.com

解决方案 2:

我的邮件版本没有这个功能--append,而且它对于`echo -e
-trick 来说太聪明了(它只是用空格替换 \n)。但是,它确实有-a`:

mail -a "Content-type: text/html" -s "Built notification" address@example.com < /var/www/report.html

解决方案 3:

使用命令行发送电子邮件

这个答案已经有 11 年多了,这些天我使用 python 的import ezgmail4 行即插即用解决方案

创建一个名为的文件,tmp.html内容如下:

<b>my bold message</b>

接下来,将以下内容粘贴到命令行中(括号及所有内容):

(
  echo To: youremail@blah.com
  echo From: el@defiant.com
  echo "Content-Type: text/html; "
  echo Subject: a logfile
  echo
  cat tmp.html
) | sendmail -t

由于该元素,邮件将包含一条粗体消息<b>

Shell 脚本

作为脚本,将以下内容保存为email.sh

ARG_EMAIL_TO="recipient@domain.com"
ARG_EMAIL_FROM="Your Name <you@host.com>"
ARG_EMAIL_SUBJECT="Subject Line"

(
  echo "To: ${ARG_EMAIL_TO}"
  echo "From: ${ARG_EMAIL_FROM}"
  echo "Subject: ${ARG_EMAIL_SUBJECT}"
  echo "Mime-Version: 1.0"
  echo "Content-Type: text/html; charset='utf-8'"
  echo
  cat contents.html
) | sendmail -t

contents.html在与脚本相同的目录中创建一个名为的文件,email.sh如下所示:

<html><head><title>Subject Line</title></head>
<body>
  <p style='color:red'>HTML Content</p>
</body>
</html>

运行email.sh。当电子邮件到达时,HTML Content文本将显示红色。

有关的

  • 如何使用 bash 命令“sendmail”发送 html 电子邮件?

解决方案 4:

在 OS X(10.9.4)上,cat如果您的电子邮件已经在文件中,则可以使用,并且更容易:

cat email_template.html  | mail -s "$(echo -e "Test
Content-Type: text/html")" karl@marx.com

解决方案 5:

问题是,当将文件重定向到“邮件”时,它仅用于邮件正文。您嵌入文件中的任何标题都将进入正文。

尝试:

mail --append="Content-type: text/html" -s "Built notification" address@example.com < /var/www/report.csv

--append 允许您向邮件添加任意标题,您应该在其中指定内容类型和内容处置。无需在文件中嵌入ToSubject标题,也无需使用 --append 指定它们,因为您已经在命令行上隐式设置它们(-s 是主题,address@example.com自动变为To)。

解决方案 6:

使用 heirloom-mailx,您可以将 sendmail 程序更改为您的挂钩脚本,在那里替换标题,然后使用 sendmail。

我使用的脚本(~/bin/sendmail-hook):

#!/bin/bash

sed '1,/^$/{
s,^(Content-Type: ).*$,text/html; charset=utf-8,g
s,^(Content-Transfer-Encoding: ).*$,8bit,g
}' | sendmail $@

此脚本按如下方式更改邮件头中的值:

  • Content-Type:text/html; charset=utf-8

  • Content-Transfer-Encoding:(不确定8bit是否真的需要)。

发送 HTML 电子邮件:

mail -Ssendmail='~/bin/sendmail-hook' \n    -s "Built notification" address@example.com < /var/www/report.csv

解决方案 7:

这个问题很老了,但是当我在谷歌上搜索有关这个问题时,它的排名很高。

在这里找到答案:

使用 shell 脚本发送 HTML 邮件

解决方案 8:

我在 git 的 post_receive 钩子之一中遇到了类似的问题(与邮件有关),最后我发现,sendmail 实际上更适合这类事情,特别是如果你知道一些电子邮件的构造方式(而且你似乎知道)。我知道这个答案来得很晚,但也许对其他人也会有用。我使用了 heredoc 运算符和扩展变量的功能,因此它也可以运行内联脚本。看看这个(bash 脚本):

#!/bin/bash
recipients=(
    'john@example.com'
    'marry@not-so-an.example.com'
#   'naah@not.this.one'
);
sender='highly-automated-reporter@example.com';
subject='Oh, who really cares, seriously...';
sendmail -t <<-MAIL
    From: ${sender}
    `for r in "${recipients[@]}"; do echo "To: ${r}"; done;`
    Subject: ${subject}
    Content-Type: text/html; charset=UTF-8

    <html><head><meta charset="UTF-8"/></head>
    <body><p>Ladies and gents, here comes the report!</p>
    <pre>`mysql -u ***** -p***** -H -e "SELECT * FROM users LIMIT 20"`</pre>
    </body></html>
MAIL

注意 MAIL 部分中的反引号会生成一些输出,并记住,该<<-运算符只会从行首删除制表符(而不是空格),因此在这种情况下复制粘贴将不起作用(您需要用适当的制表符替换缩进)。或者使用<<运算符,根本不缩进。希望这会对某人有所帮助。当然,您可以在 MAIL 部分之外使用反引号,并将输出保存到某个变量中,稍后您可以在 MAIL 部分中使用该变量 — 这取决于品味和可读性。我知道,#!/bin/bash它并不总是在每个系统上都有效。

解决方案 9:

我发现了一个非常简单的解决方案:在邮件命令中添加修饰符 -aContent-Type:text/html。

你的情况是:

mail -aContent-Type:text/html -s "Built notification" address@example.com < /var/www/report.csv

解决方案 10:

您应该使用“附加”模式重定向,>>而不是>

解决方案 11:

尝试:

echo "To: address@example.com" > /var/www/report.csv
echo "Subject: Subject" >> /var/www/report.csv
echo "MIME-Version: 1.0" >> /var/www/report.csv
echo "Content-Type: text/html; charset=\"us-ascii\"" >> /var/www/report.csv
echo "Content-Disposition: inline" >> /var/www/report.csv

echo "<html>" >> /var/www/report.csv
mysql -u ***** -p***** -H -e "select * from users LIMIT 20" dev >> /var/www/report.csv
echo "</html>" >> /var/www/report.csv

mail -s "Built notification" address@example.com < /var/www/report.csv
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1300  
  华为IPD产品开发流程是一套先进且成熟的产品开发管理体系,对众多企业提升产品竞争力有着重要的借鉴意义。它涵盖多个关键要素,这些要素相互关联、相互作用,共同构建起高效、科学的产品开发流程。深入剖析其中的五个核心要素,能让我们更好地理解华为成功背后的产品开发逻辑,为企业的产品创新与发展提供有力的指导。市场管理市场管理是IP...
IPD框架   20  
  华为集成产品开发(IPD)体系作为一套先进的产品开发管理理念和方法,在华为的发展历程中发挥了至关重要的作用。在供应链管理领域,IPD同样展现出巨大的价值,深刻影响着企业的运营效率、产品质量以及市场竞争力。通过将IPD理念融入供应链管理,华为实现了从产品规划到交付的全流程优化,为企业的持续发展奠定了坚实基础。IPD对供应...
IPD集成产品开发流程   23  
  IPD(Integrated Product Development)项目管理作为一种先进的产品开发管理模式,旨在通过整合跨部门资源,实现产品的高效开发与上市。然而,在实际推行过程中,IPD项目管理面临着诸多风险,若处理不当,可能导致项目进度延迟、成本超支甚至项目失败。深入了解这些风险并制定有效的应对策略,对于保障IP...
华为IPD流程   19  
  华为作为全球知名的科技企业,其成功背后的管理模式备受关注。其中,IPD(集成产品开发)产品开发流程对华为的创新发展起到了至关重要的推动作用。IPD不仅仅是一种流程,更是一种先进的管理理念,它将产品开发视为一个系统工程,涵盖了从市场需求分析、产品规划、研发、生产到上市等多个环节,通过整合企业内外部资源,实现高效、协同的产...
IPD流程中PDCP是什么意思   19  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用