VBA常用的9种邮件发送方式


【蜂邮EDM】:邮件群发系统,EDM邮件营销平台,邮件代发服务。 查看价格
【AokSend邮件API】:触发式邮件API,15元/万封,99%送达率。 查看价格
【烽火邮箱】:新人领取免费域名邮箱,可用作企业邮箱公司邮箱。 查看价格
VBA 常用的 9 种邮件发送方式
在 Excel 中,VBA(Visual Basic for Applications)是一种强大的工具,可以用来自动化各种任务,包括邮件发送。通过 VBA,你可以轻松地发送电子邮件,批量发送邮件,甚至通过 API 连接第三方邮件服务。本文将详细介绍 VBA 中常用的 9 种邮件发送方式,帮助你高效地完成邮件自动化任务。
1. 基础邮件发送:使用 Outlook 创建新邮件
1.1 组件简介
VBA 提供了一个强大的 Outlook 组件,允许你通过代码发送电子邮件。Outlook 是微软 Office 的一部分,因此你需要确保 Office 安装完整。
1.2 代码示例
以下是一个简单的示例,显示如何使用 VBA 向某个人发送一封邮件:
Sub SendEmail() Dim Outlook As Outlook Dim ToAddress As String Outlook = CreateObject("Outlook.Application") Outlook.Visible = False ToAddress = " recipient@example.com " Outlook.Session.Sentences.Add Recipient:=OutlookAddress:=ToAddress, To:=OutlookAddress:=ToAddress, Subject:= "邮件主题", Content:= "邮件正文" Outlook.Session.Sentences cricket.addSaveAs Outlook.Session.Sentences cricket.sendEnd Sub
1.3 注意事项
- 使用
Outlook.Visible = False
隐藏 Outlook 应用,避免干扰工作流程。 - 请确保收件人地址格式正确。
2. 高级邮件发送:批量发送邮件
2.1 组件简介
VBA 也支持批量发送邮件,这在处理多个邮件列表时非常有用。你可以通过 Outlook 的 Send
方法发送多封邮件。
2.2 代码示例
以下是一个批量发送邮件的示例:
Sub MassSendEmail() Dim Outlook As Outlook Dim recipients() As String Dim i As Integer Outlook = CreateObject("Outlook.Application") Outlook.Visible = False ' 设置收件人列表 recipients = Array(" recipient1@example.com ", " recipient2@example.com ") ' 批量发送邮件 For i = 0 To UBound(recipients) Outlook.Session.Sentences.Add Recipient:=OutlookAddress:=recipients(i), To:=OutlookAddress:=recipients(i), Subject:= "邮件主题", Content:= "邮件正文" Next Outlook.Session.Sentences cricket.addSaveAs Outlook.Session.Sentences cricket.sendEnd Sub
2.3 注意事项
- 收件人地址必须是
mailto:
格式。 - 确保收件人地址不重复,避免 Outlook 报错。
3. 第三方邮件 API:使用 APTIFY 或 MAILCHIMP
3.1 组件简介
如果你需要发送给第三方邮件服务(如 Gmail、Aptify、Mailchimp),VBA 提供了 API 接口,方便你发送邮件。
3.2 代码示例(使用 APTIFY)
以下是一个使用 APTIFY API 发送邮件的示例:
Sub SendEmailAPIFY() Dim aptifyKey As String Dim recipients() As String Dim i As Integer aptifyKey = "your_api_key_here" recipients = Array(" recipient1@example.com ", " recipient2@example.com ") For i = 0 To UBound(recipients) Dim apthyObj As APTIFY apthyObj = CreateObject("APIFY/outgoing") apthyObj.Request-Type = "email" apthyObj.Request-Method = "POST" apthyObj.Request-From = "sender@example.com" apthyObj.Request-To = recipients(i) apthyObj.Request-Subject = "邮件主题" apthyObj.Request-Body = "邮件正文" apthyObj.Request-Add-Credentials apthyObj.Request-Add-Attachment apthyObj.Request-Parameters apthyObj.Request-Header-Value("Content-Type", "text/plain") apthyObj.Request-Header-Value("Content-Length", "100") apthyObj.Request-APFY-APITag = aptifyKey apthyObj.Request-APFY-Date = Date() apthyObj.Request-APFY-Time = Time() apthyObj.Request-Send NextEnd Sub
3.3 注意事项
- 确保你拥有有效的 API 关键字。
- 处理返回的错误信息,确保发送过程不中断。
4. 自动化邮件模板:VBA 替换变量
4.1 组件简介
使用 VBA 替换变量可以简化邮件模板的发送过程,避免重复代码。
4.2 代码示例
以下是一个通过 VBA 替换变量发送邮件的示例:
Sub EmailTemplate() Dim Outlook As Outlook Dim ToAddress As String Outlook = CreateObject("Outlook.Application") Outlook.Visible = False ' 邮件模板文件路径 Path = "C:\templates\email.html" ' 替换变量 Outlook.Session/Documents.Add From:=OutlookAddress:=OutlookAddress, To:=OutlookAddress:=ToAddress, Subject:= "邮件主题" ' 替换内容 Outlook.Session.Documents.Open "C:\templates\email.html" Outlook.Sessionagic.StringReplace "变量名", "替换值", "替换位置" Outlook.Sessionagic.StringReplace "另一个变量名", "另一个替换值", "另一个替换位置" Outlook.Session/Documents.Close Outlook.Session.Sentences cricket.addSaveAs Outlook.Session.Sentences cricket.sendEnd Sub
4.3 注意事项
- 确保模板文件格式正确。
- 使用
Replace
方法替换多个变量。
5. 邮件列表维护:自动回复和邮件列表更新
5.1 组件简介
维护邮件列表可以简化后续发送邮件的工作,自动回复可以节省时间。
5.2 代码示例
以下是一个自动回复发送邮件的示例:
🔔🔔🔔 【烽火邮箱】:烽火邮箱是一款简洁高效的企业邮箱平台,新客户赠送免费企业邮箱,一个起卖、按月付费(低至9.9元);支持别名邮箱及群组邮箱,支持定制无限邮箱。高权重纯净IP池,系统自带反垃圾机制。
立即查看 >> :企业邮箱价格
【蜂邮EDM】:邮件群发系统,EDM邮件营销平台,邮件代发服务,专业研发定制邮件营销系统及邮件群发解决方案!蜂邮自研产品线主要分为标准版、外贸版、企业版、定制版,及邮件API邮件SMTP接口服务。
立即查看 >> :邮件发送价格
【AokSend邮件API】:专注触发式邮件API发送服务。15元/万封,发送验证码邮件、忘记密码邮件、通知告警邮件等,不限速。综合送达率99%、进箱率98%。触发邮件也叫事务性邮件或推送邮件,包含:验证码邮件、重置密码邮件、余额提醒邮件、会员到期邮件、账号认证邮件等!
立即查看 >> :邮件发送价格
Sub AutoReply() Dim Outlook As Outlook Dim ToAddress As String Outlook = CreateObject("Outlook.Application") Outlook.Visible = False ' 自动回复消息 Dim replyMessage As String replyMessage = "收到邮件了,请检查您的收件箱。" ' 发送自动回复 Outlook.Session.Sentences.Add To:=OutlookAddress:=ToAddress, Subject:= "邮件主题", Content:= replyMessage Outlook.Session.Sentences cricket.addSaveAs Outlook.Session.Sentences cricket.sendEnd Sub
5.3 注意事项
- 确保邮件列表更新后自动回复不会重复发送。
- 使用 Outlook 的
Items
对象管理邮件列表。
6. 邮件主题和正文的自动化
6.1 组件简介
VBA 可以自动化邮件主题和正文的发送,当你需要发送不同主题的邮件给不同收件人时,可以轻松实现。
6.2 代码示例
以下是一个自动化邮件主题和正文的示例:
Sub VariableEmail() Dim Outlook As Outlook Dim recipients() As String Dim i As Integer Outlook = CreateObject("Outlook.Application") Outlook.Visible = False ' 收件人列表 recipients = Array(" recipient1@example.com ", " recipient2@example.com ") ' 邮件主题和正文 Dim subject As String Dim body As String subject = "邮件主题 " & i body = "邮件正文 " & i For i = 0 To UBound(recipients) Outlook.Session.Sentences.Add Recipient:=OutlookAddress:=recipients(i), To:=OutlookAddress:=recipients(i), Subject:= subject, Content:= body Next Outlook.Session.Sentences cricket.addSaveAs Outlook.Session.Sentences cricket.sendEnd Sub
6.3 注意事项
- 确保收件人地址格式正确。
- 使用循环或条件判断来处理不同的收件人。
7. 邮件附件的管理:压缩和分步发送
7.1 组件简介
附件管理可以简化邮件发送过程,避免因附件过大导致 Outlook 报错。
7.2 代码示例
以下是一个压缩附件和分步发送的示例:
Sub SendEmailWith附件() Dim Outlook As Outlook Dim attachmentPath As String Dim compressedPath As String Outlook = CreateObject("Outlook.Application") Outlook.Visible = False ' 附件路径 attachmentPath = "C:\test附件\file.xlsx" ' 压缩附件 compressedPath =attachmentPath + ".zip" If Not FileExists(compressedPath) Then Dim archiver As Arc archiver = CreateObject("Win32FileArc archiver") archiver.AddInputPath attachmentPath archiver.AddOutputPath compressedPath archiver.Run archiver.Delete End If ' 发送邮件 Outlook.Session.Sentences.Add Recipient:=OutlookAddress:= "recipient@example.com", To:=OutlookAddress:= "recipient@example.com", Subject:= "邮件主题", Content:= "邮件正文", Attachment:= compressedPath Outlook.Session.Sentences cricket.addSaveAs Outlook.Session.Sentences cricket.sendEnd Sub
7.3 注意事项
- 确保压缩后的文件路径正确。
- 使用
Arc
对象进行文件压缩。
8. 邮件密码的安全性:使用宏启动密码
8.1 组件简介
为了避免安全问题,可以通过宏启动密码来保护 Outlook 应用。
8.2 代码示例
以下是一个使用宏启动密码发送邮件的示例:
Sub SecureSendEmail() Dim Outlook As Outlook Dim recipientAddress As String Outlook = CreateObject("Outlook.Application") Outlook.Visible = False ' 设置收件人地址 recipientAddress = " recipient@example.com " ' 启动密码 Outlook.Password = "安全的密码" Outlook.Password = "新的密码" Outlook.Session.Sentences.Add To:=OutlookAddress:=recipientAddress, Subject:= "邮件主题", Content:= "邮件正文" Outlook.Session.Sentences cricket.addSaveAs Outlook.Session.Sentences cricket.sendEnd Sub
8.3 注意事项
- 确保密码安全,避免被他人获取。
- 避免在代码中直接写密码,建议使用环境变量。
9. 邮件日志的记录和监控
9.1 组件简介
记录邮件发送日志可以帮助你监控发送过程,确保邮件被正确发送。
9.2 代码示例
以下是一个记录邮件发送日志的示例:
Sub EmailLog() Dim Outlook As Outlook Dim logMessage As String Outlook = CreateObject("Outlook.Application") Outlook.Visible = False logMessage = "邮件发送日志:日期:" & Date() & " 时间:" & Time() & " 类型:Email发送" ' 打印日志 Debug.Print logMessage Outlook.Session.Sentences cricket.addSaveAs Outlook.Session.Sentences cricket.sendEnd Sub
9.3 注意事项
- 使用调试语句(
Debug.Print
)记录发送日志。 - 处理发送失败或错误的情况。
以上就是 VBA 常用的 9 种邮件发送方式的详细说明和示例代码。通过这些方法,你可以高效地自动化邮件发送流程,节省时间和精力。记得在实际使用中调整代码,确保收件人地址和路径正确,避免 Outlook 报错。希望这篇文章能帮助你更好地掌握 VBA 邮件发送的技巧!


【蜂邮EDM】:邮件群发系统,EDM邮件营销平台,邮件代发服务。 查看价格
【AokSend邮件API】:触发式邮件API,15元/万封,99%送达率。 查看价格
【烽火邮箱】:新人领取免费域名邮箱,可用作企业邮箱公司邮箱。 查看价格