在很多场景中我们会使用Shell命令来发送邮件,而且我们还可能在邮件里面添加附件,本文将介绍使用Shell命令发送带附件邮件的几种方式,希望对大家有所帮助。
- 1 使用mail命令
- 2 使用mutt命令
- 3 使用mailx命令
- 4 使用mpack命令
- 5 使用telnet命令发送邮件
- 6 使用sendmail命令发送邮件
使用mail命令
mail
命令是mailutils(On Debian)或mailx(On RedHat)包中的一部分,我们可以使用他在命令行里面发送消息。
如果你的系统没有安装mail命令,可以使用下面的方式安装:
$
sudo
apt-get
install
mailutils (On Debian)
# yum install mailx (On RedHat or CentOS)
|
现在我们来使用mail命令来发送带附件的邮件,如下:
|
在上面的命令中,-s
参数用于指定消息主题;-a
参数指定需要发送的附件路径,貌似这个不能发送多个附件。
当然,我们可以将邮件的内容存到一个文件中,比如下面我们把邮件的内容存储到message.txt文件中,然后发送:
|
send-mail: fatal: iteblog(40010): message
file
too big
|
从上面的错误信息可以看出,我们发送的附件太大了,我们可以通过以下两种方法来加大附件大小的限制:
第一种:
[[email protected] ~]$ postconf message_size_limit
message_size_limit = 51200000
echo
"message_size_limit = 102400000"
>>
/etc/postfix/main
.cf && service postfix reload
Reloading Postfix configuration...
done
.
|
第二种:
[[email protected] ~]$ postconf -e message_size_limit=302400000
[[email protected] ~]$ service postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
[[email protected] ~]$ postconf message_size_limit
message_size_limit = 302400000
[[email protected] ~]$
|
两种方法都可以设置。
使用mutt命令
mutt是一个流行轻量级的电子邮件客户端命令,我们同样可以使用它发送带附件的邮件,如果你的电脑没有安装这个命令,请使用下面命令安装:
$
sudo
apt-get
install
mutt
# yum install mutt
|
现在我们可以使用mutt命令发送带附件的邮件了:
|
从上面可以看出,mutt
的使用和 mail
命令很类似,更多关于它的使用参数可以直接 man mutt
查看。
使用mailx命令
mailx
命令看起来和mutt
命令很类似,如果你电脑没安装这个命令,可以使用下面方法来安装:
$
sudo
apt-get
install
mailutils
# yum install mailx
|
然后可以使用下面命令发送带附件的邮件:
|
使用mpack命令
首先使用下面命令安装好这个命令:
$
sudo
apt-get
install
mpack
# yum install mpack
|
然后可以使用下面命令发送带附件的邮件:
|
使用telnet命令发送邮件
我们还可以使用telnet来发送邮件,使用起来稍微比直接用 mail
或者 mutt
命令复杂,使用如下:
[[email protected] ~]$ telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is
'^]'
.
220 www.iteblog.com ESMTP Postfix
HELO iteblog.com
250 www.iteblog.com
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok
data
354 End data with
Subject: 这里输入邮件标题
这里输入邮件内容
这是内容
.
250 2.0.0 Ok: queued as C99B626D
quit
221 2.0.0 Bye
Connection closed by foreign host.
|
上面代码加深背景色的就是我们要输入的,我们需要根据要求输入发件人和收件人的Email等信息,然后就可以发送邮件,至于这个如何发送附件我没有去研究。。
使用sendmail命令发送邮件
我们还可以根据Email的规范自己构建邮件,如下:
export
SUBJECT=
"Your Invoice"
export
BODY=
"/tmp/t.html"
export
ATTACH_PDF=
"/tmp/iteblog.pdf"
export
ATTACH_CSV=
"/tmp/test.csv"
pdf_file=$(
basename
"$ATTACH_PDF"
)
csv_file=$(
basename
"$ATTACH_CSV"
)
{
echo
"From: $MAILFROM"
echo
"To: $MAILTO"
echo
"MIME-Version: 1.0"
echo
"Subject: $SUBJECT"
echo
"Content-Type: multipart/mixed; boundary=\"FILEBOUNDARY\""
echo
"--FILEBOUNDARY"
echo
"Content-Type: multipart/alternative; boundary=\"MSGBOUNDARY\""
echo
"--MSGBOUNDARY"
echo
"Content-Type: text/html; charset=iso-8859-1"
echo
"Content-Disposition: inline"
echo
""
cat
"$BODY"
echo
"--MSGBOUNDARY--"
echo
"--FILEBOUNDARY"
echo
"Content-Type: application/pdf"
echo
"Content-Disposition: inline; filename=\"${pdf_file}\""
echo
"Content-Transfer-Encoding: base64"
base64 $ATTACH_PDF
echo
"--FILEBOUNDARY"
echo
"Content-Type: text/csv"
echo
"Content-Disposition: inline; filename=\"${csv_file}\""
echo
"Content-Transfer-Encoding: base64"
base64 $ATTACH_CSV
echo
"--FILEBOUNDARY--"
} |
/usr/sbin/sendmail
-t
|
运行上面的代码会生成以下的信息:
From: [email protected]
MIME-Version: 1.0
Subject: Your Invoice
Content-Type: multipart
/mixed
; boundary=
"FILEBOUNDARY"
--FILEBOUNDARY
Content-Type: multipart
/alternative
; boundary=
"MSGBOUNDARY"
--MSGBOUNDARY
Content-Type: text
/html
; charset=iso-8859-1
Content-Disposition: inline
This is content.
<
/body
>
<
/html
>
--MSGBOUNDARY--
--FILEBOUNDARY
Content-Type: application
/pdf
Content-Disposition: inline; filename=
"iteblog.pdf"
Content-Transfer-Encoding: base64
JVBERi0xLjYNJeLjz9MNCjE1IDAgb2JqDTw8L0xpbmVhcml6ZWQgMS9MIDk1MTgvTyAxNy9FIDQ4
ODcvTiAxL1QgOTIxNS9IIFsgNDU3IDE0OF0+Pg1lbmRvYmoNICAgICAgICAgICAgICAgICAgICAg
OTVCRkY0RkU5RkRFNDk5NEM2MTUzRTMyMzk3RTIyPjxBQkY2QTYzNkY4NDhBRjQzOTA3NERFMzdG
QkZBQTQ1Qj5dL0luZm8gMTQgMCBSL0xlbmd0aCA0OC9Sb290IDE2IDAgUi9TaXplIDE1L1R5cGUv
WFJlZi9XWzEgMiAxXT4+c3RyZWFtDQpo3mJiAAImRmFxBiYGhhYgwfcKSDAtBhKMN4ASdxhBEkwg
goERH8H4CyDAANfsBSUNCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQoxMTYNCiUlRU9GDQo=
--FILEBOUNDARY
Content-Type: text
/csv
Content-Disposition: inline; filename=
"test.csv"
Content-Transfer-Encoding: base64
MSwyCg==
--FILEBOUNDARY--
|
然后就可以通过sendmail
命令发送出去。