【问题标题】:MS Access - Mass Emailing?MS Access - 群发电子邮件?
【发布时间】:2009-11-30 23:56:30
【问题描述】:

我正在使用 MS Access 创建一个包含 5000 多个联系人的数据库。这些联系人被分成联系人所属的员工,然后再分成类别以便于搜索。我想要做的是创建一个按钮,它将以表格形式(简单)打开查询,然后有复选框,以便员工可以选择,例如,100 个联系人从表格中的 110 个联系人中发送电子邮件,然后发送大量电子邮件,例如时事通讯(不是那么简单!)。我一直在努力解决如何做到这一点,因为我不太了解编程(我是一个临时工投入到这份工作中,只是尽我所能),我能找到的只是一些东西关于循环(不知道!),我需要软件来做到这一点。

请问有什么解决方案吗?如果可能,我想避免购买/安装软件,如果您有答案,请尽可能简单...

提前致谢!

凯特

【问题讨论】:

  • 当您开始一次自动向多个人发送邮件时,如果您没有订阅 ISP 反馈循环,请不要拥有用于投诉的滥用@帐户,尤其是如果您如果不从您的列表中删除弹跳地址,您将在几天内被列入黑名单,并且非常很难被除名。您应该与 Constant Contact 等电子邮件服务提供商 (ESP) 合作(不,我不为他们工作)。他们会自动为您做所有这些废话。 超级 以一种骇人听闻的方式来做这件事是个坏主意。

标签: ms-access


【解决方案1】:

我刚刚在 MS Access 97 中创建了以下工作示例。

一个示例表(我用有效的电子邮件地址测试了代码):

ID 姓名电子邮件

1 Rics rics@stack.com

2 凯特 kate@stack.com

3 X x@stack.com

带有一个按钮的表单。 单击按钮时正在执行以下代码:

Private Sub Mail_Click()

    Dim r As Recordset
    Dim email As String
    Set r = CurrentDb.OpenRecordset("select * from Addresses")
    Do While Not r.EOF
        email = r(2)
        DoCmd.SendObject acSendNoObject, Null, Null, email, Null, Null, "Test subject", "Message body of the test letter", False, Null
        r.MoveNext
    Loop
    r.Close

End Sub

我希望你能将它插入到你的应用程序中。

【讨论】:

    【解决方案2】:

    搞定了:)

    代码很棒,但需要进行一些调整才能专门处理我的数据。在出现了很多错误之后,我终于想到了:

        Dim r As Recordset
    Dim Email As String
    Set r = CurrentDb.OpenRecordset("select Email from FranksFinanceBrokers")
    Do While Not r.EOF
        Email = Email & r(0) & ";"
        r.MoveNext
    Loop
    r.Close
    
    DoCmd.SendObject acSendNoObject, Null, Null, "", "", Email, "", "", True, Null
    
    End Sub
    

    感谢你们的帮助!

    【讨论】:

    • 由于您没有添加代码示例,我在我的测试环境中工作,因此需要自定义。
    【解决方案3】:

    我认为您需要学习一些 VBA 编码才能完成这项工作。这个tutorial 可能有用。

    这是send email from access 的一种方式。

    【讨论】:

      【解决方案4】:

      这是另一个发送e-mail through MS Access的资源

      【讨论】:

        【解决方案5】:

        rics 提供的答案将向记录集中的每个人发送一封电子邮件,但听起来您可能想要做的是向自定义分发列表发送一封电子邮件。为此,请调整 rics 的代码以构建地址字符串,如下所示:

        私人子邮件_Click()

        Dim r As Recordset
        Dim email As String
        Set r = CurrentDb.OpenRecordset("select * from Addresses")
        Do While Not r.EOF
            email = email & r(2) & ";"
            r.MoveNext
        Loop
        r.Close
        
        DoCmd.SendObject acSendNoObject, Null, Null, email, Null, Null, "Test subject", "Message body of the test letter", False, Null
        

        结束子

        【讨论】:

        • 如果任何一个email为null或为空,就会有问题。
        • 啊,你能解释一下你的意思吗??
        【解决方案6】:

        凯特,

        很抱歉,对于您的计划,没有特定的“神奇”代码。你将不得不写一些东西。我的解决方案是:

        1. 创建一个包含 3 个控件的表单:1 个文本控件、1 个列表框控件、1 个“发送”按钮
        2. 文本控件包含要发送的文本
        3. 列表控件显示我所有可用的电子邮件(填充了记录集)
        4. 将启用多选,以便我可以选择列表中的多个项目
        5. 点击按钮,我会

          连接所有选定的电子邮件以获得“sendTo”字符串,例如 发送至 =“bla@bla.com;blo@blo.com”。 使用 sendTo + 文本字符串作为参数调用 doCmd.sendObject 方法

        选项可能是

        • 对电子邮件主题进行额外控制
        • 在表格中跟踪已发送邮件(主题、文本、日期、到达的人)。它可以像“每封邮件一条记录”一样基本,带有一个备忘录字段来记录 sendTo 文本字符串(当然,您可以使用多个表构建更智能的东西,以坚持可以在您的人员之间建立的多对多关系表和您的邮件表,但您可能不需要它)

        【讨论】:

          【解决方案7】:

          有几种方法可以绕过丢失的电子邮件地址。最简单的方法是调整您的 SQL 以排除它们:

          选择来自 FranksFinanceBrokers 的电子邮件 WHERE (Email IS NOT NULL) AND (Email "")

          另一种方法是在字符串构建代码中添加 IF 语句:

          IF Not IsNull(r(0)) AND r(0) "" THEN Email = Email & r(0) & ";"

          我只会在 SQL 级别过滤它——更高效、更简单。

          购买软件会更容易做到这一点吗?是的,但挑战在哪里? :-) 你已经走了大部分路,所以我会坚持下去。

          【讨论】:

          • 是的,我在漫长的过程中获得了更多乐趣(并获得了如此多的经验)!我通过调整所述代码克服了我的问题,因此它基本上忽略了错误,工作正常:)
          【解决方案8】:

          从 Access 发送电子邮件存在许多缺陷,其中最重要的是这样做会使您看起来像垃圾邮件发送者并导致您的电子邮件主机出现问题。另外,还有很多安全问题。这方面的最佳信息来源是Tony Toews's Email FAQ

          【讨论】:

            猜你喜欢
            • 2021-11-21
            • 2020-05-16
            • 2021-12-31
            • 1970-01-01
            • 1970-01-01
            • 2020-08-30
            • 1970-01-01
            • 2021-05-11
            相关资源
            最近更新 更多