邮件群发 linux

#!/bin/sh

date=`date +%Y-%m-%d` #获取当天的日期
lastweek=`date +%Y-%m-%d -d "6 days ago"` #获取6天前的日期

sender="my@domain.com" #发信人email
r1="test1@domain.com" #收信人email
r2="test2@domain.com" #收信人email
reciver="$r1;$r2"
subject="主题($date)"
email_content_txt="out.txt" #存放邮件内容的文件
smtp='mail.domain.com' #邮件服务器地址

mesge() {
cat << EOF
From: <$sender>
To: <$reciver>
Subject: $subject
Date: `date` +0800
Mime-Version: 1.0
Content-Type: text/plain; charset="gbk"; format=flowed
#Content-Type: text/plain; charset="gb2312"; format=flowed
X-Mailer: Solaris Mail Client
X-MimeOLE: Powered by Solaris
EOF
test -r $email_content_txt && cat $email_content_txt
}
#
send_mail()
{
(
   sleep 5
   for comm in "helo domain.com" "mail from:<$sender>" "rcpt to:<$1>" "data"
   do
      echo "$comm"
      sleep 3
   done
   mesge
   sleep 3
   echo "."
) | telnet $smtp 25
}

./statlogin $lastweek $date ipTrace.log $email_content_txt

echo "" >> $email_content_txt
echo "////////////////////" >> $email_content_txt
echo "如有疑问,请与***联系,谢谢!" >> $email_content_txt

#Invoke: funDeliver $r1
funDeliver()
{
nRetry=10 #发信失败时,重试的次数
nTime=0
nLine=0
while [ $nLine -lt 8 ] #成功发送返回的消息应该是8行
do
   if [ $nTime -gt 0 ]; then
    echo "Failed to deliver, retry: $nTime"
   fi
   nTime=`expr $nTime + 1`
   if [ $nTime -gt $nRetry ]; then
    echo "Error!!! Failed: deliver to $1"
    #exit 1
    return
   else
    send_mail $1 > info.tmp #将执行结果写入临时文件
    nLine=`cat info.tmp | wc -l`
   fi
done
if [ $nLine -eq 8 ]; then
   echo "Succeed: deliver to $1"
fi
}
logfile="email.log" # 定义日志文件,通过查看日志文件,看是否成功发送。
echo `date` >> $logfile
funDeliver $r3 >> $logfile
rm -f info.tmp
echo "" >> $logfile


########################################
将下面的语句加入crontab,每周日的23点自动执行,ok,大功告成,哈哈!

0 23 * * 0 (cd /home/zhj/automail/; sh automail.sh >> /dev/null 2 >> error_crontab.log)

原文地址:https://www.cnblogs.com/aggavara/p/2854723.html