选拔Linux调用Sendmail模块格局发邮件,Linux下利用perl脚本和sendmail发送邮件

By admin in 美高梅手机版4858 on 2019年7月14日

在Linux利用formail+sendmail来发送带图片的邮件

例1

应用linux调用sendmail模块方式发邮件比程序写的调用mail函数的速度要快多倍,比方发送每封优惠邮件大致15秒左右,发送代码小编已写成三个shell文件,通过设置要实行文书的路子便可轻易发送邮件,前提必要配置sendmail模块

目前做的事物须求运用到在linux下定时自动运维脚本程序,何况把结果通过邮件的方式发送给收件人。
先是须求消除的标题是本子的定期自动运营,这些的话就是用linux的cron来陈设职分。

formail接收html格式的文本作为邮件的原委,那样就能够消除发送带图片邮件的标题了,因为html中能够插入图片,只要付给的img
src为可用的链接就行了。

require ‘net/smtp’

#!/bin/sh
mysql -u admin -D www.linuxidc.com -padmin </backup/tmp/script.sql
>/backup/tmp/result  
#实践sql语句读取客户email地址并将结果生成result文件里
mkdir /backup/tmp/emailpath
chmod 0777 /backup/tmp/emailpath
awk -F ‘[\t]选拔Linux调用Sendmail模块格局发邮件,Linux下利用perl脚本和sendmail发送邮件。’ ‘{print $1}’ result
>/backup/tmp/emailpath/emailAddress  
#将客户邮箱地址生成到内定的公文里,便于读取转为数组
awk -F ‘[\t]’ ‘{print $2}’ result
>/backup/tmp/emailpath/emailBakAddress
#将客户备份邮箱地址生成到钦定的文本里,便于读取转为数组
EMAILADDPATH=”/backup/tmp/emailpath/emailAddress”   #客户邮箱地址文件
EMAILADDBAKPATH=”/backup/tmp/emailpath/emailBakAddress” 
#客户备份邮件地址文件
EMAILBODY=”/backup/tmp/chritmas.html”   #邮件内容文件
SUBJECT=”Merry Christmas From www.linuxidc.com”   #安装邮件标题
FROM=”Milky Way Jewelry – www.linuxidc.com
<sales@www.linuxidc.com>”
echo “读取客户email”
j=0
while read line
do
let j++
emailAddressArr[$j]=$line
done < ${EMAILADDPATH}
#echo ${emailAddressArr[@]}
echo “读取客户备份email”
k=0
while read line
do
let k++
emailBakAddressArr[$k]=$line
#echo ${emailBakAddressArr[$k]}
done < ${EMAILADDBAKPATH}
#echo ${emailBakAddressArr[@]}
#计算共多少个客户
len=${#emailAddressArr[*]}
let total=len-1;
echo 共${total}位客户:
l=1
while [ $l -lt $len ]
do
let l++
toAdd=”-i To:${emailAddressArr[$l]}”
if [ [“${emailBakAddressArr[$l]}” != -n] ];then
if [ “${emailBakAddressArr[$l]}” != NULL ];then
ccAdd=”-i Cc:${emailBakAddressArr[$l]}”
fi
fi
let nextlmail=l-1
echo 正在发送第$nextlmail封邮件
cat ${EMAILBODY} |formail -i “From:${FROM}” -i
“Sender:sales@www.linuxidc.com” $ccAdd -i
“Reply-To:sales@www.linuxidc.com” $toAdd -i “MIME-Version:1.0” -i
“Content-type:text/html;charset=uft-8” -i
“Subject:${SUBJECT}”|/usr/sbin/sendmail -oi ${emailAddressArr[$l]}
echo 第$nextlmail封邮件发送成功!
done

然后的话就是发送邮件的顺序了,使用perl来编排发送邮件的主次。我动用的是linux自带的sendmail。这就率先简介一下sendmail吧。邮件传输代理(MTA)是三个在八个主机之间也许地点同一主机内传递邮件的主次,它担当邮件的寄放和转账,并调控传送邮件到指标地的门路。
UNIX/Linux 系统的行业内部 MTA 是 sendmail,其余的 MTA 还会有 qmail, exim
和微软的 Exchange。MTA
会监视用户代理的央求,依照电子邮件的目标地址搜索相应的邮件服务器,在服务器之间传输邮件并将收到到的邮件举行缓冲。

一声令下格式如下cat mailfile.html | formail -I “MIME-Version:1.0” -I
“Content-type:text/html;charset=gb2312” -I “Subject:layer4 config
monitor” | /usr/sbin/sendmail -oi ×××@×××.com
编码格局尽管用utf8,显示出的华语为乱码,所以提议用gb2312,那样就从未乱码啦!
发送脚本范本如下#!/bin/bash
#send a mail  to all
#TIME=`date ‘+%H:%M:%S’`
for MAIL in `cat /home/service/mailscript/people`
do
TIME=`date ‘+%H:%M:%S’`
cat /home/service/mailscript/active_account.vm|formail -I “From:
service” -I “To:$MAIL” -I “MIME-Version:1.0” -I
“Content-type:text/html;charset=gb2312” -I
“Subject:祝贺你”|/usr/sbin/sendmail -oi $MAIL
echo “$TIME–$MAIL sent ok!” >>
/home/service/mailscript/mailtest.log
sleep 10
done

require ‘iconv’

以上为shell程序

接下去要做的政工正是code了,使用perl的话,code照旧非常粗大略的:    

试行上面包车型大巴台本的时候注意要使用邮件系统的service系统用户来执行这几个本子。

def send_email(from, from_alias, to, to_alias, subject, content)

留神 客户邮箱文件与客户备份邮箱要求通过活动推行上面包车型客车三番五次生成文件.

open(MAIL, “| /usr/sbin/sendmail || die “Can’t open $CFG::SendMail
!\n”;
print MAIL qq|From: <sender\@sender.com>\n|;
print MAIL qq|To: rec\@rec.com.cn\n|;
print MAIL qq|Subject: Mail发送\n|;
print MAIL qq|<html><head><meta http-equiv=”Content-Type”
content=”text/html; charset=UTF-8″></head>\n|;
print MAIL qq{
            <body bgColor=”#FFFFFF”
style=”font-family:Verdana;line-height:180%;color:#333333;”>
           Hello, World!<br>
            </body>
            </html>
 };
close(MAIL);
那是一个运用html页面来显示音讯的mail发送程序。www.linuxidc.com
即使急需发送附件的话,程序如下:
open(MAIL, “| /usr/sbin/sendmail || die “Can’t open $CFG::SendMail
!\n”;
print MAIL qq|From: <sender\@sender.com>\n|;
print MAIL qq|To: rec\@rec.com.cn\n|;
美高梅手机版4858,print MAIL qq|Subject: Mail发送\n|;
print MAIL qq|<html><head><meta http-equiv=”Content-Type”
content=”text/html; charset=UTF-8″></head>\n|;
print MAIL qq{
            <body bgColor=”#FFFFFF”
style=”font-family:Verdana;line-height:180%;color:#333333;”>
           Hello, World!<br>
            </body>
            </html>
 };
 # 附件
my $file = “/tmp/Report.txt”;
open(FILE, “uuencode $file $file |”) or die;
print MAIL  <FILE>;
close(FILE);

参考:

subject_n = Iconv.conv(‘utf-8′,’gbk’,subject)

美高梅手机版4858 1

close(MAIL);

今天究竟解决了什么样在命令行的图景下发送带图片的邮件。其实思路异常的粗略的,只是从前没有在意到。怎么样落到实处呢?就是运用formail+sendmail啦!

msg = <<MESSAGE_END

美高梅手机版4858 2

formail接受html格式的文本作为邮件内容,那样就足以减轻发送带图片邮件的主题素材啊,因为html中得以插入图片,只要付诸的img
src为可用的链接就行了。嗯嗯经过测验能够达成既定功用。

From: #{from_alias} <#{from}>

cat mailfile.html | formail -I “MIME-Version:1.0” -I
“Content-type:text/html;charset=gb2312” -I “Subject:layer4 config
monitor” | /usr/sbin/sendmail -oi ×××@×××.com

To: #{to_alias} <#{to}>

不行你用地点的命令来试试,感到好用。然则还会有某个就是编码难点,笔者用的foxmail,若是用utf8,突显出的中文为乱码,所以建议用gb2312,那样就从没有过乱码啦!

MIME-Version: 1.0

美高梅手机版4858 3

Content-type: text/html;charset=utf-8

Subject: #{subject_n}

#{content}

MESSAGE_END

Net::SMTP.start(‘smtp.qq.com’, 25, ‘qq.com’, #{qq_num}, #{passwd},
:login) do |smtp| #那边配置发送服

务器及账户

smtp.send_message msg, from, to

end

end

例2

Ruby自带有 NET::SMTP
来发送邮件,不过它不协助直接发送附件。可能通过
MailFactory 这些gem 来兑现。

安装MailFactory

gem install mailfactory
使用MailFactory示例

mail=MailFactory.new

mail.to=[‘a@rubyer.me’,’b@rubyer.me].join(‘,’)
#多个收件人

mail.from=’from@rubyer.me’

mail.subject=’This is the subject’

mail.html='</font color=”red”>Here is the html
conternt</font>’

mail.text=’please use html view’

mail.attach(‘/usr/local/test.file’)

Net::SMTP.start(@smtp_host) do |smtp|

smtp.send_message(mail.to_s(),from,to)

end

假诺发掘有中文乱码

新建多少个sendFile.rb文件,达成在Shell下发送邮件。

#!/usr/bin/env ruby

require ‘net/smtp’

require ‘rubygems’

require ‘mailfactory’

def sendmail(to, subject, text, file)

mail = MailFactory.new

mail.from=”localhost”

mail.subject=subject

mail.text=text

mail.attach(file);

mail.to = to

Net::SMTP.start(“localhost”) do |smtp|

smtp.send_mail(mail.to_s(), “localhost”, to)

end

end

 

if (ARGV.length < 4)

puts “You should use like this: sendFile.rb ‘to_addr’ ‘subject’ ‘text’
‘filepath'”

else

if File.file?ARGV[3]

sendmail(ARGV[0], ARGV[1], ARGV[2], ARGV[3])

puts “sendmail to #{ARGV[0]}, #{ARGV[1]}, #{ARGV[2]},
#{ARGV[3]}”;

else

puts “file not exist:” + ARGV[3]

end

end

在Linux遭受下,还要对文本加多可实行权限

chmod +x sendFile.rb
发送邮件时试行

sendFile.rb “to@rubyer.me” “title of the mail” “hello world”
“/home/oldsong/test.file”

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有