與vbSendMailSMTP超時與vbSendMail VB6
嗨
奇怪的問題,我保持VB6遺留應用程序。客戶端需要一個新的功能來處理消息列表以發送電子郵件。該應用程序是一個沒有用戶界面的ActiveX exe文件。每隔幾分鐘就會調用一次來從Task Scheduler處理隊列。它被設置爲無人執行編譯,因此不能有任何表單。它只有模塊和類模塊。
如果我從主模塊運行vbSendMail它似乎工作正常。但是,我無法將vbSendMail.clsSendmail
組件聲明爲With Events
。如果我嘗試使用消息「僅在對象模塊中有效」執行此操作。所以,我只是聲明如下:
Private poSendMail As vbSendMail.clsSendMail
這是所有罰款和代碼工作,並儘可能我可以看到發出的郵件(當然,當我用我自己的地址,他們到達!)。但是,我無法獲取狀態,進度,發送成功以及最重要的SendFailed事件。所以我無法知道郵件是否成功發送。
我試圖創建一個類模塊,並從那裏我可以實例vbSendMail.clsSendmail
,可與事件聲明如下:
Private WithEvents oMail As vbSendMail.clsSendMail
這讓我去接從Sendmail的事件(和代碼肯定似乎確實如此)。但是,問題是,當以這種方式聲明時(並且使用與主模塊完全相同的代碼),我無法建立到郵件服務器的連接。我得到一個狀態的事件後,隨後一段時間由SendFailed事件如下:
Send Status: Connecting to SMTP Server (mySMTPServerName)...
Send Failed: Timeout occurred: The SMTP Host did not respond to the request
我不明白,爲什麼通過類模塊配置,而不是一個標準模塊代碼時應該表現有什麼不同。
有沒有人知道爲什麼會發生這種情況,或者我可以如何解決問題,以便我可以從vbSendMail.clsSendMail
獲得郵件實際上已成功發送的肯定確認?
非常感謝任何人都可以提供的幫助。
非常感謝Vanquished Wombat。我還仔細查看了文檔和源代碼,認爲在最後的手段中,我可能能夠編寫不同的代碼。關於使用winSck控件的隱藏表單的同樣想法也讓我擔心它會成爲一個無人值守的應用程序。但奇怪的是,當在modMain中聲明和使用vbSendMail時,它看起來工作正常(但是當以這種方式聲明時你不能獲取事件消息)。 – James
我最終解決了這個問題,它似乎與任何時候存在多於一個的vbSendMail實例有關。我可以在類模塊中聲明vbSendMail With Events,並獲取進度和成功/失敗事件。然而,如果我有一個vbSendMail實例聲明並存在於一個我認爲具有全局作用域的標準模塊中,那麼這將停止工作。 – James
更奇怪的是,如果我首先實例化vbSendMail的類級模塊,然後實例化標準模塊vbSendMail,那麼來自標準模塊實例化的事件會被類級實例化(有趣!)接收到。通過嚴格控制vbSendMail實例的實例化和銷燬,並確保在任何時候只有其中一個存在,我似乎已經解決了這個問題。 – James