天天看点

Linux下使用mail命令发送邮件

Linux服务器mail程序本身就是调用sendmail来进行邮件发送的,sendmail服务器提供对外的邮件发送功能。CentOS默认不能发送邮件,需要发送邮件的童鞋可以安装一个sendmail程序

1

2

3

4

5

6

7

8

9

10

11

12

<code>[root@ProxyServer ~]</code><code># yum -y install sendmail</code>

<code>[root@ProxyServer ~]</code><code># /etc/init.d/sendmail start</code>

<code>Starting sendmail:                                         [  OK  ]</code>

<code>Starting sm-client:                                        [  OK  ]</code>

<code>[root@ProxyServer ~]</code><code># chkconfig sendmail on</code>

<code>[root@ProxyServer ~]</code><code># man mail</code>

<code>......</code>

<code>       </code><code>mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops] [-A account]</code>

<code>              </code><code>[-S variable[=value]] to-addr . . .</code>

<code>       </code><code>mailx [-BDdeEHiInNRv~] [-T name] [-A account] [-S variable[=value]] -f [name]</code>

<code>       </code><code>mailx [-BDdeEinNRv~] [-A account] [-S variable[=value]] [-u user]</code>

1、通过命令行发送邮件

<code>[root@ProxyServer ~]</code><code># mail -s "test" [email protected] </code>

<code>dfdafd</code>

<code>dfadf</code>

<code>fadf</code>

<code>EOT</code>

<code>[root@ProxyServer ~]</code><code>#</code>

第一行是输入的命令,-s表示邮件的主题,后面的[email protected]则是邮件的接收人,输入完这行命令后回车,会进入邮件正文的编写,可以输入任何文字,比如上面的三行。当邮件正文输入完成后,需要按CTRL+D结束输入,此时会提示你输入Cc地址,即邮件抄送地址,没有直接回车就完成了邮件的发送。

<a href="http://s1.51cto.com/wyfs02/M01/77/13/wKioL1Zi16XwUtfqAACiBqolEFA725.png" target="_blank"></a>

2、使用管道进行邮件发送

<code>[root@ProxyServer ~]</code><code># echo "hello,echo"|mail -s "echo" [email protected]</code>

使用管道直接敲入这行命令即可完成邮件的发送,其中echo后的是邮件正文。

3、使用文件进行邮件发送

<code>[root@ProxyServer ~]</code><code># mail -s "password" [email protected] &lt; /etc/passwd</code>

使用上面的命令后,我们就可以把/etc/passwd文件的内容作为邮件的内容发送给[email protected]

<a href="http://s3.51cto.com/wyfs02/M00/77/14/wKiom1Zi133RwroAAAIOD5bPGIE048.png" target="_blank"></a>

<code>[root@ProxyServer yum.repos.d]</code><code># yum -y install sharutils</code>

<code>[root@ProxyServer yum.repos.d]</code><code># uuencode CentOS6-Base-163.repo 163_yum_repo |mail -s "附件" [email protected] &lt; /etc/passwd</code>

<code>[root@ProxyServer yum.repos.d]</code><code>#</code>

CentOS6-Base-163.repo 文件作为邮件的附件发送出去了。uuencode有两个参数,第一个是要发送的文件CentOS6-Base-163.repo,第二个是显示的文件名称163_yum_repo。

4、使用外部smtp(qq的SMTP)来发送邮件

bin/mail会默认使用本地sendmail发送邮件,这样要求本地的机器必须安装和启动Sendmail服务,而通过修改配置文件/etc/mail.rc(/etc/nail.rc)可以使用外部SMTP服务器,可以达到不使用sendmail而用外部的smtp服务器发送邮件的目的。

<code>[root@ProxyServer ~]</code><code># vim /etc/mail.rc          #文末添加以下</code>

<code> </code><code>set</code> <code>[email protected] </code>

<code> </code><code>set</code> <code>smtp=smtp.51cto.com</code>

<code> </code><code>set</code> <code>[email protected] </code>

<code> </code><code>set</code> <code>smtp-auth-password=51cto </code>

<code> </code><code>set</code> <code>smtp-auth=login</code>

<code>[root@ProxyServer ~]</code><code># source /etc/mail.rc</code>

<code>[root@ProxyServer ~]</code><code># mail -s "51cto" 15001*****@139.com &lt; /etc/passwd</code>

from:发送的邮件地址(真实地址,我测试时候直接写justin发送邮件失败),对方显示的发件人

smtp:发生的外部smtp服务器的地址

smtp-auth-user:外部smtp服务器认证的用户名

smtp-auth-password:外部smtp服务器认证的用户密码

smtp-auth:邮件认证的方式

<a href="http://s3.51cto.com/wyfs02/M02/76/1B/wKioL1ZKqgzBo0p-AAA0OtsRubo776.png" target="_blank"></a>

如果提示mail: command not found

<code>-</code><code>bash</code><code>: mail: </code><code>command</code> <code>not found</code>

那么就是没有安装mail命令,此时需要安装mail命令

<code>[root@ProxyServer ~]</code><code># yum install mailx -y</code>

<code>[root@ProxyServer ~]</code><code># rpm -qa|grep mail</code>

<code>libreport-plugin-mailx-2.0.9-19.el6.x86_64</code>

<code>mailx-12.4-7.el6.x86_64</code>

<code>procmail-3.22-25.1.el6.x86_64</code>

<code>mailcap-2.1.31-2.el6.noarch</code>

<code>sendmail-8.14.4-8.el6.x86_64</code>

5、mail日志在log下

<code>[root@CHINFO3 ~]</code><code># cd /var/log/</code>

<code>[root@CHINFO3 log]</code><code># cat mail</code>

<code>mail/      maillog    maillog.1  maillog.2  maillog.3  maillog.4  </code>

6、使用sendmail -bp 或者 mailq 可以查看到邮件发送队列,里边会列出有几个邮件等待发送

13

14

15

16

17

18

19

20

21

<code>[root@CHINFO3 mqueue]</code><code># mailq</code>

<code>        </code><code>/var/spool/mqueue</code> <code>(5 requests)</code>

<code>-----Q-ID----- --Size-- -----Q-Time----- ------------Sender</code><code>/Recipient-----------</code>

<code>tB36BqUi005128     1716 Thu Dec  3 14:11 &lt;infa@chinfo3&gt;</code>

<code>                 </code><code>(Deferred: mx.263.net.: No route to host)</code>

<code>                     </code><code>&lt;[email protected]&gt;</code>

<code>tB21TicN013397      415 Wed Dec  2 09:29 &lt;infa@chinfo3&gt;</code>

<code>[root@CHINFO3 mqueue]</code><code># sendmail -bp</code>

<code>tB36BqUi005128*    1716 Thu Dec  3 14:11 &lt;infa@chinfo3&gt;</code>

<code>[root@CHINFO3 mqueue]</code><code>#</code>

邮件队列的文件都保存在 /var/spool/mqueue/ 文件夹内,查看此文件夹时,可以看到邮件队列内的邮件:

<code>[root@CHINFO3 mqueue]</code><code># pwd</code>

<code>/var/spool/mqueue</code>

<code>[root@CHINFO3 mqueue]</code><code># ls</code>

<code>dftB111d4Q031164  dftB213omV012806  dftB36BqUi005128  qftB117J4b006323  qftB21TicN013397</code>

<code>dftB117J4b006323  dftB21TicN013397  qftB111d4Q031164  qftB213omV012806  qftB36BqUi005128</code>

如果需要删除队列,直接清空该文件夹即可:

<code>[root@CHINFO3 mqueue]</code><code># rm -f *</code>

<code>/var/spool/mqueue</code> <code>is empty</code>

<code>        </code><code>Total requests: 0</code>

或者直接使用sendEmail来发送邮件,

<code>[root@Zabbix_Server ~]</code><code># wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz</code>

<code>[root@Zabbix_Server ~]</code><code>#  tar zxvf sendEmail-v1.56.tar.gz </code>

<code>[root@Zabbix_Server ~]</code><code># cp -a sendEmail-v1.56/sendEmail /usr/local/bin/</code>

<code>[root@Zabbix_Server ~]</code><code># ll /usr/local/bin/sendEmail </code>

<code>-rwxr-xr-x 1 root root 80213 Sep 30  2009 </code><code>/usr/local/bin/sendEmail</code>

<code>[root@Zabbix_Server ~]</code><code>#  sendEmail -h</code>

-f 表示发送者的邮箱

-t 表示接收者的邮箱

-cc 表示抄送发给谁

-bcc 表示暗抄送给谁

-o message-content-type=html   邮件内容的格式,html表示它是html格式

-o message-charset=utf8        邮件内容编码

-s 表示SMTP服务器的域名或者ip

-u 表示邮件的主题

-xu 表示SMTP验证的用户名

-xp 表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用d!5neyland就不能被正确识别)

-m 邮件的内容

-a 要发送的附件

<code>[root@Zabbix_Server sendEmail-v1.56]</code><code># /usr/local/bin/sendEmail -s smtp.51cto.com -xu [email protected] -xp 51cto2016 -f [email protected] -t [email protected] -u test -m 123456 -o message-content-type=text -o message-charset=gb2312 </code>

<code>Sep 20 10:20:19 zabbix_server sendEmail[6090]: Email was sent successfully!</code>

<code>[root@Zabbix_Server sendEmail-v1.56]</code><code>#</code>

发送成功之后会有如下提示:

Jul 29 15:02:53 e10074 sendEmail[26347]: Email was sent successfully!

本文转自 justin_peng 51CTO博客,原文链接:http://blog.51cto.com/ityunwei2017/1713425,如需转载请自行联系原作者

继续阅读