2011-08-08 88 views
0

我在ASP網站上做了一些維護,並發現它發送重複的電子郵件。我無法弄清楚它是如何做到這一點的。我在這裏粘貼了代碼 http://pastebin.com/Beb94PiCASP發送重複電子郵件

在線443上是函數SendMsg2。據我可以告訴該函數只被調用一次。任何警報或消息只會出現一次。

當電子郵件被髮送的objMessage.TO = EMAIL1進來一次,然後沒有出現在任何第二個電子郵件。我在想,無論是讓它運行兩次也是清除變量。

感謝您的幫助。

回答

0

副手,我沒有看到任何令人擔憂的事情,我可以簡單地用手指幫助。解決ASP問題的最好辦法是二渠道之一:

  1. 封裝在一個VB COM組件的邏輯
  2. 用Response.write

個人,VB COM是對大量的開銷遺留應用程序。雖然它允許更好的儀器,但你必須寫很多代碼。除非這個應用的保質期比目前的應該更長,否則不是最好的選擇。那離開#2。

Response.Write進入和退出每個例程。然後查看打印出的流程,並確定第二次調用郵件例程的位置。如果這樣做什麼都不做,那麼它可能是用戶多次點擊按鈕(不耐煩的用戶)。如果後者,你應該做一個按鈕禁用。以跟蹤下來

一種方式是一個「會話ID」加進來。重構郵件例程以接受一個id值,然後你可以編寫「如果會話ID,然後不發送電子郵件」混合。在第一封電子郵件發送後,ID會被儲存起來,任何額外的電話都會看到已經存在的ID。我說引號中的會話id,因爲你們都必須使用session的概念和初始流程的概念來覆蓋用戶錯誤(多次點擊)和代碼流錯誤。如果您可以在一個會話中發送多封電子郵件,則需要保留某種類型的「我在此會話中發送此電子郵件」的值,因此您不會添加不發送電子郵件的錯誤。

您應該花時間糾正流程並糾正用戶錯誤。但請花時間先排查問題,以便了解是否還有其他任何工件。僅在傳統的ASP代碼中,這意味着將值寫入響應流(非常粗糙,就像手推式割草機?)。

+0

我已經做了一個response.write,在郵件功能,它只輸出一次。我能夠每次重現此問題而不會失敗,所以我知道這不是按鈕被雙擊的情況。我甚至嘗試刪除郵件功能,並將電子郵件代碼放在郵件被調用的地方,並且它仍然運行兩次。這是網站http://www.cpi-ontario.com/memberships/signup.asp 我打算嘗試做會話ID,聽起來像它會解決它。但是,知道它爲什麼運行兩次真的很好。 – Adam

+0

行,所以我分裂的形式進入兩頁,現在也沒有機會運行兩次。它仍然發送2封電子郵件。所以不知何故電子郵件功能必須有錯誤。 – Adam

+0

或者服務器配置有錯誤。它可能會在成功後被重試。或者在重新處理之前不清除已發送的消息。你必須涵蓋兩種情況。如果您每個會話只發送一次,或每個會話類型的電子郵件發送一次,它將解決您的問題。總是很高興知道爲什麼,但我發現遺留編程方法論爲什麼會帶來收益遞減。 –

1

你的功能被命名爲「SendMsg2」,但在478線設置

SendMsg = objMessage.Send 

或許有一定的副作用,當功能SENDMSG存在。