用Excel和OutLook实现自动批量发邮件

65 篇文章 2 订阅
10 篇文章 0 订阅

转自:https://zhuanlan.zhihu.com/p/25283201

作者:闲者秋山

闲者秋山

相信不少人的工作中都有这样的情况,需要群发通知邮件的情况。

(比如财务付完款,要通知供应商,房东之类的)

但如果要发的邮件的收件人

要求的附件和邮件正文都不一样,

且收件人数量极多,那这个工作量就很大。

虽然很多公司可以引进软件解决这问题,

但更多的公司是不舍得花这个钱的。

这里介绍一个仅靠Office就可以实现的方法
我会尽量备注注释来解释代码的意思,

但如果还是看不懂,

请大家先自己进行一些VBA基础知识的学习。

先按照上图,用Excel做一个表格。

名为sheet1

然后alt+f11,呼出vba编辑器,insert ,选择module,复制以下代码。

Sub sendBatchMail()
 t = Timer   '计时器开始

Dim rowCount, endRowNo
Dim objOutlook As New Outlook.Application
Dim objMail As MailItem
Dim sendIndex

endRowNo = ThisWorkbook.Sheets("Sheet1").[a65535].End(xlUp).Row
 '取sheet1的最后一行是多少行

Set objOutlook = New Outlook.Application

ThisWorkbook.Sheets("sheet1").Select

For rowCount = 2 To endRowNo '循环从第二行运行到最后一行

Set objMail = objOutlook.CreateItem(olMailItem)

subjectname = ThisWorkbook.Sheets("sheet1").Range("b" & rowCount) '赋值邮件名

bodyname = ThisWorkbook.Sheets("sheet1").Range("c" & rowCount) '赋值邮件正文

attach_address = ThisWorkbook.Sheets("sheet1").Range("d" & rowCount)
'赋值附件所在的地址链接

With objMail
.To = Cells(rowCount, 1) 
.Attachments.Add attach_address
.Body = bodyname 
.Subject = subjectname
.sendIndex = rowCount Mod objOutlook.Session.Accounts.Count + 1 
'要发的邮件分到服务器上
.SendUsingAccount = objOutlook.Session.Accounts.Item(sendIndex)
.Send
End With
Set objMail = Nothing
Application.Wait (Now + TimeValue("0:00:15"))
 '发完一封邮件等15秒左右,觉得时间太久可以自己调整
Next
MsgBox "Done!" & Chr(10) & "Run time is " & Timer - t & "seconds"
 '结束后,显示计时器结果
End Sub

当然这是一个我已经简化后的模型。

当你稍微了解一些代码结构后,你完全可以自己修改一下代码,

重新设计符合自己公司格式要求的程序。

下图是我设计的简单的模板,按钮可以去设定中,quick access toolbar(快速工具栏)中

找到insert controls(插入控件),然后就可以插入按钮了。

按钮放置后可以直接连接宏(assign macro),然后以后点击即可运行。

(此方法适合发文字不多的通知,比如我司已于近日支付贵公司XX金额,请注意查收。 但不适合发长信。)


本文主要是提供思路,
知乎是分享知识的平台,不是提供成品的地方,
伸手党的私信我真没工夫回……
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值