使用 VBA 发送电子邮件,无需用户与电子邮件客户端交互

Posted

技术标签:

【中文标题】使用 VBA 发送电子邮件,无需用户与电子邮件客户端交互【英文标题】:send email with VBA with no user interaction with email client 【发布时间】:2014-08-15 17:35:46 【问题描述】:

我正在尝试获取此代码以通过电子邮件发送附件。但他们将有数百个附件,所以我不希望用户需要与电子邮件客户端进行交互。任何建议将不胜感激。

私有子 CreateReports_Click()

Dim x           As String
Dim y           As String
Dim StrSQL      As String
Dim stWhereStr  As String 'Where Condition'
Dim stSection   As String 'Selection from drop down list
Dim stfile      As String
Dim stDocName   As String
Dim StrEmail    As String

StrSQL = "SELECT DISTINCTROW [OPDA Is-s-r- Courts Users by District/Cir].[Sup], [OPDA Is-s-r- Courts Users by District/Cir].SupEmail " & _
    "FROM [OPDA Is-s-r- Courts Users by District/Cir];"
y = Year(Date)


Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb
Dim qdTemp As DAO.QueryDef
Set qdTemp = db.CreateQueryDef("", StrSQL)
Set rst = qdTemp.OpenRecordset()
If rst.EOF And rst.BOF Then
    MsgBox "No data available for the Ledger Process routine."
Else
    Debug.Print rst.Fields.Count
    rst.MoveFirst
    Do While Not rst.EOF
    x = rst![Sup]
    StrEmail = rst![Supemail]

    stDocName = "Courts - Is-s-r Recertification Report"
    stWhereStr = "[OPDA Is-s-r- Courts Users by District/Cir].[SUP]= '" & x & "'"
    stfile = "P:\DFI\FIB\Access Tables\FibCustomers\Is-s-r Reports\Courts\" & x & " - " & y & " FedInvest InvestOne Recertification.pdf"

    DoCmd.OpenReport stDocName, acPreview, , stWhereStr
    DoCmd.SendObject acSendReport, stDocName, acFormatPDF, StrEmail, , , "My Subject here", "your report"
    DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, stfile
    DoCmd.Close acReport, stDocName

    rst.MoveNext
Loop
End If
rst.Close
Set rst = Nothing
End Sub

【问题讨论】:

这会有帮助吗?它给出了两个例子.. MS Access send email 【参考方案1】:

您可以使用本地电子邮件客户端的 API 并打开一个隐藏实例来创建和发送电子邮件(例如 Outlook、Lotus Notes),也可以使用 CDO 对象。

http://www.rondebruin.nl/win/s1/cdo.htm

尽管上面的示例是在 Excel 中,但代码运行良好。如果您正在使用 CDO 对象,您唯一需要确定的是是否打开了必要的端口。如果您想使用特定的电子邮件客户端,还可以查看与此问题相关的主题,以及大量有效信息。

【讨论】:

【参考方案2】:

发送无人参与电子邮件的最佳方式是使用 SMTP。绕过 MAPI 安全提示不是一个好主意。

我们的 Total Access Emailer 插件程序使用 SMTP,因此您可以为您的用户广播大量电子邮件。 Total Access Emailer 允许您向列表中的每个人发送个性化的电子邮件,并将您的记录中的字段嵌入到消息和主题中。它还可以将 Access 报告附加为为每个收件人过滤的 PDF 文件,以便每个人只能看到他们的数据。其向导界面无需编程。如果您想自动化它,可以使用 VBA 库。更多信息在这里:http://www.fmsinc.com/MicrosoftAccess/Email.asp

提供免费试用:http://www.fmsinc.com/MicrosoftAccess/Email/free-trial.html

【讨论】:

以上是关于使用 VBA 发送电子邮件,无需用户与电子邮件客户端交互的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 从 MS Access 发送电子邮件

在使用 Excel VBA 发送的电子邮件中内联附加图像

如何使用 Gmail 的 SMTP 客户端在 C# 中向自己发送电子邮件,而无需在 Gmail 设置中启用安全性较低的应用程序的访问权限?

多个用户如何在 Node.js 中使用 Gmail 别名发送电子邮件,而无需 Google 开发人员控制台对每个用户进行用户身份验证?

通过vba发送邮件但没有发送功能模块

基于公式的单元格值触发的 VBA 电子邮件代码