|
|
|
|
|
Dicas
|
|
ASP - Active Server Page (Miscelâneas)
|
|
|
Título da Dica: Envio de Mensagens para telemóveis através de SMS usando ASP
|
|
|
|
Postada em 23/10/2003 por ^HEAVY-METAL^
Em Portugal este processo apareceu desde cedo. O exemplo que eu vos apresento, utiliza a componente de e-mail, mas para isso é necessário formatar as diversas informações, tais como: n.º de telemóvel, pois os processos são distintos para cada operador, e verificar se o campo de mensagens não ultrapassa um número mínimo de caracteres.
Comecemos pelo form: (Cores: ASP HTML JavaScript )
ficheiro : Default.htm
<Html> <Head> <Script language="JavaScript"> <!-- function MM_validateForm() { //v2.0 var i,objStr,field,theCheck,atPos,theNum,colonPos,min,max,errors=''; for (i=0; i<(MM_validateForm.arguments.length-2); i+=3) { objStr = MM_validateForm.arguments[(navigator.appName == 'Netscape')?i:i+1]; if ((objStr.indexOf('document.layers[')==0 && document.layers==null) || (objStr.indexOf('document.all[') ==0 && document.all ==null)) objStr = 'document'+objStr.substring(objStr.substring(0,objStr.lastIndexOf('.')). lastIndexOf('.'),objStr.length); //fix layer ref if not supp field = eval(objStr); field.name = (field.name)?field.name:objStr; theCheck = MM_validateForm.arguments[i+2]; if (field.value) { //IF NOT EMPTY FIELD if (theCheck.indexOf('isEmail') != -1) { //CHECK EMAIL atPos = field.value.indexOf('@'); if (atPos < 1 || atPos == (field.value.length - 1)) errors += '- '+field.name+' must contain an e-mail address.\n'; } else if (theCheck != 'R') { //START NUM CHECKS theNum = parseFloat(field.value); if (field.value != ''+theNum) errors += '- '+field.name+' must contain a number.\n'; if (theCheck.indexOf('inRange') != -1) { //CHECK RANGE colonPos = theCheck.indexOf(':'); min = theCheck.substring(8,colonPos); max = theCheck.substring(colonPos+1,theCheck.length); if (theNum < min || max < theNum) //bad range errors += '- '+field.name+' must contain a number between '+min+' and '+max+'.\n'; } } } else if (theCheck.charAt(0) == 'R') errors += '- '+field.name+' is required.\n'; } if (errors) alert('The following error(s) occurred:\n'+ errors); document.MM_returnValue = (errors == '') } //--> </script> </head> <body bgcolor="#ffffff" link="#022941" vlink="#FFFFFF" alink="#FFFFFF"> <table width="790" border="0" cellspacing="0" cellpadding="0" height="100%" align="center" vspace="0" hspace="0"> <tr align="center"> <th height="38" valign="top"><font face="Verdana, Arial, Helvetica, sans-serif" size="5" color="#022941">Serviço de mensagens escritas através de e-mail</font></th> </tr> <tr align="center"> <td height="306" valign="top"> <form method="post" action="confirma.asp" name="SMS" onSubmit="MM_validateForm('document.SMS.DeNome', 'document.SMS.DeNome','R','document.SMS.NumeroTelemovel', 'document.SMS.NumeroTelemovel','RinRange910000000:969999999', 'document.SMS.Mensagem','document.SMS.Mensagem','R');return document.MM_returnValue"> <table border="0" cellspacing="2" cellpadding="2"> <tr bgcolor="#022941"> <td width="500"><font face="Verdana, Arial, Helvetica, sans-serif" size="4" color="#FFFFFF">:. SMS - Serviço Mensagens Escritas</font></td> </tr> <tr valign="top"> <td> <p><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#022941">De:</font><br> <input type="text" name="DeNome" size="40" maxlength="20"> <br> <font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#022941">Para (nº de telemóvel):</font><br> <input type="text" name="NumeroTelemovel" size="9" maxlength="9"> <br> <font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#022941">Mensagem:</font><br> <textarea name="Mensagem" cols="40" rows="4"></textarea> </p> </td> </tr> <tr bgcolor="#022941"> <td> <input type="submit" name="Submit" value=" Enviar "> <input type="reset" name="Submit2" value=" Limpar "> </td> </tr> </table> </form> </td> </tr> <tr align="left"> <td height="33"><font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#022941">Por: <a href="mailto:josebarros@netytal.pt">José Barros</a></font></td> </tr> </table> <br> </body> </html>
Nota: a utilização de JavaScript, serve apenas para verificar se os campos estão preenchidos antes de fazer o post (este utilitário está incluído no Dreamweaver 2.0, ou superior), o que permite poupar algum tempo.
Agora é necessário recolher esta informação numa outra página e depois "tratá-la".
ficheiro : Confirma.asp
<html> <head> <%
' Dimensionemos as constantes. dim denome dim Numero dim mensagem dim errol dim contagem dim NumeroErrado dim assunto dim mailpara
' Através deste passo recolhemos os dados do formulário
' O nome de quem envia: denome = Request.form("DeNome")
' O número do telemóvel para quem é enviada a mensagem: Numero = Request.form("NumeroTelemovel")
' isto é para que o número passe de página para página... session("Numero")=Numero
' Mensagem a enviar Mensagem = Request.form("Mensagem")
' Vamos verificar se foi ultrapassado o limite de carateres. ' Eu usei 500 pois sou cliente OPTIMUS e sei que o meu 'operador aceita até 640 caracteres. ' Para que o serviço funcione pode-se diminuir de valor... contagem=len(mensagem)
' Os valores do goby serão referenciados de seguida. If contagem>=500 Then goby="0" else goby="1" End If
' O assunto (Subject) assunto="Mensagem enviada por " & denome & "."
' Atribui-se já um valor para a constante NBumeroErrado, caso o 'número não comece por 91, 93 ou 96. NumeroErrado="0"
'Opera = aos primeiros 2 dígitos do número. OPera=midB(Numero,1,3)
'Para o caso o número ser OPTIMUS if OPera=93 then mailpara=Numero&"@sms.optimus.pt"
'caso contrário else
'para o caso seja TMN if OPera=96 then mailpara=Numero&"@mail.tmn.pt"
'caso contrário else
'Para o caso ser TELECEL if OPera=91 then mailpara=Numero&"@sms.telecel.pt" 'Caso não seja de nenhum, existe um erro, o número introduzido é errado... else NumeroErrado="1" end if
end if
end if
' Já temos valores para apresentar resultados ' Já sabemos se foi excedido o limite de caracteres e se o número ' que foi introduzido, está correcto. ' Se estas duas condições estiverem correctas, óptimo, podemos ' prosseguir, caso contrário, teremos de as corrigir. %> </head> <body bgcolor="#ffffff" link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF"> <table width="100%" border="0" cellspacing="0" cellpadding="0" height="100%" align="center" vspace="0" hspace="0"> <tr valign="top" align="center"> <td> <table width="500" border="0" cellspacing="0" cellpadding="0" height="100%"> <tr align="center"> <td width="600" rowspan="3" height="100%" valign="top"> <font face="Verdana, Arial, Helvetica, sans-serif" size="5" color="#022941">Confirmação</font><br> <br> <% ' Caso o goby seja "0", significa que foi ultrapassado o limite de caracteres... if goby="0" then %> <table width="100%" border="0" cellspacing="2" cellpadding="2"> <tr bgcolor="#022941"> <td><font face="Verdana, Arial, Helvetica, sans-serif" size="4" color="#FFFFFF">:. Erro</font></td> </tr> <tr> <td height="57"><font color="#022941"><font face="Verdana, Arial, Helvetica, sans-serif">O campo da mensagem não pode conter mais do que 500 caracteres. </font></font></td> </tr> <tr bgcolor="#022941"> <td> <input type="submit" name="Submit3" value=" <<-- Retroceder " onClick="parent.history.back(); return false;"> </td> </tr> </table> <% ' Caso contrário, goby >< 0, passemos à fase seguinte, número ' correcto ou número errado? else
' Caso o número esteja errado: if NumeroErrado="1" then %> <table width="100%" border="0" cellspacing="2" cellpadding="2"> <tr bgcolor="#022941"> <td><font face="Verdana, Arial, Helvetica, sans-serif" size="4" color="#FFFFFF">:. Erro</font></td> </tr> <tr> <td><font color="#022941"><br> <font face="Verdana, Arial, Helvetica, sans-serif">Este serviço só está disponível apenas para redes portuguesas, Optimus (93 xxx xx xx), Telecel (91 xxx xx xx), TMN (96 xxx xx xx).<br> </font></font><font color="#022941" face="Verdana, Arial, Helvetica, sans-serif">O número que você introduziu (</font><font color="#022941"><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><%=session("Numero")%></font></font><font color="#022941" face="Verdana, Arial, Helvetica, sans-serif">),
não é de nenhum operador, deste modo, não nos é possível entregar a sua mensagem.</font><br> </td> </tr> <tr bgcolor="#022941"> <td> <input type="submit" name="Submit33" value=" <<-- Retroceder " onClick="parent.history.back(); return false;"> </td> </tr> </table> <font color="#022941"> </font> <%
' Se chegamos a este ponto, está todo correcto, o utilizador pode ' agora confirmar o envio, o então retroceder para corrigir algo. Else
' agora criamos mais um "form" com "Hidden Fields" isto porque a componente que está instalado 'no servidor que eu estou a usar presentemente, só aceita dados já atribuídos ou através de 'um "form", não aceita variáveis... %> <form method="post" action="SMSsend.asp" name="SMSsend"> <table width="100%" border="0" cellspacing="2" cellpadding="2"> <tr bgcolor="#022941"> <td><font color="#022941"><font face="Verdana, Arial, Helvetica, sans-serif" size="4" color="#FFFFFF">:. Confirme se é isto que pretende enviar</font></font></td> </tr> <tr> <td><font face="Verdana, Arial, Helvetica, sans-serif" color="#022941">DE :<br> <font size="2"> <%=denome%> </font><br> <input type="hidden" name="denome" value="<%=denome%>"> </font></td> </tr> <tr> <td><font face="Verdana, Arial, Helvetica, sans-serif" color="#022941">Para : <br> <font size="2"> <% ' Aqui dizemos qual o Operador móvel em questão. Response.Write session("Numero")
if MidB(session("Numero"),1,3)=93 then Response.Write(" ( OPTIMUS )") end if if MidB(session("Numero"),1,3)=96 then Response.Write(" ( TMN )") end if if MidB(session("Numero"),1,3)=91 then Response.Write(" ( TELECEL )") end if %></font><br>
<input type="hidden" name="NomePara" value="<%=session("Numero")%>"> <br> <input type="hidden" name="emailpara" value="<%=mailpara%>"> </font></td> </tr> <tr> <td><font face="Verdana, Arial, Helvetica, sans-serif" color="#022941"> <input type="hidden" name="assunto" value="<%=assunto%>"> </font></td> </tr> <tr> <td><font face="Verdana, Arial, Helvetica, sans-serif" color="#022941">Mensagem: <br> <font size="2"> <%=Mensagem%></font><br> <input type="hidden" name="Mensagem" value="<%=Mensagem2%>"> </font></td> </tr> <tr bgcolor="#022941"> <td> <input type="submit" name="Submit" value=" Sim, enviar. "> <input type="submit" name="Submit32" value=" Não, retroceder. " onClick="parent.history.back(); return false;"> </td> </tr> </table> </form> <p> <%
' Fechamos os IF's...
end if end if %> </td> </tr> <tr></tr> <tr> </tr> </table> </td> </tr> </table> <br> </body> </html>
Por último vamos enviar a mensagem.... A componente de e-mail existente, é a que eu uso, deverá alterar para a que usa... O processo é semelhante.
ficheiro : SMSsend.asp
<html> <head> <title>SMSsend.asp</title></head> <body bgcolor="#ffffff" link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF"> <table width="100%" border="0" cellspacing="0" cellpadding="0" height="100%" align="center" vspace="0" hspace="0"> <tr valign="top" align="center"> <td> <table width="500" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="600" height="100%" valign="top"> s </td> </tr> <tr> <td width="600" height="100%" valign="top"> <p><font color="#022941"><br> <%
Set Mailer = Server.CreateObject("SMTPsvg.Mailer") Mailer.FromName = "Nome" Mailer.FromAddress= "email@host.pt" Mailer.RemoteHost = "O seu host: ex.: mail.host.pt " Mailer.Priority = 1 Mailer.AddRecipient Request.Form("NomePara"), Request.Form("emailpara") Mailer.Subject = Request.Form("assunto") Mailer.BodyText = Request.Form("mensagem")
if Mailer.SendMail then msgenv=1 else msgenv=0 errol=Chr(34)& Mailer.Response &Chr(34) end if
if msgenv=1 then %> <br> <font face="Verdana, Arial, Helvetica, sans-serif" size="3"> A sua mensagem foi enviada com sucesso para o n.º <%=session("Numero")%>.<br> Aproveite também para <a href="default.htm"><font size="3"><u>enviar</u></font></a> a outra pessoa.<br> </font><font color="#022941"> <% else
%> </font></font></p> <form method="post" action="mailto:webmaster@netytal.pt?subject: Erro no envio de SMS" name="SMS2"> <font color="#022941"><font face="Verdana, Arial, Helvetica, sans-serif" size="3">Ocorreu um erro ao enviar a mensagem.<br> O erro foi:</font><font color="#022941"><%=errol%></font><font face="Verdana, Arial, Helvetica, sans-serif">.<br> Se este erro persistir reporte-o ao webmaster, usando o botão que se segue.<br> Desde já obrigado.<br> <input type="hidden" name="Erro" value="<%=errol%>"> <br> <input type="submit" name="Submit" value=" Notificar webmaster "> </font>.</font> <br> </form> <% end if
' Muito importante !!! convém ter isto no final, pois assim acaba com qualquer sessão !! e liberta o servidor... session.abandon %> </td> </tr> </table> </td> </tr> </table> <br> </body> </html>
T+,
|
|
|
|
|