当前位置:首页 » 编程软件 » linux发邮件脚本

linux发邮件脚本

发布时间: 2023-05-25 13:19:30

linux服务器上写个脚本,每隔xx分钟ping指定ip,如果不通,向指定邮箱发送邮件。

别发邮件了 直接发短信多好。。。
我以前练习的时候写的,挺烂的但是能用

#!/bin/bash
#ping 2分钟结果存入文件
#var 1.0
#LX 2009年4月6日

#help function
help()
{
cat << HELP

============= ping120s.sh help =============
ping目标地址,存入文件。 配合crontab用

USAGE:
-h 显示帮助
-to IP ping的IP地址
-sh 检查历史是否有丢包
-show 检查详细历史
-gz 压缩以前的记录,并删除txt文件
-of dir 指定输出文件的位置(要求绝对目录),也可以指定文件名(不建议)

HELP
}

#简略输出结果的函数
shmin()
{
for fName in PING__*.txt
do
var=$(sed -n '/.*packets.*/p' $fName | sed 's/.*received,//g' | sed 's/, time.*//g')
var="$(sed -n '/2009_.*/p' $fName) ==>$var"
echo "$var"
var=""
done
}

toGz()
{
gzName=ALL_$(date +%Y年%m月%d日%k时).tar.gz
gzName=`echo "$gzName" | sed 's/ /0/g'`
tar cvfz "$gzName" *.txt
[ ! -d old ] && mkdir old
[ ! -d tmp ] && mkdir tmp
mv $gzName old/ && mv *.txt tmp/
}
############## main ###############
[ -z $1 ] && { echo "参数错误"; help; exit 1; }
#fileName=ping__$1__$(date +%m月%d日%k:%M)
#删除文件名中的空格, 不删除的话0点到10点之前都没法记录 日亚终于找到毛病了
#fileName=`echo "$fileName" | sed 's/ /0/g'`
#echo $fileName
TIMEOUT=30

while [ -n "$1" ]; do
case "x$1" in
x-h) help; exit 0;;
x-to)
shift
[ -z "$1" ] && { echo "参数错误"; help; exit 1; }
pingTo="$1"
shift
;;
x-sh) shmin; exit 0;;
x-show) clear; tail -n 3 PING__*.txt; exit 0;;
x-gz) toGz; exit 0;;
x-of)
shift
[ -z "$1" ] && { echo "参数错误"; help; exit 1; }
ofilename="$1"
shift
;;
*) echo "error"; help; exit 1 ;;
esac
done

#-to是必须参数,ping到那里
[ -z "$pingTo" ] && { echo "-to 参数必选之参数"; help; exit 1; }

#判断存数文件的中间名
if [ -z "$ofilename" ] || [ -d "$ofilename" ]; then
mfileName=$pingTo
else
mfileName=${ofilename##/*/}
fi
#生成存储文件的名称,如没有sed那句过了夜里12点0点开头到9点都无法存储,应为有个空格 日!
fileName=PING__"$mfileName"__$(date +%m月%d日%k:%M)
fileName=`echo "$fileName" | sed 's/ /0/g'`

#存储的目录判断,默认是$PWD,主要是判断绝对目录开头的/和结束的/
dirName="$PWD/"
if [ "x${ofilename%${ofilename#?}}" = "x/" ]; then
if [ -d "$ofilename" ]; then
dirName="$ofilename"
[ "x${ofilename#${ofilename%?}}" = "x/" ] || dirName="$dirName/"
elif [ -d "${ofilename%/*}" ]; then
dirName="${ofilename%/*}/"
fi
fi

#echo $fileName
#echo $dirName
echo "$(date +%Y_%m_%d__%H:%M)" > "$dirName$fileName.txt"
ping "$pingTo" -n -w "$TIMEOUT" >> "$dirName$fileName.txt"
wait
bash sms.sh "$pingTo" 2>>sms.log
exit 0

下面是发短信脚本 sms.sh
lx@lx-Linux:~/bash/lx/ping$ cat sms.sh
#!/bin/bash

data=$(sh ping120s_V1.sh -sh| awk -F"[% ]" '{print $3}'|tac)
data=$(echo $data | awk '{print $1,$2}')
shijian=$(date +%Y年%m月%d日%k时%M分|sed 's/ *//g')
if [ -z $1 ]
then
address=""
else
address="$1"
fi

#echo $data
#echo $shijian
#data="40 $data"
for i in $(echo $data)
do
# echo "-->$i"
if [ $i -ge 40 ]
then
# echo "$i>=40"
sms -f 手机号码 -p 飞信密码 -t 发送给那个手机 -m "To:$address $i% loss -- $shijian" >>sms.log
wait
echo "To:$address $i% loss -- $shijian" >>sms.log
# bash ping120s_V1.sh -gz
exit 9
else
# echo "$i<40"
:
fi
done

exit 0

② 求一个linux脚本:看磁盘使用情况,超过85%的自动报警发入到指定邮箱,并做成计划任务

#!/bin/sh
ip=192.168.1.1; #你的真实IP地址
time=`date +%F-%H:%M`;
mail_address="你的邮件地址";
tmpfile=/tmp/check-disk.txt
a=`df -h | grep 'sda1'|awk '{print int($5)}'`; #指定过滤的硬盘分区
touch /tmp/check-disk.txt
echo "From :$ip" > $tmpfile #这里用“>”的意思是覆盖,保证每次发邮件的内容都是新的。
echo "DateTime:$time" >> $tmpfile
echo "Info :yourname" >> $tmpfile
echo "disk_status_use=$a%" >> $tmpfile
if [[ "$a" > 85 ]]; then #指定分区的磁盘使用空间大于85%就报警
/bin/mail -s "warning ! $HOSTNAME disk is full !" $mail_address < $tmpfile
else
/bin/mail -s "$HOSTNAME disk is ok !" $mail_address < $tmpfile
fi

③ linux中群发不同邮件到不同的邮箱脚本怎么写

一、修改/etc/mail.rc //在最后面追加就行,也可以 echo >>
set [email protected] //你自己的真实邮箱地址
set smtp=smtp.exmail.qq.com //在邮箱设置,客户端设置,设置方法,发送服务器里
set [email protected] //自己邮箱真实地址
set smtp-auth-password=123456 //自己邮箱密码
set smtp-auth=login
:wq
二、到这里已经实现实现外部邮箱发送mail了,可以命令行输入
echo "Test Mail" | mail -s "Test" [email protected]
########################################################################
也可以写脚本:
#!/bin/bash
user="
目标1 [email protected]
目标2 [email protected]
……
"
userlist=`echo -e "${user}" | awk ‘{print $2}‘`
echo $userlist
mail -v -s "测试邮件" $userlist < test.txt
:wq
其中:
-v 显示详细信息
-s 邮件标题
test.txt 是你要输入邮件的内容
然后crontab -e 编辑计划任务,就可以实现定时发送邮件啦!

④ Linux下shell脚本PING命令只要延迟高于100ms就发送个邮件

#!/bin/bash
Timeout=0;
Timeout_limit=1;
Timeout_flag=0;
IP="8.8.8.8"

while [ 1 ]
do
# 取平均延迟的整数位
Timeout="`ping $IP -c 3 | grep 'min/avg/max/mdev'|awk '{print $4}'|cut -b ƍ'`"
if [ $Timeout -ge $Timeout_limit ] &amp;&amp; [ $Timeout_flag -ne 1 ]; then
echo ping timeout, average delay=$Timeout ms
mail -s 'Ping Delay' 邮箱 &lt; ar/log/boot.log
Timeout_flag=1
fi
if [ $Timeout -lt $Timeout_limit ] &amp;&amp; [ $Timeout_flag -ne 0 ]; then
echo ping recovery, average delay=$Timeout ms
mail -s 'Ping recovery' 邮箱 &lt; ar/log/boot.log
Timeout_flag=0
fi
sleep 5
done
第三行Timeout_limit值写错了,应该是100哈,代码提交了不能改了。你这个不需要把延迟结果保存在文件的,而是应该需要作定时检测的。

⑤ linux 发邮件python脚本怎么检查是否发送成功

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
#导入smtplib和MIMEText 
import smtplib,sys 
from email.mime.text import MIMEText 
 
def send_mail(sub,content): 
    ############# 
    #要发给谁,这里发给1个人 
    mailto_list=["[email protected]"] 
    ##################### 
    #设置服务器,用户名、口令以及邮箱的后缀 
    mail_host="mail.gyyx.cn" 
    mail_user="[email protected]
    mail_pass="123456677890" 
    mail_postfix="gyyx.cn" 
    ###################### 
    ''''' 
    to_list:发给谁 
    sub:主题 
    content:内容 
    send_mail("[email protected]","sub","content") 
    ''' 
    me=mail_user+"<"+mail_user+"@"+mail_postfix+">" 
    msg = MIMEText(content,_charset='gbk') 
    msg['Subject'] = sub 
    msg['From'] = me 
    msg['To'] = ";".join(mailto_list) 
    try: 
        s = smtplib.SMTP() 
        s.connect(mail_host) 
        s.login(mail_user,mail_pass) 
        s.sendmail(me, mailto_list, msg.as_string()) 
        s.close() 
        return True 
    except Exception, e: 
        print

⑥ 如何在Linux命令行中通过SMTP服务器发送电子邮件

假定你想配置一个 Linux 应用,用于从你的服务器或桌面客户端发送邮件信息。邮件信息可能是邮件简报、状态更新(如 Cachet)、监控警报(如 Monit)、磁盘时间(如 RAID mdadm)等等。当你要建立自己的 邮件发送服务器 传递信息时 ,你可以替代使用一个免费的公共 SMTP 服务器,从而避免遭受维护之苦。

谷歌的 Gmail 服务就是最可靠的 免费 SMTP 服务器 之一。想要从应用中发送邮件通知,你仅需在应用中添加 Gmail 的 SMTP 服务器地址和你的身份凭证即可。

使用 Gmail 的 SMTP
服务器会遇到一些限制,这些限制主要用于阻止那些经常滥用服务器来发送垃圾邮件和使用邮件营销的家伙。举个例子,你一次只能给至多 100
个地址发送信息,并且一天不能超过 500
个收件人。同样,如果你不想被标为垃圾邮件发送者,你就不能发送过多的不可投递的邮件。当你达到任何一个限制,你的 Gmail
账户将被暂时的锁定一天。简而言之,Gmail 的 SMTP 服务器对于你个人的使用是非常棒的,但不适合商业的批量邮件。

说了这么多,是时候向你们展示 如何在 Linux 环境下使用 Gmail 的 SMTP 服务器 了。

Google Gmail SMTP 服务器设置

如果你想要通过你的应用使用 Gmail 的 SMTP 服务器发送邮件,请牢记接下来的详细说明。

邮件发送服务器 (SMTP 服务器): smtp.gmail.com
使用认证: 是
使用安全连接: 是
用户名: 你的 Gmail 账户 ID (比如 "alice" ,如果你的邮箱为 [email protected]
密码: 你的 Gmail 密码
端口: 587

确切的配置根据应用会有所不同。在本教程的剩余部分,我将向你展示一些在 Linux 上使用 Gmail SMTP 服务器的应用示例。

从命令行发送邮件

作为第一个例子,让我们尝试最基本的邮件功能:使用 Gmail SMTP 服务器从命令行发送一封邮件。为此,我将使用一个称为 mutt 的命令行邮件客户端。

先安装 mutt:

对于 Debian-based 系统:
$ sudo apt-get install mutt

对于 Red Hat based 系统:
$ sudo yum install mutt

创建一个 mutt 配置文件(~/.muttrc),并和下面一样,在文件中指定 Gmail SMTP 服务器信息。将 替换成自己的 Gmail ID。注意该配置只是为了发送邮件而已(而非接收邮件)。
$ vi ~/.muttrc
set from = "@gmail.com"set realname = "Dan Nanni"set smtp_url = "smtp://@smtp.gmail.com:587/"set smtp_pass = ""

一切就绪,使用 mutt 发送一封邮件:
$ echo "This is an email body." | mutt -s "This is an email subject" [email protected]

想在一封邮件中添加附件,使用 "-a" 选项
$ echo "This is an email body." | mutt -s "This is an email subject" [email protected] -a ~/test_attachment.jpg

使用 Gmail SMTP 服务器意味着邮件将显示是从你 Gmail 账户发出的。换句话说,收件人将视你的 Gmail 地址为发件人地址。如果你想要使用自己的域名作为邮件发送方,你需要使用 Gmail SMTP 转发服务。

当服务器重启时发送邮件通知

如果你在 虚拟专用服务器(VPS)
上跑了些重要的网站,建议监控 VPS 的重启行为。作为一个更为实用的例子,让我们研究如何在你的 VPS
上为每一次重启事件建立邮件通知。这里假设你的 VPS 上使用的是 systemd,并向你展示如何为自动邮件通知创建一个自定义的 systemd
启动服务。

首先创建下面的脚本 reboot_notify.sh,用于负责邮件通知。
$ sudo vi /usr/local/bin/reboot_notify.sh

#!/bin/sh

echo "`hostname` was rebooted on `date`" | mutt -F /etc/muttrc -s "Notification on `hostname`" [email protected]
$ sudo chmod +x /usr/local/bin/reboot_notify.sh

在这个脚本中,我使用 "-F" 选项,用于指定系统级的 mutt 配置文件位置。因此不要忘了创建 /etc/muttrc 文件,并如前面描述的那样填入 Gmail SMTP 信息。

现在让我们创建如下一个自定义的 systemd 服务。
$ sudo mkdir -p /usr/local/lib/systemd/system$ sudo vi /usr/local/lib/systemd/system/reboot-task.service

[Unit]
Description=Send a notification email when the server gets rebooted
DefaultDependencies=no
Before=reboot.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/reboot_notify.sh

[Install]
WantedBy=reboot.target

在创建服务后,添加并启动该服务。
$ sudo systemctl enable reboot-task$ sudo systemctl start reboot-task

从现在起,在每次 VPS 重启时,你将会收到一封通知邮件。

通过服务器使用监控发送邮件通知

作为最后一个例子,让我展示一个现实生活中的应用程序,Monit,这是一款极其有用的服务器监控应用程序。它带有全面的 VPS 监控能力(比如 CPU、内存、进程、文件系统)和邮件通知功能。

如果你想要接收 VPS 上由 Monit 产生的任何事件的邮件通知,你可以在 Monit 配置文件中添加以下 SMTP 信息。

set mailserver smtp.gmail.com port 587
username "" password ""
using tlsv12

set mail-format {
from: @gmail.com
subject: $SERVICE $EVENT at $DATE on $HOST
message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.

Yours sincerely,
Monit
}

# the person who will receive notification emails
set alert [email protected]

这是一个因为 CPU 负载超载而由 Monit 发送的邮件通知的例子。

热点内容
关闭androidstudio 发布:2025-02-14 03:53:42 浏览:18
安卓脚本一键打板 发布:2025-02-14 03:50:16 浏览:866
我的世界租赁服务器会被封ip吗 发布:2025-02-14 03:46:05 浏览:982
数据库附 发布:2025-02-14 03:44:43 浏览:837
安卓系统解不了锁怎么办 发布:2025-02-14 03:44:35 浏览:552
怎么查询信用卡密码 发布:2025-02-14 03:42:04 浏览:318
studio外贸服装直播脚本 发布:2025-02-14 03:34:16 浏览:453
python集合运算符 发布:2025-02-14 03:06:18 浏览:205
pic编译软件 发布:2025-02-14 03:01:04 浏览:984
反编译在编译 发布:2025-02-14 02:55:36 浏览:418