2009-09-03 7 views
0

J'ai un fichier flash en format 2.0 que j'ai besoin d'envoyer des emails via un gestionnaire d'asp. Tout d'abord, est-ce possible? Deuxièmement, si c'est le cas, comment puis-je obtenir le retour pour avoir un statut = vrai?Actionscript 2.0 Email LoadVars avec le gestionnaire ashx .net

.net codebehind

public void ProcessRequest(HttpContext context) 
    { 
     //E-Mail Method 

     string response = "sent=success"; 

     MailAddress fromAddress = new MailAddress(context.Request.QueryString["Email"].ToString(), context.Request.QueryString["Name"].ToString()); 
     MailAddress toAddress = new MailAddress("[email protected]", "Goons"); 
     MailMessage message = new MailMessage(fromAddress, toAddress); 
     message.Subject = context.Request.QueryString["Name"].ToString() + " sent you a message from the website."; 
     message.Body = context.Request.QueryString["Msg"].ToString(); 
     SmtpClient client = new SmtpClient("mail.grassrootsdm.com"); 
     // Include credentials if the server requires them. 
     NetworkCredential SMTPUserInfo = new NetworkCredential("mailsenderemail","password"); 
     client.Credentials = SMTPUserInfo; 

     try { 
      client.Send(message); 
     } 
     catch (Exception ex) { 
      response = ex.ToString(); 
     } 

     context.Response.Write(response); 
    } 

l'actionscript

if (i == 0) { 
    sendVars.Name = fieldName.field.text; 
    sendVars.Email = fieldEmail.field.text; 
    sendVars.Msg = fieldMsg.field.text; 
    sendVars.sendAndLoad("http://www.grassrootsdm.com/WebService/EmailHandler.ashx", statusVars, "POST"); 
    statusMsg.text = "Sending..."; 
    statusVars.onLoad = function(success:Boolean) { 

     if (success) { 
      if (statusVars.sent == "success") { 
       clearForm(); 
       statusMsg.text = "Message sent"; 
      } 
     } else { 
      statusMsg.text = "Error!"; 
     } 
     clearInterval(clearStatus); 
     clearStatus = setInterval(clearStatusInt, 3000); 
    }; 
} 

Répondre

0

Oui, il est possible. Lire les notes importantes au bas de chaque code concernant l'envoi et la récupération des données de flash vers la page .net. L'explication du code est dans le commentaire à l'intérieur du code.

flash Partie (Action Script 2)

//function to send invoke .net page to send email 
//use other control/button to call this function 
//important: in order for the 'onLoad' event to work correctly, this function has to be 'Void' 
function sendMail():Void 
{ 
    //show status 
    statusMsg.text = "Sending..."; 

    //create LoadVars object 
    var lv_in:LoadVars = new LoadVars(); 
    var lv_out:LoadVars = new LoadVars(); 

    //set onLoad event 
    lv_in.onLoad = function(success:Boolean) 
    { 
     //if success, meaning data has received from .net page, run this code 
     if (success) 
     { 
      //lv_in.sent is used to parsed out message/data from .Net page 
      statusMsg.text = "Message sent!" + lv_in.sent; 
     } 
     //if fail, run this code 
     else 
     { 
      statusMsg.text = "Error!"; 
     } 
    } 

    //begin invoke .net page to send email 
    lv_out.sendAndLoad("SendMail.aspx", lv_in, "POST"); 
} 

Note importante: La fonction qui contient onLoad événement, dans ce cas fonction sendMail, doit être Void fonction , ce qui signifie qu'il ne retourne pas de valeur. Si cette fonction renvoie la valeur, la fonction sera exécutée sans attendre les données pour les données renvoyées à partir de la page .net, ainsi l'événement onLoad ne sera pas défini correctement.

.Net partie

Je copié le code .Net de l'OP donc en supposant ce code fonctionne en envoyant l'email.

public void ProcessRequest(HttpContext context) 
{ 
    //E-Mail Method   
    string response = "sent=Success&"; 
    MailAddress fromAddress = new MailAddress(context.Request.QueryString["Email"].ToString(), context.Request.QueryString["Name"].ToString()); 
    MailAddress toAddress = new MailAddress("[email protected]", "Goons"); 
    MailMessage message = new MailMessage(fromAddress, toAddress); 
    message.Subject = context.Request.QueryString["Name"].ToString() + " sent you a message from the website."; 
    message.Body = context.Request.QueryString["Msg"].ToString(); 
    SmtpClient client = new SmtpClient("mail.grassrootsdm.com"); 

    // Include credentials if the server requires them. 
    NetworkCredential SMTPUserInfo = new NetworkCredential("mailsenderemail","password"); 
    client.Credentials = SMTPUserInfo; 
    try 
    { 
     client.Send(message); 
    }  
    catch (Exception ex) 
    { 
     response = ex.ToString(); 
    } 

    context.Response.Write(response); 
} 

Note importante: La seule chose que j'ai changé de code .Net de l'OP est le message de réponse. Il était à l'origine "envoyé = succès" que j'ai changé pour "envoyé = succès &". La raison en est, si vous voulez que le script d'action pour analyser le message posté/données de .Net, il s'arrêtera au & symbole, ainsi laisser le reste du message seul et seulement obtenir le message sous envoyé variable .

Questions connexes