最近一直在想做一个小系统,实时获取白银价格,如果达到了自己预期的价格,就发到自己的邮箱,免得自己经常去查看白银价格。
首先在自己的ubuntu中启用邮件发送功能。
现在介绍方法:ubuntu下使用mutt和msmtp发送邮件的简单配置
运行:
sudo apt-get install mutt
sudo apt-get install msmtp
安装好了这两个包之后,就是进行相关配置文件的配置了:
首先配置 mutt,系统全局设置配置文件在 /etc/Muttrc,如果使用某个系统用户,可以在~/.muttc中设置,没有该文件,就自己创建。
vi .muttrc
set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="zhxia"
set from=zhenghon@ajk.com
set envelope_from=yes
接着,配置msmtp
创建 ~/.msmtprc 和 ~/.msmtp.log,分别为配置文件和日志文件
vi .msmtprc
account default
host smtp.corpease.net
from zhenghong@ajk.com
auth plain
user zhenghong@ajk.com
password xxxxxxx
logfile ~/.msmtp.log
由于password是明文,所以需要修改此文件的访问权限
chmod 600 .msmtprc
同时创建 日志文件 touch ~/.msmtp.log
做完了以上的配置之后,可以进行邮件的发送测试了:
查看SMTP服务器是否支持认证的TLS加密:
zhxia@zhxia-Desktop:~$ msmtp --host=smtp.corpease.net --serverinfo
SMTP server at smtp.corpease.net (mail3.corpease.net [61.145.121.45]), port 25:
corpease.net Anti-spam GT for Coremail System (corpease[20160922])
Capabilities:
PIPELINING:
Support for command grouping for faster transmission
AUTH:
Supported authentication methods:
PLAIN LOGIN
发送邮件测试:
echo "hello world" | mutt -s "title" 25252500@qq.com
一般情况下,均可已正常接收邮件。
下面是一个比较完整的发送邮件示例:
echo "hello" | mutt -s "title" 25252500@qq.com,zhenghong00@163.com -c 40027871@qq.com -a /tmp/ip.tmp
发送给多人,抄送,添加附件
address="zhenghong@ajk.com"
echo $content|mutt -s "${subject}" -e 'set content_type="text/html"' -e 'send-hook . "my_hdr X-Priority: 1"' $address
发送邮件时设置邮件的文本类型为:html格式,邮件的等级为:重要。
中间有一些不是很清楚的地方,主要是配置那些文件是容易出问题,让不熟悉ubuntu的人不是很清楚,可以按照以下方法来:
~/.muttrc 中~是ubuntu 的配置目录, .muttrc 是配置文件名
具体配置步骤如下:
cd ~
vim .muttrc
.msmtprc .msmtp.log 都可以像这样来进行配置
send.sh
#!/bin/bash
i=1
while(($i<100))
do
rm index.html
wget -b http://zhibaiyin.zhongguobaiyin.com/ >> mylog
sleep 5
#cat index.html
a=$(cat index.html)
#echo "$a"
b=$(grep JO_42761q59 index.html)
c=$(grep JO_42761q73 index.html)
echo $b
echo $c
k=${c#*>}
k=${k%%<*}
tmp_time=${b#*>}
tmp_time=${tmp_time%%<*}
tmp_time=$(date +%Y-%m-%d-%H:%M:%S)
echo $tmp_time
#k=2
t=3.7
#echo "1.7>1.6" | bc
tmp=$(echo "$k<$t" | bc)
#echo $num1
echo $tmp
t=1
if [ $tmp -eq $t ]
then
tt=" "
content=$tmp_time$tt$k
echo $content | mutt -s "silver price" 1100499969@qq.com
echo $tmp
echo $content
fi
echo $k
sleep 5m
done
从这个网址 http://zhibaiyin.zhongguobaiyin.com/ 得到白银价格
用一个死循环 ,5分钟获取一次网页,如果达到了自己想要的价格,就发邮件到指定的邮箱。
再写一个启动shell在后台运行并输出日志
#!/bin/bash
nohup ./send.sh >> mylog &
因为在获取网页时会产生比较多的日志文件,可以写个 shell 脚本来进行循环删除
#!/bin/bash
dr=$(pwd)
echo $dr
Str=$(ls wget-log.*)
for x in $Str; do
echo $x
rm $x
done
至此 这个小系统就差不多了,不得不感叹shell 脚本功能的强大。但是在这个网站 http://zhibaiyin.zhongguobaiyin.com/ 上纸白银的价格,静态网页的白银价格更新的比较慢,它们是在浏览器加载之后,再自动刷新白银价格。但是通过这种获取网页再解析网页内容来得到白银价格的方法,不是很好,数据没法做到真正的实时。