【问题标题】:Can I send SMS Messages from a C# Application?我可以从 C# 应用程序发送 SMS 消息吗?
【发布时间】:2015-09-23 15:21:56
【问题描述】:

我正在寻找一个允许我直接从 C# 应用程序发送 SMS 消息的程序。我打算建立一个“自动约会提醒”系统,该系统会自动向收件人的手机发送 SMS 消息,通知他们即将进行的约会。

由于我在“移动通信”和与桌面应用程序的移动连接方面没有经验,任何人都可以建议我将如何实现此类功能。

我的运营商是 EE(如果这有帮助?)

【问题讨论】:

标签: c# winforms sms desktop-application sms-gateway


【解决方案1】:

大多数主要运营商都提供电子邮件转文本服务。该程序可以使用电子邮件发送 SMS 消息。例如:

发送电子邮件

var message = new MailMessage();
message.From = new MailAddress("sender@foo.bar.com");

message.To.Add(new MailAddress("5551234567@txt.att.net"));//See carrier destinations below
//message.To.Add(new MailAddress("5551234568@txt.att.net"));

//message.CC.Add(new MailAddress("carboncopy@foo.bar.com"));
message.Subject = "This is my subject";
message.Body = "This is the content";

var client = new SmtpClient();
client.Send(message);

承运人目的地

  • ATT:撰写新电子邮件并使用收件人的 10 位无线电话号码,后跟 @txt.att.net。例如,5551234567@txt.att.net。
  • Verizon:同样,##@vtext.com
  • Sprint:##@messaging.sprintpcs.com
  • TMobile:##@tmomail.net
  • 维珍移动:##@vmobl.com
  • Nextel:##@messaging.nextel.com
  • 提升:##@myboostmobile.com
  • Alltel:##@message.alltel.com
  • EE:##@mms.ee.co.uk(可能支持发送而不回复)

替代方案

  • vendors通过API提供短信服务

【讨论】:

  • 感谢您的帖子。我的运营商是 EE?
  • @lloyd - 更新帖子。请参阅this thread 了解更多信息。
  • 所以你必须知道每个实例中文本接收者的运营商?有没有办法根据他们的电子邮件地址来解决这个问题?
  • 无需任何额外依赖即可工作。我可以保证它适用于 Verizon 手机。是的,缺点是您必须知道收件人的运营商。
  • 现在您可以使用 AWS SNS 之类的提供商来避免了解运营商:docs.aws.amazon.com/sns/latest/dg/…
【解决方案2】:

Twilio 有一个C# helper library 可以让您执行此操作。

以下是您需要通过库发送短信的代码:

using System;
using Twilio;
class Example
{
  static void Main(string[] args)
  {
    // Find your Account Sid and Auth Token at twilio.com/user/account
    string AccountSid = "{{ account_sid }}";
    string AuthToken = "{{ auth_token }}";

    var twilio = new TwilioRestClient(AccountSid, AuthToken);
    var message = twilio.SendMessage("+14158141829", "+14159352345", "This text message was sent with code!");

    Console.WriteLine(message.Sid);
  }
}

免责声明:我为 Twilio 工作。

【讨论】:

    【解决方案3】:

    您可以通过多种方式发送短信

    • 使用 GSM 调制解调器
    • 使用网络服务
    • 使用服务提供者提供的端点

    您可以通过下面提供的链接了解以上各点的基本逻辑,并尝试在您的代码中实现。

    http://www.codeproject.com/Articles/19023/Sending-SMS-using-NET

    您需要像这样在表单构造函数中创建一个短信引擎的实例。

      public partial class Form1 : Form
        {
            SMSCOMMS SMSEngine;
    
            public Form1()
            {
    
                        SMSEngine = new SMSCOMMS("COM1");
    
    
    
                InitializeComponent();
                SMSEngine.Open();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
              SMSEngine.SendSMS("919888888888","THIS IS YOUR MESSAGE");
              SMSEngine.Close();
            }
        }
    }
    

    【讨论】:

    • 如果我说实话@BSG 仍然很困惑。代码只是不想工作。你想让我在我的问题中发布我的所有代码吗?
    • 请删除一个在该代码中编写了两次的 SendSMS() 函数。问题是该代码的作者错误地创建了两个具有相同名称的函数。
    • 很好发现@BSG!我把这段代码放在哪里: SMSEngine = new SMSCOMMS("COM1"); SMSEngine.Open(); SMSEngine.SendSMS("919888888888","这是你的消息"); SMSEngine.Close();
    • 如果您正在创建控制台应用程序,您需要创建静态 main 方法中提供的类的实例并调用非静态类成员。请访问此链接,例如 stackoverflow.com/questions/24180470/… 如果您正在创建 Windows 应用程序,则需要在按钮单击事件或其他控件事件上调用该类实例。
    • 我正在创建一个 Windows 应用程序。我已将代码放在 Form1_Load 中,但在 SMSENGINE 上出现错误,表明它在当前上下文中不存在
    【解决方案4】:

    Ozeki 的C# sms api 以事件的形式提供反馈。这很好,因为其他 SMS api-s 不提供传递给手机的报告或任何其他关于您的 SMS 发生情况的真实反馈。这是代码。

    使用系统; 使用 OZX;

    命名空间 OzekiConsoleClient { 课堂节目 { 静态 OzxClient 客户端;

        static void Main(string[] args)
        {
            Client = new OzxClient();
            Client.AutoReconnect = true;
    
            Client.OnMessageAcceptedForDelivery += Client_OnMessageAcceptedForDelivery;
            Client.OnMessageNotAcceptedForDelivery += Client_OnMessageNotAcceptedForDelivery;
            Client.OnMessageSubmitSuccess += Client_OnMessageSubmitSuccess;
            Client.OnMessageSubmitFailed += Client_OnMessageSubmitFailed;
            Client.OnMessageDeliverySuccess += Client_OnMessageDeliverySuccess;
            Client.OnMessageDeliveryFailed += Client_OnMessageDeliveryFailed;
            Client.OnMessageViewed += Client_OnMessageViewed;
            Client.OnConnected += Client_OnConnected;
            Client.OnDisconnected += Client_OnDisconnected;
         
            Client.Connect("127.0.0.1",9580,"testuser","testpass");
        }
        
        static void Client_OnConnected(object sender, EventArgs e)
        {
            Console.WriteLine("Successfully connected.");
             
            var msg = new OzxMessage();
            msg.ToAddress = "+447958448798";
            msg.Text = "Hello world";
    
            Console.WriteLine("Sending message. ID: "+msg.ID);
            Client.Send(msg);
        }
    }
    

    }

    您也可以使用此代码通过 Android 手机发送短信,而不是订阅在线短信服务。

    免责声明:我为 Ozeki 工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2011-03-16
      相关资源
      最近更新 更多