六种使用 Linux 命令发送带附件的邮件 在很多场景中我们会使用 Shell 命令来发送邮件, 而且我们还可能在邮件里面添加附件, 本文将介绍使用 Shell 命令发送带附件邮件的几种方式, 希望对大家有所帮助 如果想及时了解 Spark Hadoop 或者 Hbase 相关的文章, 欢迎关注微信公共帐号 :iteblog_hadoop 使用 mail 命令 mail 命令是 mailutils(on Debian) 或 mailx(on RedHat) 包中的一部分, 我们可以使用他在命令行里面发送消息 如果你的系统没有安装 mail 命令, 可以使用下面的方式安装 : $ sudo apt-get install mailutils (On Debian) # yum install mailx (On RedHat or CentOS) 现在我们来使用 mail 命令来发送带附件的邮件, 如下 : echo " 这里输入你邮件内容 " mail -s " 邮件标题 " -a file.txt hadoop@iteblog.com 1 / 7
在上面的命令中,-s 参数用于指定消息主题 ;-a 参数指定需要发送的附件路径, 貌似这个不能发送多个附件 当然, 我们可以将邮件的内容存到一个文件中, 比如下面我们把邮件的内容存储到 message.txt 文件中, 然后发送 : mail -s " 邮件标题 " -a file.txt hadoop@iteblog.com < message.txt 我们在发送附件的时候出现下面的错误 : send-mail: fatal: iteblog(40010): message file too big 从上面的错误信息可以看出, 我们发送的附件太大了, 我们可以通过以下两种方法来加大附件大小的限制 : 第一种 : [root@iteblog.com ~]$ postconf message_size_limit message_size_limit = 51200000 echo "message_size_limit = 102400000" >> /etc/postfix/main.cf && service postfix reload Reloading Postfix configuration...done. 第二种 : [root@iteblog.com ~]$ postconf -e message_size_limit=302400000 [root@iteblog.com ~]$ service postfix restart Shutting down postfix: [ OK ] Starting postfix: [ OK ] [root@iteblog.com ~]$ postconf message_size_limit message_size_limit = 302400000 [root@iteblog.com ~]$ 两种方法都可以设置 2 / 7
使用 mutt 命令 mutt 是一个流行轻量级的电子邮件客户端命令, 我们同样可以使用它发送带附件的邮件, 如果你的电脑没有安装这个命令, 请使用下面命令安装 : $ sudo apt-get install mutt # yum install mutt 现在我们可以使用 mutt 命令发送带附件的邮件了 : echo " 这里输入你邮件内容 " mutt -s " 邮件标题 " hadoop@iteblog.com -a file.txt 从上面可以看出,mutt 的使用和 mail 命令很类似, 更多关于它的使用参数可以直接 man mutt 查看 使用 mailx 命令 mailx 命令看起来和 mutt 命令很类似, 如果你电脑没安装这个命令, 可以使用下面方法来安装 : $ sudo apt-get install mailutils # yum install mailx 然后可以使用下面命令发送带附件的邮件 : echo " 这里输入你邮件内容 " mailx -s " 邮件标题 " -a file.txt hadoop@iteblog.com 使用 mpack 命令 首先使用下面命令安装好这个命令 : $ sudo apt-get install mpack # yum install mpack 3 / 7
然后可以使用下面命令发送带附件的邮件 : $ mpack -s " 邮件标题 " file hadoop@iteblog.com 使用 telnet 命令发送邮件 我们还可以使用 telnet 来发送邮件, 使用起来稍微比直接用 mail 或者 mutt 命令复杂, 使用如下 : [root@iteblog.com ~]$ 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: hadoop@iteblog.com 250 2.1.0 Ok rcpt to: hadoop@iteblog.com 250 2.1.5 Ok data 354 End data with <cr><lf>.<cr><lf> Subject: 这里输入邮件标题 这里输入邮件内容这是内容. 250 2.0.0 Ok: queued as C99B626D quit 221 2.0.0 Bye Connection closed by foreign host. 上面代码加深背景色的就是我们要输入的, 我们需要根据要求输入发件人和收件人的 Email 等信息, 然后就可以发送邮件, 至于这个如何发送附件我没有去研究 4 / 7
使用 sendmail 命令发送邮件 我们还可以根据 Email 的规范自己构建邮件, 如下 : export MAILFROM="hadoop@iteblog.com" export MAILTO="hadoop@iteblog.com" 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 5 / 7
运行上面的代码会生成以下的信息 : From: hadoop@iteblog.com To: hadoop@iteblog.com 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 <html> <body> This is content. </body> </html> --MSGBOUNDARY-- --FILEBOUNDARY Content-Type: application/pdf Content-Disposition: inline; filename="iteblog.pdf" Content-Transfer-Encoding: base64 JVBERi0xLjYNJeLjz9MNCjE1IDAgb2JqDTw8L0xpbmVhcml6ZWQgMS9MIDk1MTgvTyAxNy9FIDQ4 ODcvTiAxL1QgOTIxNS9IIFsgNDU3IDE0OF0+Pg1lbmRvYmoNICAgICAgICAgICAgICAgICAgICAg OTVCRkY0RkU5RkRFNDk5NEM2MTUzRTMyMzk3RTIyPjxBQkY2QTYzNkY4NDhBRjQzOTA3NERF MzdG QkZBQTQ1Qj5dL0luZm8gMTQgMCBSL0xlbmd0aCA0OC9Sb290IDE2IDAgUi9TaXplIDE1L1R5cGU v WFJlZi9XWzEgMiAxXT4+c3RyZWFtDQpo3mJiAAImRmFxBiYGhhYgwfcKSDAtBhKMN4ASdxhBEkw g goerh8h4cydaanfsbsuncmvuzhn0cmvhbq1lbmrvymonc3rhcnr4cmvmdqoxmtynciulru 9GDQo= --FILEBOUNDARY Content-Type: text/csv Content-Disposition: inline; filename="test.csv" Content-Transfer-Encoding: base64 MSwyCg== --FILEBOUNDARY-- 然后就可以通过 sendmail 命令发送出去 6 / 7
Powered by TCPDF (www.tcpdf.org) 六种使用 Linux 命令发送带附件的邮件 本博客文章除特别声明, 全部都是原创! 转载本文请加上 : 转载自过往记忆 (https://www.iteblog.com/) 本文链接 : () 7 / 7