2011-05-20 29 views
2

我正在製作一個帶有asp.net C#的網頁。從網頁發送多封郵件Asp.net

我希望人們登錄並輸入報價請求。那麼報價請求會通過電子郵件發送給所有相關人員進行報價(可能超過100人)。

很顯然,我不能讓用戶長時間等待的100+的人通過電子郵件發送的網頁將凍結。

我曾考慮在服務器上實現後端程序。檢查一個文本文件或者什麼時候該文本文件存在的形狀。在數據庫中搜索任何未通過電子郵件的報價。並通過電子郵件發送給相關人員。然後通過電子郵件將記錄標記出來。

但是一定有更好的辦法嗎?是否有一個定製系統或某些設計用來做這種事情的東西?

回答

0

我會使用類似微軟消息隊列,然後有定期掃隊列的任務。

我能得到網站推到隊列,因爲有隊列建立爲持續性,所以如果箱子崩潰,重啓等不會丟失任何信息。

0

簡單。只需發送它。如果它凍結超過0.1秒左右,則需要更好的硬件和配置。

  • 是否將SMTP類寫入到FOLDER在光盤上,讓本地安裝的SMTP服務將其用作拾取目錄。然後,你的頁面在寫入文件的那一刻完成。 Stnadard .NET類通過簡單的配置設置支持此設置。不過,大多數人從來不會去閱讀文檔。

野應網絡invovlved,僅有100文件生成左右。甚至有10個文件,每個包含10個密送收件人。成品。

生成10個小文件應該很胖。如果你的光盤超載得到一個小SSD;)他們幾乎沒有成本。

所有剩下的就是大量的編程工作,並引入了更多的觀看到您的系統。

+0

這也是我也會用到的方法。但是,我只是生成並將電子郵件文件保存到SMTP服務器的隊列文件夾中。 – 2011-05-20 12:11:25

+0

可能,但如果SMTP服務器關閉,則會增加一些問題。我使用Windows服務來複制那裏的電子郵件...並注入一個跟蹤代碼。如果電子郵件作爲垃圾郵件返回,我可以找出它的起源地址以及它是否真的來自網站;) – TomTom 2011-05-20 12:16:40

+0

是的。請注意,我不跟蹤其他任何內容。我注入了兩個GUID,這些GUID也會進入數據庫並交叉引用生成該文件的用戶,該用戶是應用程序池的工作帳戶,並且大多數時間唯一標識一個網站,至少一組網站(客戶,多站點應用)。我還跟蹤目標和起始地址的哈希值和長度 - 而不是地址。 BUt如果您突然以數百個單位開始發送同一地址的電子郵件,我會收到警告;) – TomTom 2011-05-20 13:04:42

0

你可以將兩者結合起來,雖然它不會是我使用的方法。

但使用例如,您可以創建一個靜態監聽器接口,後端和(服務器)應用程序,而不是把一個文件,並定期檢查,你可以ping你的後端操作開始操作。

0

在「收件人」或「抄送」字段中生成1個電子郵件,其中包含100個人應該而不是導致頁面凍結。你真的觀察過這種行爲嗎?如果是這樣,請檢查您的SMTP配置,因爲聽起來不對勁。

但是,我看到的解決方案很好用,就是讓SQL數據庫保存所有待發送的消息,然後讓SQL Server每十分鐘運行一次作業以運行該待處理的表並做電子郵件(而不是直接從.NET應用程序發送電子郵件)。

+1

將所有人添加到「收件人」或「抄送」會導致所有人都看到每個人的電子郵件地址。這是一個隱私問題。你可以用你的方法使用'BCC',但它不完全是一個可擴展的解決方案。 – 2011-05-20 12:22:37

+0

如果收件人沒有鏈接在一起,比如單個公司,那麼它只是一個隱私問題。對於大型組織中的內部應用程序,沒有問題。這就是我所處的世界,所以我猜想,除非另有說明,否則我總是認爲這是違約。這個問題意味着收件人在某個組織下,儘管它並不清晰。 – Graham 2011-07-25 20:32:14