linux脚本发送邮件 shell发送邮件 [借鉴修改]  

2012-02-20 16:54:02|  分类: linux系统 |  标签:linux发送邮件  shell发送邮件  |举报|字号 订阅

2015-01-26新增:

最近装的有点多,朋友也来问,弄个脚本一键安装了:

下载安装下包,编辑install.sh,填写自己的邮箱信息,执行install.sh后即可使用(请确保你的邮箱已开通smtp服务)

下载地址:http://download.csdn.net/detail/c12333c/8399331

发送命令:

/usr/local/mutt/bin/mutt -s "邮件标题" [email protected] -c 1516070****@139.com

-s 邮件标题    紧接的是接收邮件地址  -c 抄送地址  "

-------------------------------------------------------------------------------------------------------

原理:
     使用 msmtp+mutt+shell来实现
     之前在Linux下使用mail命令来发送邮件,配置起来比较麻烦,需要配置sendmail的很多东西。而且还必须启动sendmail才能保证邮件发送成功。其实我们就只要能发送邮件就可以,服务器多开个东西就等于多一个***的门。而且sendmail漏斗是很多的。那么有没有类似于foxmail,outlook这样的邮件客户端软件,并且有命令行的形式,来发送邮件呢。mutt和msmtp提供了一个很好的解决方案。
开始:
这里因为很多路径我写死了,所以最好按照我的安装路径来安装。或者根据自己的环境修改路径。注意后面的注释。
因为这个我已经写成sh文件,只要执行install.sh就可以,但是这里不能传附件,我就拆开写吧,注意有2个隐藏文件。
我使用的是163的免费邮。如果你用别的,修改相应的smtp地址。后面的注释不用复制。
mkdir -p /usr/local/msmtp/etc
vi  /root/.msmtprc                           //注意文件名前面有个“点"
host smtp.163.com                        //smtp地址
tls off
auth plain
from [email protected]      //从哪个邮件发出来
user meiti_jiankong                       //用户名
password a#^*225*mgYjm21
          //邮箱密码

vi  /root/.muttrc
set sendmail="/usr/local/msmtp/bin/msmtp"          //msmtp的安装位置。根据自己的情况改
set use_from=yes
set [email protected]                      
//用户名
set envelope_from=yes
 
vi /usr/local/msmtp/etc/msmtprc
defaults 
account meiti_jiankong                                       //用户名
host smtp.163.com                                             // smtp -IP
from [email protected]                           //用户名               
auth login
port 25
tls off
user [email protected]                         
  //用户名          
password  a#^*225*mgYjm21                              //密码
account default : meiti_jiankong
logfile /usr/local/msmtp/log/msmtp.log                
//用户名      
以上3个文件就这样保存,请确保用户名、密码、stmp的正确性。再来:
mkdir -p /usr/local/msmtp/log
echo 'set sendmail="/usr/local/msmtp/bin/msmtp"' >>/etc/Muttrc
echo "set use_from=yes" >>/etc/Muttrc
echo 'set realname="[email protected]"' >>/etc/Muttrc       //这里改成自己的邮箱
echo 'set editor="vim"' >>/etc/Muttrc
安装软件包msmtp
tar jxvf msmtp-1.4.21.tar.bz2
cd msmtp-1.4.21
./configure --prefix=/usr/local/msmtp
make
sleep 3 
make install
sleep 3
cd ..
tar zxvf mutt-1.5.21.tar.gz 
cd mutt-1.5.21
./configure --prefix=/usr/local/mutt
make
sleep 3
make install
sleep 3
cd ..
ln -s /usr/local/msmtp/bin/msmtp /usr/bin
这样就完成了
发送命令:
/usr/local/mutt/bin/mutt -s "邮件标题" [email protected] -c 1516070****@139.com
-s 邮件标题    紧接的是接收邮件地址  -c 抄送地址  "如果发送不成功,请检测下配置文件。

---------------------------------------------------------------------------------
在编译mutt中,如果提示:

checking whether this iconv is good enough... no
configure: error: Try using libiconv instead
解决方法:
找到你的libiconv.so.2 一般都在/usr/的某个目录下
[root@sh49194 mutt-1.5.21]# find /usr/ -name  "libiconv.so*"
/usr/local/lib/libiconv.so.2.5.1
/usr/local/lib/libiconv.so.2
/usr/local/lib/libiconv.so
然后
echo "/usr/local/lib/" >>/etc/ld.so.conf
执行
ldconfig
再次编译看看
还不行的话,直接做软链:
ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2
更新日期:2013.6.17
----------------------------------------------------------------------------------
mutt 发送失败,特别是写在计划任务crontab里面的时候发送不出去,但是手工执行可以发送,调试的时候提示:

这个问题是因为计划任务在执行的时候,$HOME值为 / 
这个值在/etc/crontab被默认定义

我们命令行当前的$HOME 值为/root/ 导致。
解决方法,在脚本的前面加一行:
HOME='/root/'

更新日期:2013.9.11

----------------------------------------------------------------------------------

博客地址
http://blog.163.com/a12333a_li/