在很多场景中我们会使用Shell命令来发送邮件,而且我们还可能在邮件里面添加附件,本文将介绍使用Shell命令发送带附件邮件的几种方式,希望对大家有所帮助。

文章目录

使用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

在上面的命令中,-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 ~]$

两种方法都可以设置。

使用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

然后可以使用下面命令发送带附件的邮件:

$ 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等信息,然后就可以发送邮件,至于这个如何发送附件我没有去研究。。

使用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

运行上面的代码会生成以下的信息:

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
OTVCRkY0RkU5RkRFNDk5NEM2MTUzRTMyMzk3RTIyPjxBQkY2QTYzNkY4NDhBRjQzOTA3NERFMzdG
QkZBQTQ1Qj5dL0luZm8gMTQgMCBSL0xlbmd0aCA0OC9Sb290IDE2IDAgUi9TaXplIDE1L1R5cGUv
WFJlZi9XWzEgMiAxXT4+c3RyZWFtDQpo3mJiAAImRmFxBiYGhhYgwfcKSDAtBhKMN4ASdxhBEkwg
goERH8H4CyDAANfsBSUNCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQoxMTYNCiUlRU9GDQo=
--FILEBOUNDARY
Content-Type: text/csv
Content-Disposition: inline; filename="test.csv"
Content-Transfer-Encoding: base64
MSwyCg==
--FILEBOUNDARY--

然后就可以通过sendmail命令发送出去。

linux mail 发送邮件附件的更多相关文章

  1. linux mail 发送邮件

    1.mail -s "Title“ 123456@163.com   只有主题,没有内容 2. 有邮件内容 echo "text" | mail -s "Tit ...

  2. Linux mail发送邮件

    发送前一天的监控日志#!/bin/bash source /etc/profile time=`date -d '-1 day' "+%Y%m%d"` #判断服务是否已经启动 se ...

  3. Linux使用Mutt发送邮件/附件

    使用Mutt发邮件极其方便,只需要一条命令即可发送或者批量发送邮件 功能说明:E-mail管理程序. 语 法:mutt [-hnpRvxz][-a<文件>][-b<地址>][- ...

  4. linux下使用自带mail发送邮件

    linux下使用自带mail发送邮件 mailx工具说明: linux可以通过安装mailx工具,mailx是一个小型的邮件发送程序,一般可以通过该程序在linux系统上,进行监控linux系统状态并 ...

  5. mail如何在linux中发送邮件,使用163邮箱发信。

    如何在linux中发送邮件,使用163邮箱发信.   linux中,可以使用mail命令往外发送邮件,在使用前,只需要指定如下简单配置即可,这里演示用  163.com    邮箱发送至 qq.com ...

  6. Linux mail 命令参数

    linux mail 命令参数: 使用mail发邮件时,必须先将sendmail服务启动. mail –s “邮件主题” –c”抄送地址” –b “密送地址” -- -f 发送人邮件地址 –F 发件人 ...

  7. Linux mail 命令使用

    linux mail 命令参数: 使用mail发邮件时,必须先将sendmail服务启动. mail –s “邮件主题” –c”抄送地址” –b “密送地址” -- -f 发送人邮件地址 –F 发件人 ...

  8. Linux下发送邮件

    Linux下发送邮件 1.配置 vim /etc/mail.rc 文件尾增加以下内容 set from=ymwugui@linuxidc.com smtp=smtp.sina.com.cn set s ...

  9. Linux mail 邮件发送

    Linux mail 邮件介绍 在Linux系统下我们可以通过”mail“命令,发送邮件,在运维中通常我们它来实现邮件告警. 安装 (方案1) 一.安装邮件服务 yum install -y send ...

随机推荐

  1. Python Tkinter 学习成果:点歌软件music

    笔者工作业余时间也没什么爱好,社交圈子也小,主要娱乐就是背着自己带电瓶的卖唱音响到住地附近找个人多的位置唱唱KtV. 硬件上点歌就用笔记本电脑,歌曲都是网上下载的mkv格式的含有两个音轨的视频.因此点 ...

  2. SharpGL学习笔记(九) OpenGL的光照模型, 术语解释

    在3D场景中,每个像素最终显示出来的颜色都是经过大量计算而得到的,其中一些计算是依赖于场景中的光照以及场景中物体对光线的反射和吸收情况. 例如,对于一个红色的物体, 在白色光(白光是红光,绿光和蓝光等 ...

  3. Unity3D protobuf-net使用方式

    1.下载protobuf-net 2.创建Unity工程,创建一个Plugins文件夹,将protobuf-net解压把里面得protobuf-net放到Plugins 3.创建一个名为mcs的文本文 ...

  4. Castle DynamicProxy creation出现COMException(0x800703fa)错误的解决方案

    昨天有客户反馈周末重启服务器后,几台服务器上的应用运行全部出错.大致错误内容如下: COMException(0x800703fa):试图在标记为删除的注册表项上进行不合法的操作. 通过查看异常堆栈, ...

  5. 通过Intent Flags ,从桌面返回到App最后Activity

    extends:http://bbs.csdn.net/topics/350269396,http://blog.csdn.net/moreevan/article/details/6788048 最 ...

  6. SVG学习笔录(二)

    一.svg动画SMIL SVG采用的是使用文本来定义图形,这种文档结构非常适合于创建动画.要改变图形的位置.大小和颜色,只需要调整相应的属性就可以了.事实上,SVG有为各种事件处理而专门设计的属性,甚 ...

  7. 结对编程2—Fault&Error&Failure

    学习进度表 点滴成就 学习时间 新编写代码行数 博客量(篇) 学到知识点 第一周 8 0 0 了解软件工程 第二周 10 0 1 博文一篇 第三周 15 0 2 选择项目.调查问卷 第四周 20 80 ...

  8. 洛谷P2414 阿狸的打字机【AC自动机】【fail树】【dfs序】【树状数组】

    居然真的遇上了这种蔡队题.瑟瑟发抖. 题目背景 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机. 题目描述 打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母.经阿 ...

  9. ubuntu16.04下安装sublime_text

    1 在终端输入: sudo add-apt-repository ppa:webupd8team/sublime-text-3 添加sublime text3的软件源: 2 sudo apt-get ...

  10. jupyter notebook快捷键速查手册

    jupyter notebook快捷键速查手册 Enter : 转入编辑模式 Shift-Enter : 运行本单元,选中下个单元 Ctrl-Enter : 运行本单元 Alt-Enter : 运行本 ...