呼之欲出 WebMail 開發手記 (八) WebService

iDotNetSpace發表於2009-07-15


(對不住大家了,這幾天公司專案太忙,加上身體不適,有幾天沒有來更新了。)

我們需要做兩個 WebService,一個用來接收郵件,一個用來傳送郵件:

  • Receiver.asmx
  • Sender.asmx

然後在 WebService 中各新增一個方法 Start 用來啟動收發執行緒。因為我們需要實時獲取收發資訊,所以我們把物件儲存到 Session 中,這樣方便實時返回當前執行緒進行到什麼程式,有些什麼狀態等:

 

呼之欲出 WebMail 開發手記 (八) WebService
[WebMethod(EnableSession = true)]
呼之欲出 WebMail 開發手記 (八) WebService
public string[] Start() {
    HttpContext context 
= HttpContext.Current;

    MailThread mail 
= null;
    
object mailObj = context.Session[MailHelper.POP3Name];
呼之欲出 WebMail 開發手記 (八) WebService    
if (mailObj != null{// 是否已經存在
        mail = (MailThread)mailObj;
    }

呼之欲出 WebMail 開發手記 (八) WebService    
else {// 建立新的執行緒
        mail = new MailThread();
        context.Session.Add(MailHelper.POP3Name, mail);
        mail.ReceiveStart();
    }


呼之欲出 WebMail 開發手記 (八) WebService    
if (mail.Pop3State >= 2{// 接收完就不要了
        mail.ReceiveStop();
        context.Session.Remove(MailHelper.POP3Name);
    }


呼之欲出 WebMail 開發手記 (八) WebService    
return new string[] { mail.Pop3State.ToString(), mail.Pop3Mail, mail.Pop3Message };
}

 

 

呼之欲出 WebMail 開發手記 (八) WebService
[WebMethod(EnableSession = true)]
呼之欲出 WebMail 開發手記 (八) WebService
public string[] Start() {
    HttpContext context 
= HttpContext.Current;

    MailThread mail 
= null;
    
object mailObj = context.Session[MailHelper.SMTPName];
呼之欲出 WebMail 開發手記 (八) WebService    
if (mailObj != null{// 是否存在
        mail = (MailThread)mailObj;
    }

呼之欲出 WebMail 開發手記 (八) WebService    
else {// 建立新的執行緒
        mail = new MailThread(isstart);
        context.Session.Add(MailHelper.SMTPName, mail);
        mail.SendStart();
    }


呼之欲出 WebMail 開發手記 (八) WebService    
if (mail.SmtpState >= 2{// 傳送完就不要了
        mail.SendStop();
        context.Session.Remove(MailHelper.SMTPName);
    }


呼之欲出 WebMail 開發手記 (八) WebService    
return new string[] { mail.SmtpState.ToString(), mail.SmtpMail, mail.SmtpMessage };
}


好了,WebService 很簡單。我們再來看看怎麼呼叫:

首先向 Header.aspx 中新增 AJAX 控制元件 ScriptManager,然後新增兩個 Service 引用:

 

呼之欲出 WebMail 開發手記 (八) WebService
    <asp:ScriptManager ID="ScriptManager1" runat="server">
        
<Services>
            
<asp:ServiceReference Path="~/Receiver.asmx" />
            
<asp:ServiceReference Path="~/Sender.asmx" />
        
Services>
    
asp:ScriptManager>

 

再新增兩個實時資訊欄:

 

<div id="POP3Div" style="display: none;">郵件接收資訊欄div>
<div id="SMTPDiv" style="display: none;">郵件傳送資訊欄div>

 

剩下的就是如何呼叫 WebService 向這兩個資訊欄中填充資料:

 

呼之欲出 WebMail 開發手記 (八) WebService
<script type="text/javascript" language="javascript">
function receiveMail(){
    Receiver.Start(onPop3Success, onPop3Error);
}
function onPop3Success(result){
    
var pd = $get("POP3Div");
    
if(result[0]=="1"){
        pd.style.display 
= "block";
        pd.innerHTML 
= result[1]+result[2];
    }
else{
        pd.style.display 
= "none";
    }
}
function sendMail(){
    Sender.Start(onSmtpSuccess, onSmtpError);
}
function onSmtpSuccess(result){
    
var pd = $get("SMTPDiv");
    
if(result[0]=="1"){
        pd.style.display 
= "block";
        pd.innerHTML 
= result[1]+result[2];
    }
else{
        pd.style.display 
= "none";
    }
}
function onPop3Error(error){
    
var pd = $get("POP3Div");
        pd.style.display 
= "block";
    pd.innerHTML 
= error.get_message();
}
function onSmtpError(error){
    
var pd = $get("SMTPDiv");
        pd.style.display 
= "block";
    pd.innerHTML 
= error.get_message();
}

function startThread(){
    receiveMail();
    sendMail();
}
// 1秒鐘查一次,可以根據需求調整
window.setInterval(
"startThread();"1*1000);
</script>

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-609238/,如需轉載,請註明出處,否則將追究法律責任。

相關文章