由於傳統的ASP代碼必須調用外部基於COM的組件才能發送電子郵件(這就是您在創建CDO消息時所做的事情---只要您在asp代碼中有一個CreateObject調用,那就是COM),如果外部組件需要很長時間才能響應,則asp代碼將會掛起。例如,大多數SMTP組件將同步嘗試將郵件發送到SMTP服務器,阻止您的asp代碼執行,直到發送電子郵件消息。這在非常繁忙的SMTP服務器上成爲問題,因爲它們對連接請求和SMTP命令的響應速度可能非常慢。另一個不好的情況是許多ISP /主機試圖通過有目的地使他們的SMTP服務器響應緩慢來限制您可以發送電子郵件的速度。更糟糕的是,一些主機甚至會在規定的時間內實際上使後續連接逐漸變慢。這會顯着影響您的網站性能,因爲您通常在SMTP發送過程中阻止了您的頁面代碼。
最好的解決方案是使用不執行此類限制性措施的主機或SMTP服務器。除此之外,有一種方法可以通過使用消息隊列來解決這個問題。如果您使用CDO,這意味着您必須在您的IIS Web服務器上配置Microsoft SMTP服務以供使用。即使您在IIS計算機上有其他SMTP軟件,也可以正確配置它。一旦Microsoft SMTP服務在您的IIS服務器上運行,它將能夠在服務器上對電子郵件進行排隊,並將它們異步地轉發到配置的SMTP服務器以應用程序/頁面代碼。配置Microsoft SMTP服務時,您必須定義它稱爲「智能主機」的內容。這只是您要將出站電子郵件路由到您的網絡上的SMTP服務器。
配置完成後,您只需更改使用CDO的代碼即可將電子郵件排隊而不是嘗試發送它。在您的CDO代碼,你應該有一個設置,看起來像這樣CDO的域值的行:
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
你想從一個值2,爲「sendusing」字段的值更改爲1的值。這些是cdoSendUsingPort(2)和cdoSendUsingPickup(1)枚舉的枚舉值。一旦你這樣做,你也可以刪除「smtpserver」和「smtpserverport」字段,因爲這些字段會被你的Microsoft SMTP服務配置覆蓋。一旦你這樣做了,你的asp代碼將快速生成電子郵件消息,並且它將在IIS服務器的郵件提取文件夾中排隊。所以你的應用程序/頁面代碼將運行得更快。傳出的電子郵件將潛在地累積在隊列文件夾中,因爲SMTP服務在緩慢處理它們在後臺傳送它們時起作用。它不會使電子郵件發送得更快,但它確實可以防止由於SMTP服務器較慢而導致的代碼被阻止。
雖然我之前使用Jmail通過將郵件放入拾取文件夾來發送郵件,但我並不知道這可以通過CDO郵件組件完成,所以請使用+1來顯示如何完成此操作。 – johna