SMTP Timeout with vbSendMail VB6



vbSendMail出现奇怪问题

我在VB6中维护一个遗留应用程序。客户端需要一个新功能,该功能是处理发送电子邮件的消息列表。该应用程序是一个ActiveX exe,没有用户界面。每隔几分钟调用一次,以处理任务调度程序中的队列。它被设置为为无人值守执行而编译,因此不能在其中包含任何表单。只有模块和类模块。

如果我从主模块运行vbSendMail,它似乎工作正常。但是,我不能将vbSendMail.clsSendmail组件声明为With Events。如果我尝试用消息"仅在对象模块中有效"来做这个VB对象。所以我简单地声明如下:

Private poSendMail As vbSendMail.clsSendMail

这一切都很好,代码工作,就我所看到的发送电子邮件(当我使用我自己的地址时,它们到达!)。但是,我无法拾取Status, Progress, sendsuccess和最重要的SendFailed事件。所以我没有办法知道电子邮件是否发送成功。

我尝试创建一个类模块,从那里我可以实例化vbSendMail.clsSendmail,并可以用事件声明它,如下所示:

Private WithEvents oMail As vbSendMail.clsSendMail

这允许我从SendMail中拾取事件(代码似乎可以这样做)。但是,问题是,当以这种方式声明时(并且使用的代码与Main模块中的代码完全相同),我无法建立到邮件服务器的连接。一段时间后,我得到一个Status事件,后面跟着一个SendFailed事件,如下所示:

Send Status: Connecting to SMTP Server (mySMTPServerName)...
Send Failed: Timeout occurred: The SMTP Host did not respond to the request

我不明白为什么代码在通过类模块与标准模块配置时应该表现得不同。

有没有人知道为什么会发生这种情况,或者我如何解决这个问题,这样我就可以从vbSendMail.clsSendMail得到肯定的确认,电子邮件实际上已经成功发送了?

非常感谢任何人提供的帮助。

我很好奇,所以我从这里下载了当前的vbSendMail。

您将获得源代码加上word文档和示例代码。

事情是这样的- vbSendMail项目,我假设dll是创建的,包括一个窗体'frmSck.frm',它作为winsock控件的容器,用作SMTP通信组件。表单上有一个子节点,定义为:

Private Sub WinSck_Error(...)

我的假设(未测试)是,无人参与的执行设置否认表单创建的某些方面,以便创建winsock控件,根据您的经验,但winsock_Error()子不被触发-因此没有捕获错误事件。

隧道中有一些光明,在clsSendMail的Class_Initialize()子的源代码中提到有一个无形式的替代方案。然而,它也提到有未解决的部署问题,所以可能光是一列火车。

从上面的链接下载并尝试无形式方法可能需要一些时间。

最新更新