Как отправить SMS через веб-приложение Asp.net - PullRequest
0 голосов
/ 29 января 2012

Как отправить смс из веб-приложения asp.net?

Нужно ли покупать у любого провайдера?

Есть ли ограничение на количество отправляемых SMS?

Должен ли код отправки SMS записываться в другом потоке, чтобы в случае какого-либо исключения / задержки основной поток не затрагивался?

Кто-нибудь может предоставить пример кода и концепцию его работы?

Ответы [ 3 ]

1 голос
/ 08 сентября 2013

здесь просто сконфигурируйте своего онлайн-провайдера смс * / здесь "way2sms is confiure"

using System; 
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;

namespace SMSAPI
{
class SmsSender
{
void send(string uid, string pwd, string no, string msg)
{
String content = "username="+uid+"&password="+pwd;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://wwwa.way2sms.com/auth.cl");
request.KeepAlive = false;
byte[] byteArray = Encoding.UTF8.GetBytes(content);
CookieContainer cookies = new CookieContainer();
request.CookieContainer = cookies;
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5";
request.ContentLength = byteArray.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "*/*";
request.Referer = "http://wwwg.way2sms.com//entry.jsp";
request.Method = "POST";
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
foreach (Cookie cook in response.Cookies)
{
cookies.Add(cook);
}
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string serverData = reader.ReadToEnd();
reader.Close();
content = "custid=undefined&HiddenAction=instantsms&Action=custfrom450000&login=&pass=&MobNo="+no+"&textArea="+msg;
request = (HttpWebRequest)WebRequest.Create("http://wwwa.way2sms.com/FirstServletsms?custid=");
byteArray = Encoding.UTF8.GetBytes(content);
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5";
request.ContentLength = byteArray.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "*/*";
request.CookieContainer = cookies;
request.Method = "POST";
dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
response = (HttpWebResponse)request.GetResponse();
stream = response.GetResponseStream();
reader = new StreamReader(stream);
serverData = reader.ReadToEnd();
reader.Close();
request = (HttpWebRequest)WebRequest.Create("http://wwwa.way2sms.com/jsp/logout.jsp");
byteArray = Encoding.UTF8.GetBytes(content);
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5";
request.ContentLength = byteArray.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "*/*";
request.CookieContainer = cookies;
request.Method = "POST";
dataStream = request.GetRequestStream();
    dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
response = (HttpWebResponse)request.GetResponse();
stream = response.GetResponseStream();
reader = new StreamReader(stream);
serverData = reader.ReadToEnd();
reader.Close();
}
catch (ArgumentException e)
{
Console.WriteLine("arg exception");
Console.Read();

}
catch (WebException e)
{
Console.WriteLine("web exception");
Console.Read();
}
catch (Exception e)
{
Console.WriteLine("exception");
Console.Read();
}   
}

static void Main(string[] args)
{
    SmsSender sms = new SmsSender();
sms.send("username", "password", "phno_recipient", "message");
}

}
}
1 голос
/ 29 января 2012

Для достижения этой цели вам понадобится какой-нибудь провайдер телефонии. Лично я большой поклонник Twilio . Это очень разумные цены, которые предоставляют API с языковыми оболочками API для конкретного языка . В частности, в .NET есть несколько, включая официальный.

Образцы кода и пошаговые руководства доступны здесь .

Влияние на производительность минимально, поскольку вы по сути создаете сообщение XML, которое передается на конечную точку Twilio. Тяжелая работа с ваших плеч, так как это скорее система передачи и получения сообщений XML.

Надеюсь, это поможет, это очень простая платформа для работы.

0 голосов
/ 24 июля 2017

Я использовал TcpClient, который реализует Disposable и создал SmsHelper класс

public class SmsHelper
{
    public void SendSms(string toNumber, string content)
    {
        bool connected;

        TcpClient smsServer = OpenConnection("xyz.xy.x.xyz", xyzd, out connected);//require ip and port

        if (connected)
        {
            string sms = content; 

            SendSmsToClient(smsServer, Properties.Settings.Default.FromNumber, toNumber, sms);

        }
    }

    protected static TcpClient OpenConnection(string ip, int port, out bool connected)
    {
        string response = string.Empty;
        string message = string.Empty;

        TcpClient tcpClient = new TcpClient();

        try
        {
            ASCIIEncoding ascEn = new ASCIIEncoding();

            tcpClient.Connect(ip, port);

            Stream stream = tcpClient.GetStream();

            byte[] bb = new byte[100];
            stream.Read(bb, 0, 100);

            string connect = ascEn.GetString(bb);

            if (!String.IsNullOrEmpty(connect))
            {
                //authenticating to smsServer
                string str = "action: login\r\nusername: xxxxx\r\nsecret: integration\r\n\r\n";

                byte[] ba = ascEn.GetBytes(str);
                stream.Write(ba, 0, ba.Length);
                stream.Flush();

                byte[] resp = new byte[100];
                stream.Read(resp, 0, 100);
                response = ascEn.GetString(resp);
                stream.Read(resp, 0, 100);
                message = ascEn.GetString(resp);

                if (response.Contains("Success") && message.Contains("Authentication accepted"))
                {
                    Console.WriteLine("Authenticated");
                    stream.Flush();
                    connected = true;
                    return tcpClient;
                }
                else
                {
                    Console.WriteLine("Credentials error Cant Authenticate");
                    tcpClient.Close();
                    connected = false;
                    return tcpClient;
                }
            }

            connected = false;
            return tcpClient;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        connected = false;
        return tcpClient;
    }

    protected static void CloseConnection(TcpClient client)
    {
        client.Close();
        Console.WriteLine("Connection Closed process terminated...");
    }


    protected static void SendSmsToClient(TcpClient client, string fromNumber, string toNumber, string smsBody)
    {
        string response = string.Empty;
        string message = string.Empty;
        string eventMsg = string.Empty;

        ASCIIEncoding asen = new ASCIIEncoding();
        Stream stm = client.GetStream();

        string smsSend = string.Format("action: smscommand\r\ncommand: gsm send sms {0} {1} \r\n\r\n", fromNumber, toNumber);

        byte[] smsCmd = asen.GetBytes(smsSend);

        stm.Write(smsCmd, 0, smsCmd.Length);
        stm.Flush();

        byte[] smsResp = new byte[1000];
        stm.Read(smsResp, 0, 1000);
        response = asen.GetString(smsResp);

        if (!String.IsNullOrEmpty(response))
        {
            stm.Read(smsResp, 0, 1000);
            message = asen.GetString(smsResp);

            if (!String.IsNullOrEmpty(message))
            {
                stm.Read(smsResp, 0, 1000);

                eventMsg = asen.GetString(smsResp);

                if (!String.IsNullOrEmpty(eventMsg))
                {
                    String[] list = eventMsg.Split('\n');

                    foreach (string value in list)
                    {
                        if (value.StartsWith("--END"))
                        {
                            stm.Flush();
                        }
                    }
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...