注册 登录
编程论坛 Excel/VBA论坛

求助代码:如何利用excel自动发送邮件

mingming58 发布于 2021-06-28 16:01, 2976 次点击
有没有大神知道怎么写代码,可以设计一个宏,然后把所有文件存在一个文件夹里,再创建一个宏,只要一点,文件夹里的文件就可以各自通过文件名发送到对应的邮箱地址去。比如文件夹里有abc三个文件,如何设计代码,只要一点这个宏,文件夹名字为a的文件就可以发送到A邮箱,b邮件就可以发送到B邮箱,c邮件就可以发送到C邮箱?
1 回复
#2
厨师王德榜2021-06-29 16:19
有两种方式,方式一,'调用OutLook生成并发送新邮件(假定你电脑上的'OutLook已经配置好)
方式二,'使用CDO发送邮件 (不依赖于OutLook)
再结合你的情况,无非是用FSO先取得某文件夹下所有文件名,遍历对象,再调用子程序发送邮件,
参考代码(个别地方需要你自己改一下):
程序代码:
Sub MakeNewEmailByVBA1()
'调用OutLook生成并发送新邮件,邮件正文为html格式,附件有要求.
'
假定OutLook中的帐户已经配置好,可以正常发送邮件.
'
2021-4-25调试通过.
Dim oOutLookObject As Object  'New Outlook.Application
Dim oEmailItem As Object
Set oOutLookObject = CreateObject("Outlook.Application")
Set oEmailItem = oOutLookObject.CreateItem(0)   '枚举值如下: ' 0=olMailItem ,
'
1=appointmentItem 2=ContactItem,3=TaskItem,4=JournalItem,5=NoteItem,6=PostItem,7=DistListItem

Dim nr As String
Dim fso  As Object
Dim txtfile  As Object
Set fso = CreateObject("scripting.filesystemobject")
Set txtfile = fso.OpenTextFile("c:\cHtml.htm")
'nr = txtfile.ReadLine '读取一行
'
nr = txtfile.ReadAll
   
     With oEmailItem
      .Recipients.Add ("杨斗")   '这是OutLook地址簿中的名字,假定有这个名字
      .Subject = "邮件标题:这是您分公司的网上划款或电汇数据2-6!"
      .Importance = IMPORTANCENORMAL
      .BodyFormat = 2 '枚举值如下:
      '0=olFormatUnspecified (实际上不行,会报错) ;1=olFormatPlain ;2=olFormatHTML ;3=olFormatRichText
      .HTMLBody = txtfile.ReadAll   '还有RTFBody,Body这些属性,与BodyFormat属性配合使用.
        '上句是邮件正文以Html格式显示,如果以纯文本显示,可以不设置HTMLBody属性,直接设置Body属性.
      .Attachments.Add ("c:\简报_.xlsx")  '邮件附件.
      .Send
     End With

txtfile.Close
Set txtfile = Nothing
Set fso = Nothing

Set oEmailItem = Nothing
oOutLookObject.Quit
Set oOutLookObject = Nothing

End Sub

1