找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 64223|回复: 22

[原创] VBS自动备份文件到指定邮箱

[复制链接]
发表于 2009-10-18 23:13:24 | 显示全部楼层 |阅读模式
1、程序编写背景:前一阵子,因为误操作,导致电脑中储存的重要资料毁灭性丢失,心痛至极。吸取这次惨痛教训,决定将重要资料再网络上做一个备份。于是写了一个小程序,实现自动压缩重要资料所在文件夹,然后上传到指定的163邮箱。

2、程序功能:能够将指定文件或文件夹压缩上传至指定邮箱。支持多文件(夹)拖放:可以将要备份到邮箱的文件(夹)直接拖放到本程序图标上。

3、使用要求:电脑存在WinRAR.exe(可以是绿色版);至少拥有一个163邮箱(用来发送邮件的邮箱最好是很早前申请的163邮箱,因为新申请的163邮箱可能不支持SMTP服务);将代码中红色字体部分修改为自己的相关信息。

4、程序源代码:
'/*/////////////////////邮箱配置//////////////////////
MailTo="YourEmail"  '接收邮箱
UserName="YourID"   '发送邮箱
PassWord="YourPass"   '发送邮箱密码
MailC  '邮件内容
PackArr=""  '默认压缩上传文件夹位置
'/*////////////////////////////////////////////////////
MailFrom=UserName & "@163.com"
FileCount=Wscript.Arguments.Count
IF FileCount>0 then
PackArr=""
For i=0 to FileCount-1
  PackArr=PackArr & Wscript.Arguments(i) & ";"
Next
PackArr=Left(PackArr,Len(PackArr)-1)
End IF
IF PackArr="" then Wscript.quit
Set oShell=CreateObject("Wscript.Shell")
Set FSO=CreateObject("Scripting.FileSystemObject")
Function GetProgPath(ProgramName)
RegList="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\"
RegPath=RegList & ProgramName & "\Path"
GetProgPath=oShell.RegRead(RegPath)
End Function
Sub PackUpOBJ(SourcePath,SourceOBJ,DestFileName)
IF FSO.FileExists(DestFileName) then FSO.deleteFile DestFileName,True
RarPath=chr(34) & GetProgPath("WinRAR.exe") & "\Rar" & chr(34)
CMDLine=RarPath & " a " & chr(34) & SourcePath & DestFileName & chr(34) & " " & SourceOBj
oShell.run CMDLine,VBhide
End Sub
Function Send_Mail(Subject,MailFrom,MailTo,MailContent,MailAttachment)
NameSpace = "http://schemas.microsoft.com/cdo/configuration/"
Set Email = CreateObject("CDO.Message")
Email.From = MailFrom
Email.To = MailTo
Email.Subject = Subject
Email.Textbody = MailContent
Email.AddAttachment MailAttachment
With Email.Configuration.Fields
.Item(NameSpace&"sendusing") = 2
.Item(NameSpace&"smtpserver") = "smtp.163.com"
.Item(NameSpace&"smtpserverport") = 25
.Item(NameSpace&"smtpauthenticate") = 1  
.Item(NameSpace&"sendusername") = UserName
.Item(NameSpace&"sendpassword") = PassWord
.Update
End With
Email.Send
Send_Mail=True
if err then Err.Clear:Send_Mail=False
Set Email=nothing
End Function
SourceFolder=split(PackArr,";")
For i=0 to UBound(SourceFolder)
IF FSO.FileExists(SourceFolder(i)) then
  Set objFile=FSO.GetFile(SourceFolder(i))
  FileEX=FSO.GetExtensionName(SourceFolder(i))
  FileNameLen=Len(objFile.name)-Len(FileEX)-1
  DestFileName=Left(objFile.name,FileNameLen) & "(" & date & ").rar"
  FolderPath=objFile.ParentFolder & "\"
ElseIF FSO.FolderExists(SourceFolder(i)) then
  Set objFolder=FSO.getfolder(SourceFolder(i))
  DestFileName=objFolder.Name & "(" & date & ").rar"
  FolderPath=objFolder.ParentFolder & "\"
Else
  DestFileName=""
End IF
IF DestFileName<>"" then
  Call PackUpOBJ(FolderPath,SourceFolder(i),DestFileName)
  
  For j=1 to 51
   n=n+1
   IF n>=50 then wscript.quit
   IF FSO.FileExists(FolderPath & DestFileName) then
    wscript.sleep 500
    exit for
   End IF
   wscript.sleep 500
  Next
  IF Send_Mail(DestFileName,MailFrom,MailTo,MailContent,FolderPath &
DestFileName)=True then
   FSO.deleteFile FolderPath & DestFileName
     msgbox DestFileName & "发送成功!",vbinformation+vbokonly,"BackUp To
EMail"
  Else
   msgbox DestFileName &"发送失败!",vbinformation+vbokonly,"BackUp To
EMail"
  End IF
End IF
Next

Set oShell=nothing
Set FSO=nothing


论坛程序会吃掉小部分代码,因此上传了附件。程序运行前,请按照前面的说明,修改程序内容。

评分

参与人数 1技术 +1 收起 理由
lishiqq512 + 1 乐于助人

查看全部评分

发表于 2009-10-19 09:45:00 | 显示全部楼层
红色字体怎么不见?
是否是:
YourEmail
YourID
YourPass
PackArr=""  (引号里要写路径吗?)
不懂VBS,请赐教!!!
发表于 2009-10-19 10:08:50 | 显示全部楼层
能用bat写一次吗 ?
 楼主| 发表于 2009-10-19 10:49:33 | 显示全部楼层

回复 2楼 的帖子

理解正确!
发表于 2009-10-19 11:51:12 | 显示全部楼层
拖动文件
 楼主| 发表于 2009-10-19 12:13:04 | 显示全部楼层

回复 5楼 的帖子

论坛程序“吃”掉了部分代码...

已经上传附件。下载好附件解压后,运行前,请先修改程序代码。
发表于 2009-10-19 18:08:52 | 显示全部楼层
  1. MailTo="zjw767676@163.com"                '接收邮箱
  2. UserName="zjw767676"                        '发送邮箱
  3. PassWord="*******"                        '发送邮箱密码
  4. MailContent="资料备份!"                        '邮件内容

  5. PackArr="d:\a"                '默认压缩上传文件夹位置
复制代码
运行后能把文件夹压缩,但不能发送
 楼主| 发表于 2009-10-19 22:39:12 | 显示全部楼层

回复 7楼 的帖子

你的这个邮箱应该“资历”较浅,就是新申请的,163新申请的邮箱不支持SMTP的

发送邮箱一定要一个能够支持SMTP的,而且程序代码只支持163邮箱,如果确有需要,可以修改相应代码或联系本人修改。
发表于 2009-10-19 23:27:21 | 显示全部楼层

回复 8楼 的帖子

我的邮箱是2008年5月申请的,不知道算新还是算旧?
如能出个P版的也能学习学习,期待中。。。。。
发表于 2010-4-12 17:17:55 | 显示全部楼层
我点了却没有反映。。。
 楼主| 发表于 2010-12-11 23:45:28 | 显示全部楼层

回复 13楼 的帖子

出现这个问题的原因是,当程序发送附件的时候,压缩还没完成
你可以把里面延时部分的值改的大一些
发表于 2011-1-9 18:50:26 | 显示全部楼层
楼主,请问如何把一个文件夹里的文件用附件发出去? 不是压缩成一个文件。
因为文件个数不确定,一直想不到方法,请指教。

当然前提是每个文件的大小都符合附件的大小要求。
发表于 2011-5-20 22:23:03 | 显示全部楼层
好好学习一下!!!
发表于 2011-5-20 22:47:34 | 显示全部楼层
试试,成功了!
发表于 2012-2-19 19:02:21 | 显示全部楼层
真的很好~~!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:41 , Processed in 0.024820 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表