用VBS脚本发邮件
需求是这样的:针对账号的管理,如果发现该账号的管理员给账号加了批注,(比如要过期,修改密码,完善资料等),就需要找到这样的账号及其管理的邮件,然后发邮件给他们的管理员同时抄送给账号以达到提醒的目的。那么我们的实际项目中是这样管理的:
有三个表,第一张表用来存放账号的所有信息,以及这个账号的备注,第二张表存放了账号信息以及他的管理员的名字等信息,第三张表就存放管理的信息以及管理员的邮件地址。都是excel表
思路是这样:首先在表一里找到所有备注栏不为空的账号,然后把这些账号拿到第二张表里去搜索,如果找到了就继续找出它对应的管理的名字,最后吧得到的管理员的名字拿到第三张表去搜索找到它的邮件地址,同时也需要把账号和管理员邮件记录下来。
最后使用系统用户发邮件给所有的管理员,正文里就列出这些要做修改的账号的基本信息。
其实这里就有2部分,第一部分主要是excel的处理,这一块应该不复杂,我会直接贴出代码,这里主要说明第二部分,就是邮件的发送。
CDO.Message
想通过vbs脚本来发邮件,就需要用到CDO.Message这个对象,然后配置它的属性,比如邮件服务器,端口,认证方式,账号密码等,同时也可以对邮件本身的属性做设置,比如邮件紧急度,乱码等。下面是代码:
function sendEmail(strEmail_From, strEmail_To, strCC_List, strEmail_Subject, strEmail_Body)
Set cdoMail = CreateObject("CDO.Message") '创建CDO对象
Set cdoConf = CreateObject("CDO.Configuration") '创建CDO配置文件对象
cdoMail.From = strEmail_From
cdoMail.To = strEmail_To
cdoMail.CC = strCC_List
cdoMail.Subject = strEmail_Subject
'邮件正文
cdoMail.HTMLbody = strEmail_Body & "</table></body></html>"
cdoConf.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = '使用网络上的SMTP服务器而不是本地的SMTP服务器
'cdoConf.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "9.56.224.215"
cdoConf.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.126.com" 'SMTP服务器地址, 可以换成其他你要用的邮箱服务器或者ip
cdoConf.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = '邮件服务器端口
cdoConf.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = '服务器认证方式
cdoConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxx@126.com" '发件人账号
cdoConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "" '发件人登陆邮箱密码
cdoConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = '连接服务器的超时时间
cdoConf.Fields.Update
Set cdoMail.Configuration = cdoConf
'设置邮件的重要度和优先级
cdoMail.Fields.Item("urn:schemas:mailheader:X-MSMail-Priority") = "High"
cdoMail.Fields.Item("urn:schemas:mailheader:X-Priority") =
cdoMail.Fields.Item("urn:schemas:httpmail:importance") =
cdoMail.Fields.Update
'发送邮件
dim sleepSeconds
sleepSeconds =
cdoMail.Send
WScript.Sleep( * sleepSeconds)
Set cdoMail = nothing
Set cdoConf = nothing
End function
然后就可以调用它来发邮件了
sendEmail "xxx@126.com", "zzz@qq.com", "yyy@qq.com", "提示邮件", "take action"
下面是解析excel的代码:
Set oExcel= CreateObject("Excel.Application")
Set oWb1 = oExcel.Workbooks.Open("E:\Bluecare\AA team\115531\US-NiS3.20150909150006Copy.csv")
Set oSheetUSNi = oWb1.Sheets("US-NiS3.20150909150006Copy")
Set oWb2 = oExcel.Workbooks.Open("E:\Bluecare\AA team\115531\IBM Monthly Report.xlsx")
Set oSheetIMR = oWb2.Sheets("Sheet1")
Set oWb3 = oExcel.Workbooks.Open("E:\Bluecare\AA team\115531\Sponsor email.xls")
Set oSheetSPO = oWb3.Sheets("Sheet1")
dim Dit1:set Dit1 = CreateObject("Scripting.Dictionary")
dim Dit2:set Dit2 = CreateObject("Scripting.Dictionary")
'输出文件路径
dim directory1, directory2
directory1 = "C:\\temp\\sponsor_mail_found.txt"
directory2 = "C:\\temp\\sponsor_withoutMail.txt"
directory3 = "C:\\temp\\account_withoutSponsor.txt"
'for function getExpireAcc: 第一个参数是sheetname,第二个是账号的列号,第三个是备注列号,第四个是查询账号的规则(比如查询以a开头的账号)
'for function getData: 第一个是sheetname,第二个是需要查找的账号,第三个是账号列号,第三个是管理员列号,第五个是返回值
'下面就可以调用函数执行了,执行完成后可以去输出目录里看最终结果
outSpoMail getData(oSheetIMR, getExpireAcc(oSheetUSNi, "C","M","acl"),"A","K",Dit1), oSheetSPO
'Get impending deactivation account list from URT response file
'@param oSheet, sheet name
'@param colAccount, the 'account' column
'@param colAcctMgrAction, the 'account manager action' column
'@param strFilter, the string used to filter the accounts that impending deactivation, eg: "U8"
Function getExpireAcc(oSheet, colAccount, colAcctMgrAction, strFilter)
dim row, i, varacc, varama, temp
row=oSheet.usedRange.Rows.count
for i= to row
varacc=oSheet.cells(i,colAccount)
varama=CStr(oSheet.cells(i,colAcctMgrAction))
if (instr(varacc,strFilter)=) then
temp = temp + varacc +"&"+varama+","
end if
Next
dim j,spit, tmp
spit=split(temp,",")
for j= to ubound(spit)-
tmp = split(spit(j),"&")
if tmp() = Empty or tmp() = "" or IsNull(tmp()) then
getExpireAcc = getExpireAcc + tmp() + "_"
end if
next
end Function
'** Get sponsor name list from IBM Monthly Report spreadsheet
'@param oSheet, sheet name
'@param sourceAcct, the accounts that impending deactivation
'@param colAcctID, the account ID column 'Network ID'
'@param colSponsorName, the sponsor name column 'Sponsor'
'@param dicAcct_SponsorName, the dictionary to store the account ID and its sponsor name
Function getData(oSheet, sourceAcct, colAcctID, colSponsorName, dicAcct_SponsorName)
dim m,n,roww, expacc,res, out
expacc = split(sourceAcct,"_")
roww = oSheet.usedRange.Rows.count
for m= to roww
for n= to ubound(expacc)-
if trim((oSheet.cells(m,colAcctID))) = trim(expacc(n)) then
if oSheetIMR.cells(m,colSponsorName) = Empty or oSheetIMR.cells(m,colSponsorName) = "" or IsNull(oSheetIMR.cells(m,colSponsorName)) then
out = out + expacc(n)&vbcrlf
else
dicAcct_SponsorName.add expacc(n),oSheetIMR.cells(m,colSponsorName)
end if
end if
next
next
writeTxt directory3, out
set getData = dicAcct_SponsorName
end Function
'Get the sponsor mail address list from 'Sponsor_email' spreadsheet and write it out
Function outSpoMail(Dict,oSheet)
Dim DictKeys, DictItems, Counter, out1, row, k, out2, out3
row=oSheet.usedRange.Rows.count
DictKeys = Dict.Keys
DictItems = Dict.Items
For Counter = To Dict.Count -
for k= to row
if trim(DictItems(Counter))=trim(oSheet.cells(k,"A")) then
WScript.Echo _
"key: " & DictKeys(Counter) & _
" value: " & DictItems(Counter)
out1 = out1 + oSheet.cells(k,"B")&vbcrlf
Dit2.add DictKeys(Counter), oSheet.cells(k,"B")
end if
out2 = out2 + oSheet.cells(k,"A") + "_"
next
Next
set outSpoMail = Dit2
'writeTxt(out)
'write the sponsor mail to directory1
writeTxt directory1, out1
For Counter = To Dict.Count -
if instr(out2,trim(DictItems(Counter)))> then
'msgbox "exist:"+ DictItems(Counter)
else
'msgbox "not exist:"+ DictItems(Counter)
out3 = out3 + DictItems(Counter)&vbcrlf
end if
next
'write the sponsor name which not found in sponsor file to directory2
writeTxt directory2, out3
End Function
'输出文件
Function writeTxt(directory, content)
dim fso
set fso = CreateObject("Scripting.FileSystemObject")
set f = fso.OpenTextFile(directory, , true)
f.write(content)
f.close
set f = nothing
set fso = nothing
End Function
oWb1.Close
oWb2.Close
oWb3.Close
oExcel.Quit
set oExcel=nothing
set Dit1=nothing
set Dit2=nothing
WScript.Quit(0)
通过这2个vbs就可以到达需求的目的的,也可以将他们放在一个vbs里使用。
用VBS脚本发邮件的更多相关文章
- 【VBS】发邮件
Sub SendMail(pMailFrom, pMailTo, pSubject, pMailBody, pMailSmtpServer) On Error Resume Next Dim objS ...
- python smtp 发邮件 添加附件
# -*- coding:utf-8 -*- # __author__ = 'justing' import os import smtplib from email.mime.multipart i ...
- [转]简单三步,用 Python 发邮件
https://zhuanlan.zhihu.com/p/24180606 0. 前言 发送电子邮件是个很常见的开发需求.比如你写了个监控天气的脚本,发现第二天要下雨,或者网站上关注的某个商品降价了, ...
- SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享
SQL Server定时自动抓取耗时SQL并归档数据发邮件脚本分享 第一步建库和建表 USE [master] GO CREATE DATABASE [MonitorElapsedHighSQL] G ...
- 【Python系列】Python自动发邮件脚本-html邮件内容
缘起 这段时间给朋友搞了个群发邮件的脚本,为了防止进入垃圾邮件,做了很多工作,刚搞完,垃圾邮件进入率50%,觉得还不错,如果要将垃圾邮件的进入率再调低,估计就要花钱买主机了,想想也就算了,先发一个月, ...
- vbs脚本实现qq定时发消息(初级)
vbs脚本实现QQ消息定时发送 目标 批处理又称为批处理脚本,强大的强大功能可以高效得实现很多功能,例如批量更改文件格式,批量进行文件读写,今天我们的目标是用vbs脚本编写可以发送qq消息的脚本,并利 ...
- Windows下bat脚本自动发邮件
摘要:说明:很多木马会利用自身的程序截取系统敏感文件或信息发往指定的邮箱,而blat并不是木马,它小巧却有强大的发邮件功能,可不要用它做违法事,感觉和木马功能有一拼!下面先看个具体的实例(在blat同 ...
- #题目:有10 台被监控主机、一台监控机,在监控机上编写脚本,一旦某台被监控机器/ 分区适用率大于80%, 就发邮件报警放到crontab 里面, 每10 分钟检查一次
#题目:有10 台被监控主机.一台监控机,在监控机上编写脚本,一旦某台被监控机器/ 分区适用率大于80%, 就发邮件报警放到crontab 里面, 每10 分钟检查一次 #测试机器:虚拟机Linux ...
- 发邮件的python脚本
1. 编写一个最简单的发邮件的python脚本 #coding: utf-8 import smtplib from email.mime.text import MIMEText from em ...
随机推荐
- hdu 4497 GCD and LCM
思路:易知L不能整除G时为0: 将L/G质因数分解,对于其中的因子p,个数为cnt,则至少有一个包含p^cnt,至少有一个数不包含p: 只有一个数包含p^cnt时,有C(3,1); 有2个数包含p^c ...
- [转]ubuntu server:开机自动登录
原文链接: Ed29.com http://ed29.com/ubuntu%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%87%AA%E5%8A%A8%E7%99%BB%E5%BD%95 ...
- Hibernate中createCriteria即QBC查询的详细用法 .Hibernate中createCriteria即QBC查询的详细用法 .
现在假设有一个Student类,内有id,name,age属性String hql = "from Student s";按照以前的做法,我们通常是Query query = se ...
- MD5加密算法测试
在用户注册这一块,密码加密保证客户信息安全是最重要的,在网上查询了一些资料,发现加密算法比较流行的有MD5,DES和SHA. 虽然SHA与MD5通过碰撞法被破解了,但是MD5和SHA仍被公认是安全的加 ...
- 查看服务器的TCP/IP(http)连接情况
6.那具体到,怎样监听一个具体程序的TCP/IP连接情况呢???!! 就要用:netstat -n|grep 80 命令来查看具体端口对应程序的TCP/IP连接情况了 netstat -n|grep ...
- mysql建表时拆分出常用字段和不常用字段
一对一 一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然. 学生表:姓名,性别,年龄,身高,体重,籍贯,家庭住址,紧急联系人 其中姓名.性别.年龄.身高,体重属于常用数据,但是籍贯.住 ...
- opencv 图像阴影检测
参数说明: IplImage *workImg-当前全局变量,表示正在显示的图片. downleft, upright- 检测出的阴影部分矩形框的两个对角顶点. /****************** ...
- mysql 插入汉字 异常 Incorrect string value: '\xE8\xA7\x84\xE5\x88\x99' for column 'name'
今天使用mysql出现 Incorrect string value: '\xE8\xA7\x84\xE5\x88\x99' for column 'name' 异常 通过查找问题,发现是字段编码不支 ...
- NFC(4)响应NFC设备时启动activity的四重过滤机制
响应NFC设备时启动activity的四重过滤机制 在一个NFC设备读取NFC标签或另一个NFC设备中的数据之前会在0.1秒之内建立NFC连接,然后数据会自动从被读取一端流向读取数据的一端(NFC设备 ...
- C#获取一个文件的扩展名
C#获取一个文件的扩展名System.IO.Path.GetExtension( "文件名 ");ChangeExtension 更改路径字符串的扩展名. Combine ...