Answers:
mail
周围有许多不同版本。当您超出限制mail -s subject to1@address1 to2@address2 <body
(用于发送时,这就是POSIX的所有保证,甚至-s
在过去并不存在),它们往往具有不同的命令行选项。添加额外的标题并不总是那么容易。
对于某些mailx
实现,例如从mailutils
Ubuntu或Debian的实现bsd-mailx
,这很容易,因为有一个选项。
mailx -a 'Content-Type: text/html' -s "Subject" to@address <test.html
有了传家宝 mailx
,没有便捷的方法。插入任意标题的一种可能性是设置editheaders=1
和使用外部编辑器(可以是脚本)。
## Prepare a temporary script that will serve as an editor.
## This script will be passed to ed.
temp_script=$(mktemp)
cat <<'EOF' >>"$temp_script"
1a
Content-Type: text/html
.
$r test.html
w
q
EOF
## Call mailx, and tell it to invoke the editor script
EDITOR="ed -s $temp_script" heirloom-mailx -S editheaders=1 -s "Subject" to@address <<EOF
~e
.
EOF
rm -f "$temp_script"
使用一般的POSIXmailx
,我不知道如何获得标题。
如果您要使用mail
或mailx
,请记住
mail
和mailx
。mail
并且mailx
开始与对待线~
为命令。如果将文本输入管道mail
,则需要安排该文本不包含以开头的行~
。如果你要你一定要安装软件,你还不如安装的东西比更可预测mail
/ Mail
/ mailx
。例如,mutt。使用Mutt,您可以在输入中为大多数标头提供-H
选项,但不能通过Content-Type
mutt选项设置此选项。
mutt -e 'set content_type=text/html' -s 'hello' 'to@address' <test.html
或者您可以sendmail
直接调用。有几种版本sendmail
,但是它们都支持sendmail -t
以最简单的方式发送邮件,并从邮件中读取收件人列表。(我认为他们并不全都支持Bcc:
。)在大多数系统上,sendmail
通常不是$PATH
,而是in /usr/sbin
或in /usr/lib
。
cat <<'EOF' - test.html | /usr/sbin/sendmail -t
To: to@address
Subject: hello
Content-Type: text/html
EOF
#!/bin/sh
(
echo "To: me@example.com"
echo "Subject: hello"
echo "Content-Type: text/html"
echo
echo "<html><b><font size='7'>H</font>ello</b></html>"
echo
) | /usr/sbin/sendmail -t
使用Heirloom Mailx,便捷的方法是
mailx -s "$(echo -e "Newsletter issue 3\nContent-Type: text/html")" user@server.com < /tmp/htmlmail.txt
谢谢,Dude
在Fedora 17上进行了测试,并努力工作
您必须Content-Type
在电子邮件中添加标题才能实现此目的。
echo "<html><b>Hello</b></html>" | mail -a "Content-type: text/html;" -s "Testing" me@example.com
将工作
mailx
吗 那可能有选择。如果那不起作用。如果那行不通,您可以考虑使用mutt,尽管我不知道该如何切换命令行。
使用heirloom-mailx,您可以将sendmail程序更改为钩子脚本,在其中替换标头,然后使用sendmail。
我使用的脚本(~/bin/sendmail-mailx-hook
):
#!/bin/bash
sed '1,/^$/{
s,^\(Content-Type: \).*$,\1text/html; charset=utf-8,g
s,^\(Content-Transfer-Encoding: \).*$,\18bit,g
}' | sendmail $@
此脚本如下更改邮件头中的值:
Content-Type:
至 text/html; charset=utf-8
Content-Transfer-Encoding:
到8bit
(不确定是否确实需要)。发送HTML电子邮件:
mailx -Ssendmail='~/bin/sendmail-mailx-hook' -s "subject" xxxxx@gmail.com < test.html
此方法比@Gilles提出的方法更有效,因为它不会创建临时文件,而只是即时修复流。
我已经使用以下脚本来发生
#!/bin/ksh
(
echo "To: yourmail@domain.com"
echo "Subject: Job Status"
echo "Content-Type: text/html"
echo
echo "<html>
<head>
<title>Status of the jobs during the day</title>
<style>
table, th, td {
border: 1px solid blue;
border-collapse: collapse;
}
th, td {
padding: 5px;
}
</style>
</head>
<body>
<table style='width:100%'>
<tr bgcolor='#808080'>
<th>Job Name</th>
<th>System name</th>
<th>Status</th>
</tr>
<tr>
<td>Job-1</td>
<td>Sys</td>
<td>Sucess</td>
</tr>
<tr>
<td>Job-2</td>
<td>sys</td>
<td>Failure</td>
</tr>
<tr>
<td>Job-3</td>
<td>sys</td>
<td>Sucess</td>
</tr>
</table>
</body></html>"
echo
) | /usr/sbin/sendmail -t
对我来说,我需要指定一个变量,例如SMTP服务器,因此mail命令以以下方式工作。我搜索了许多帖子,发现以下属性可以将正文转换为text / html。现在,我收到的电子邮件为HTML格式。
内容处置:内联
Unix版本:Red Hat Enterprise Linux Server 6.6版(圣地亚哥)
第一。将所需的任何信息创建到脚本中(testSql.sh)
echo "<html><body><pre>"
mysql -u USERNAME -pPASSWORD -P PORTNUMBER -h HOSTNAME DBNAME --table -e "select columns from tablename where member in ('value1','value2')"
echo "</pre></body></html>"
第二。将该脚本通过管道发送到mail命令
./testSql.sh | mail -v -S smtp=smtp://IP:PORTNUMBER -s "$(echo -e "This is the subject\nContent-Type: text/ht ml\nMIME-Version: 1.0\nContent-Disposition: inline")" userid@email.com
通过这样做,我在电子邮件中获得以下信息:
内容处置:内联消息ID:用户代理:Heirloom mailx 12.4 7/29/08 MIME版本:1.0内容类型:text / plain; charset = us-ascii内容传输编码:7位 值1值2
根据在testSql.sh中完成的HTML标记的Value1和Value2