2012-07-06 61 views
4

後面的故事節流在VBA

前陣子一點,有人問我,如果我們能夠實現內部羣發電子郵件解決方案,使我們不得不對敏感信息的更好的控制。我提出了兩步計劃:在Excel/VBA/CDO中爲用戶熟悉開發一個原型,然後爲速度和健壯性分階段提供.Net/SQL服務器解決方案。

更改的內容

3月進入第二階段,管理層決定繼續和外包電子郵件營銷給另一家公司,這是罰款。第一個問題是管理層沒有采取措施讓公司通過,所以我仍然有義務將當前的原型工作。

儘管如此,原型的工作,或至少它做到了。第二個問題出現在我們的Exchange 2003中繼服務器與Exchange 2010交換時。事實證明,默認情況下會轉換更多「安全」功能,例如Throttling Policies,我一直在幫助系統管理員解決這個問題。發生了什麼事是,後+100郵件被髮送,服務器開始拒絕與以下錯誤的發送請求:

The message could not be sent to the SMTP server. The transport error code is 0x800ccc67. 
The server response was 421 4.3.2 The maximum number of concurrent connections has exceeded a limit, closing transmission channel 

不幸的是,我們只得到測試服務器配置時,市場有東西送出去,這大約每月一次。

接下來是什麼?

我期待在Excel的VBA定時器功能,以幫助扼殺我的主循環泵,以幫助節流發送請求。這裏的第三個問題是,根據我的理解,我能得到的最好精度是1秒鐘。每秒發送1封電子郵件的時間會比我們發送的每封郵件的5封電子郵件的時間長得多(約4倍-5倍)。這將3小時的流程轉變爲過去工作人員可用時間的全天過程。我想我可以通過每秒發送5封電子郵件來反轉速度,但是如果計時器的精確度更高,則會產生更多的爆發影響,而不是穩定的速率。在我看來,這創造了一個較少控制的過程,我不確定服務器如何處理突發,而不是穩定的速度。 我有什麼選擇?

+1

您可以通過將地址的布赫在一個郵件的密件抄送字段發送許多電子郵件少。 – 2012-07-06 16:50:54

+0

我很困惑。你是代表貴公司這樣做,所以你不能(或你的老闆或上司,或CTO)只是告訴系統操作員打開節流關閉,當您需要發送電子郵件?這裏負責誰,軟件或使用它的人員? – JimmyPena 2012-07-06 19:29:54

回答

5

如果您需要更精確的定時器控制,則可以使用windows sleep API。它有它的單位以毫秒爲單位:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

Public Sub Testing() 

'do something 
Sleep(1000) 'sleep for 1 second 
'continue doing something 

End Sub 

我不是很熟悉的兌換,所以我不能到位節流政策發表評論。

+1

我會; '用於MS = 1至500:1的睡眠&:的DoEvents:next'避免鎖定整個過程的持續時間 – 2012-07-06 16:27:47

+0

我會避免睡眠完全和使用定時器事件如聲明函數SetTimer的庫「USER32」和聲明PTRSAFE功能KillTimer函數Lib「user32」。在我看來,睡眠應該是最終的選擇,因爲它阻止了VBA中的所有其他操作。 – osknows 2012-07-10 20:20:57