NOTÍCIA

Sistema para envio de mensagens SMS (celular)

Neste artigo vamos aprender a
criar um sistema de envio de mensagens SMS para celular,
em ASP.

Este exemplo utiliza a componente de
e-mail e é preciso formatar algumas informações
como número do telefone, além de verificar
se o número de caracteres não ultrapasse o permitido.

Obs. Cada operadora de telefonia
celular tem uma política para envio de SMS.

Os códigos em azul
são em ASP, os que estão em cinza
são HTML↳HTML45 conteúdosA importância do HTML e CSS para quem trabalha com UI Design e Design SystemProduto & UX · dez 2024Como hostear seu site HTML gratuitamente com GitHub PagesDev (Back & Front) · jun 2025SQL Server – Como criar um versionamento de código das suas Stored Procedures em HTML e com comentários da alteraçãoData · nov 2020Ver tudo em Dev (Back & Front) → e Javascript em verde.

Quando formos programar, usaremos como
exemplo a Operadoras de Protugal pois são as
que conseguimos todas as informações (números
possíveis, números de caracteres, etc…)
Depois, basta você ter as informações
das nacionais e substituir.

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.
‘;
} else if (theCheck != ‘R’) { //START NUM CHECKS
theNum = parseFloat(field.value);
if (field.value != ”+theNum) errors += ‘- ‘+field.name+’
must contain a number.
‘;
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+’.
‘;
} } }
else if (theCheck.charAt(0) == ‘R’) errors += ‘- ‘+field.name+’
is required.
‘;
}
if (errors) alert(‘The following error(s) occurred:
‘+
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&ccedil;o
de mensagens escritas atrav&eacute;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"><b><font face="Verdana,
Arial, Helvetica, sans-serif" size="4"
color="#FFFFFF">:.
SMS – Servi&ccedil;o Mensagens Escritas</font></b></td>
</tr>
<tr valign="top">
<td>
<p><font face="Verdana, Arial, Helvetica,
sans-serif" size="2" color="#022941">De:</font><br>
&nbsp;&nbsp;
<input type="text" name="DeNome"
size="40" maxlength="20">
<br>
<font face="Verdana, Arial, Helvetica, sans-serif"
size="2" color="#022941">Para
(n&ordm; de telem&oacute;vel):</font><br>
&nbsp;&nbsp;
<input type="text" name="NumeroTelemovel"
size="9" maxlength="9">
<br>
<font face="Verdana, Arial, Helvetica, sans-serif"
size="2" color="#022941">Mensagem:</font><br>
&nbsp;&nbsp;
<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&eacute;
Barros</a></font></td>
</tr>
</table>
<br>
</body>
</html>

A utilização de JavaScript é apenas
para verificar se os campos estão preenchidos antes
de fazer o post, o que permite poupar algum tempo.

Agora é necessário recolher esta informação
numa outra página e depois "tratá-la".

Continuamos…

Ficheiro: Confirma.asp

<html>
<head>
<%

‘ Dimensionando
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 celular
para onde é 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 a OPTIMUS
‘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
& "."

‘ Atribuimos 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, operadora de Portugal
if OPera=96 then
mailpara=Numero&"@mail.tmn.pt"

‘caso contrário
else

‘Para o caso ser
TELECEL, operadora de Portugal
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 ultrapassado o limite de caracteres
e se o número 
‘ que foi introduzido está correto.
‘ Se estas duas condições estiverem corretas, ótimo,
podemos
‘ prosseguir, caso contrário, teremos que corrigi-las.
%>
</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&ccedil;&atilde;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"><b>:.
Erro</b></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 
‘ correto 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"><b>:.
Erro</b></font></td>
</tr>
<tr>
<td><font color="#022941"><br>
<font face="Verdana, Arial, Helvetica, sans-serif">Este
servi&ccedil;o
s&oacute; est&aacute; dispon&iacute;vel
apenas para redes portuguesas,
<b>Optimus </b>(93 xxx xx xx), <b>Telecel</b>
(91 xxx xx xx),
<b>TMN </b>(96 xxx xx xx).<br>
</font></font><font color="#022941"
face="Verdana, Arial, Helvetica, sans-serif">O
n&uacute;mero que voc&ecirc; 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&atilde;o
&eacute; de nenhum operador, deste modo, n&atilde;o
nos &eacute; poss&iacute;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 correto, o utilizador pode 
‘ agora confirmar o envio ou então voltar para corrigir
algo.
Else

‘ agora criamos
mais um "form" com "Hidden Fields"
isto porque a componente que está instalada
‘no servidor que eu estou 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"><b><font
face="Verdana, Arial, Helvetica, sans-serif"
size="4" color="#FFFFFF">:.
Confirme se &eacute; isto que pretende enviar</font></b></font></td>
</tr>
<tr>
<td><font face="Verdana, Arial, Helvetica,
sans-serif" color="#022941">DE
:<br>
<font size="2">&nbsp;&nbsp;
<%=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">&nbsp;&nbsp;&nbsp;
<%
‘ Aqui dizemos qual aOperadora 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">&nbsp;&nbsp;&nbsp;<%=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&atilde;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>

Para finalizar, vamos enviar a mensagem.
A componente de e-mail existente deverá alterar para
a que você 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&eacute;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&atilde;o
que se segue.<br>
Desde j&aacute; 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>

Um abraço a todos usuários
iMasters e boa programação. Qualquer cosia
que precisarem, estamos por aqui!

Matérias especiais e reportagens conduzidas internamente pela Redação iMasters. Acompanhe no Twitter @imasters e no Instagram/Threads @portalimasters

Mais de Redação iMasters
Ver perfil →