如何使用asp.net和c#从Web应用程序发送短信到手机?

如何使用asp.net和c#从Web应用程序向手机发送短信?

大多数运营商提供电子邮件后缀,可用于通过电子邮件发送短信。 通常:

[PhoneNumber]@[Suffix] 

您可以联系各个运营商以获取其后缀,但这里有一个列表(大多数北美航空公司)可以帮助您入门:

 Name Gateway 7-11 Speakout @cingularme.com Alaska Communications Systems @msg.acsalaska.com Alltel Wireless @message.alltel.com American Messaging @amsmsg.net AT&T Enterprise Paging @page.att.net AT&T Mobility @cingularme.com AT&T Wireless @txt.att.net BeepOne @beepone.net Bell Mobility & Solo Mobile @txt.bell.ca Boost Mobile @myboostmobile.com Cellular One @mobile.celloneusa.com Cellular South @csouth1.com Centennial Wireless @cwemail.com Cingular @cingularme.com Cricket @mms.mycricket.com Fido @fido.ca Globalstar @msg.globalstarusa.com Helio @myhelio.com Illinois Valley Cellular @ivctext.com Indiana Paging Network @ipnpaging.com Iridium @msg.iridium.com MetroPCS @mymetropcs.com MTS @text.mtsmobility.com Ntelos @nteloswireless.com Page1 @page1email.com President's Choice @txt.bell.ca ProPage Inc. @page.propage.net Qwest @qwestmp.com Rogers @pcs.rogers.com Rogers Paging @paging.rogers.com Sasktel @sms.sasktel.com Shentel @shentel.net Sprint (Nextel) @page.nextel.com Sprint (PCS) @messaging.sprintpcs.com Suncom @tms.suncom.com T-Mobile @tmomail.net Telus Mobility @msg.telus.com Thumb Cellular @sms.thumbcellular.com Tracfone @cingularme.com Unicel @utext.com US Cellular @email.uscc.net USA Mobility @usamobility.net Verizon @vtext.com Virgin Mobile (Canada) @vmobile.ca Virgin Mobile (USA) @vmobl.com 

可在此处找到更全面的列表: http : //en.wikipedia.org/wiki/List_of_carriers_providing_SMS_transit

这种方法要求您的用户在输入他们的号码时指定他们的手机载体,但是您可以免费发送这些文本(从您的角度来看),就像在.NET中发送电子邮件一样。

作为旁注,主题行并不总是正确解释。 大多数运营商只是将电子邮件转换为短信,如[Subject] [Body]但有些人完全放弃主题。

也有公司提供这项服务(当然是收费)。 最明显的是Twilio,但快速谷歌搜索应该会找到更多。

我推荐Twilio 。 您不必知道您的用户拥有哪个运营商,也不必担心他们以后会切换运营商并且他们从未接收过他们的文本。 使用Twilio,您可以处理更多逻辑,例如发送文本以询问问题并要求他们发回“y”或“n”。 它也可以用来打电话。 还支持C#和其他语言。

但是,每个文本花费一分钱 – 所以它不是免费的!
但是如果你的要求是这样的并且口袋足够深,可以处理便士文本,那么我会推荐它们。 我没有发现任何更便宜的东西,他们预先给你信用,所以你可以测试它而不花任何成本。 这都是付费的,所以如果你有30美元的信用额度,你不必担心看到1000美元的账单,如果你炸毁每个人的蜂鸣器,或者这些天孩子们正在使用的东西。

这只是另一种发送我有过良好体验的文本的方式,并且值得注意。
我知道每个人都喜欢免费。

根据ChrisKent的回答,您可以发送如下电子邮件:

 MailMessage mail = new MailMessage(); SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com"); mail.From = new MailAddress("your_email_address@gmail.com"); mail.To.Add("2128675309@cingularme.com"); mail.Subject = "Test Mail"; mail.Body = "This is for testing SMTP mail from GMAIL"; SmtpServer.Port = 587; SmtpServer.Credentials = new System.Net.NetworkCredential("username", "password"); SmtpServer.EnableSsl = true; SmtpServer.Send(mail); MessageBox.Show("mail Send"); 

但是,如果我没记错的话,以这种方式发送的短信不会100%保证显示(虽然很可能)

我使用了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(); } } } } } } }