vb设计数据库电子邮件程序

2008-04-09 04:41:49来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  问题的产生

  Interface Technologies (ITI)的CodeVizor工作组正在努力使他们的新工具引起程序员的注意。在先前的数个月里,成千上万的程序员注册成为ITI's DevCentral的一员,以更方便的试用它们的产品。作为注册的一部份,注册者被询问到他们是否希望得到产品的更新及新产品发布的消息。几乎所有的注册者都希望如此。

  因此,工作团队决定向所有六千名注册用户发送一封个人电子邮件信息(当然得除开那些没有留联系EMail的用户)。但是这就出现了个问题:如果是发群体信件,则就违背了发个人邮件的初衷。我们希望的是发往注册用户的邮件是个人化的。因此,我们就得找出一种解决办法,使得发向6000名注册用户的群体邮件是完全个人的,保密的。

  目的

  我的工作则是写出一个程序,使得它能够进入到DevCentral的注册用户的SQL Server数据库里,然后为每个用户生成一封电子邮件(通过Exchange/Outlook)。

  该程序会将待发的EMail保存至outlook,因此就可以组织邮件发送的过程。最好是小批量发送电子邮件,一次发送500封比较合适。这样就可以令到使用者将错误率降到最低,同样也可以降低服务器的负担,加快网络连接速度。同样我们需在邮件上加上回复地址,这样邮件则可以从DevCentral的邮箱里发出,而不是个人的邮箱。

  以下将是创建该程序的主要步骤

  使用工具及使用目的

  通过使用Visual Basic 5.0写出该EmailMaker。该应用程序通过ODBC来进入数据库,并使用VB automation调用Microsoft Outlook以生成电子邮件文本。

  最开始的目的本来在于设计出一个简单的基于对话项的程序,使之通过点击按钮就可以完成所有的步骤。但是,这也涉及到了更为多的内容:不但会使得该程序在使用上更为灵活,在功能上也更为强大,也会使我更多的了解VB,比如:combobox控件,属性栏,自定义图标,progress栏,多样化窗口,甚至于非常简单的文件保存及文件格式。因此我努力的将这些分散的VB程序应用知识积累起来,使之能成为一个"真正的程序"

  EmailMaker使得用户可以通过数据库向地址列表发送个人化邮件。通过Message Window用户可以书写,编辑并保存邮件内容(同样也可以从其它文本编辑器或文档内复制-粘贴内容)

  完成内容书写及保存后,用户则可以开始单个生成标有地址的邮件。当群体邮件位于指定文件夹里时,Send Email 功能则会要求用户分发全体或一部份邮件。

  问题及解决方案

  开发此程序最大的难点在于Properties form.。

  开发此程序的目标之一在于让所有程序的选项来自combobox中,这样可以更便于安装及使用。我做的非常成功除了一个property(Address Sent From,以下我将会提及)。但是,最重要的一个属性包含了数据库及注册的调用功能,因为程序本身需要鉴别用户的数据库及邮件配置,常通过API来鉴别安装了何种ODBC数据库。
  以下是源代码

  下列数据对于API登录非常有用:


Public Const HKEY_CURRENT_USER = &H80000001

Public Const ERROR_SUCCESS = 0&

Public Const SYNCHRONIZE = &H100000
Public Const STANDARD_RIGHTS_READ = &H20000
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_NOTIFY = &H10

Public Const KEY_READ = ((STANDARD_RIGHTS_READ
KEY_QUERY_VALUE Or _
KEY_ENUMERATE_SUB_KEYS Or _
KEY_NOTIFY) And _
(Not SYNCHRONIZE))

Public Const REG_DWORD = 4


Public Declare Function RegOpenKeyEx Lib "advapi32.dll" _
Alias "RegOpenKeyExA" _
(ByVal hKey As Long, _
ByVal lpSubKey As String, _
ByVal ulOptions As Long, _
ByVal samDesired As Long, phkResult As Long) As Long

Public Declare Function RegEnumValue Lib "advapi32.dll" _
Alias "RegEnumValueA" _
(ByVal hKey As Long, _
ByVal dwIndex As Long, _
ByVal lpValueName As String, _
lpcbValueName As Long, _
ByVal lpReserved As Long, _
lpType As Long, _
lpData As Any, _
lpcbData As Long) As Long

Public Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long

'-- The subroutine FillODBCCombo is called when the Properties form is loaded.
'-- First the root ODBC key is opened. By iterating through its sub-keys,
'-- all of the installed DNS's are found and inserted into the DNS ComboBox.


Public Sub FillODBCCombo()

Dim hKey As Long

Dim dwIndex As Long
Dim lpData As Long
Dim lpcbData As Long

Dim lngResult As Long
Dim strResult As String
Dim lpValueName As String
Dim lpcbValueName As Long

'-- 每个ODBC数据源都有一个关键字位于
'-- HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources.上
'-- 通过查找每个关键字,能够收集到安装在ODBC上的所有数据源

lngResult = RegOpenKeyEx(HKEY_CURRENT_USER, _
"Software\ODBC\ODBC.INI\ODBC Data Sources", _
0&, _
KEY_READ, _
hKey)
If lngResult <> ERROR_SUCCESS Then

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:利用VB提取HTML文件中的EMAIL地址

下一篇:用API函数遍历指定路径的文件