Tak, jak to řešíte nyní, to nepůjde. Tento e-mail totiž funguje tak, že jakmile na něj dorazí zpráva, nějaká běžící služba na tom mailserveru jej prostě ostříhne, přidá ty žvásty na začátku a křížek na konci a pošle, o nic víc se nestará. Jediné, co můžete udělat, je zjistit si jak velká část řetězce se pošle na jednu zprávu, programově svůj text rozdělit, a poslat několik zpráv za sebou. Rozlučte se ale s jejich spojením u příjemce a časovou synchronizací. To umožňuje pouze komerční sms sender, který se dá v Česku koupit u několika firem. Ten vytváří zprávu jako binární stream podle specifikace a tam už je možné navolit si zajímavější věci, jako kódování, spojení několika zpráv (ve skutečnosti je totiž taková sms jeden velký soubor, a ne několik individuálních zpráv spojených nějakým příznakem nebo tak) a můžete využít i službu pojmenovaných příjemců, což funguje tak, že se místo čísla sms brány zobrazí jméno, které si sám určíte i když ho nemá uživatel v seznamu telefonních čísel. Jak vidíte, schopnost spojovat velké SMS zprávy tak není záležitost moderních mobilů, ale je to dáno specifikací protokolu SMS a funguje to stejně i u starých mobilů. Delší zprávy ale používají jistou odrůdu UTF kódování, s kterou můžou mít starší mobily problém, tak se přesto z důvodů zpětné kompatibility ještě stále často využívá ANSI a také se obecně doporučuje to s délkou SMS nepřehánět, protože ačkoliv specifikace stanovuje možnost spojit tuším až 10 zpráv, některých starším mobilům se to nevejde do paměti a odmítnou s takovou zprávou pracovat. (Ovšem těchto mobilů už je asi tak 1% mezi uživateli, takže bych to zase tolik neřešil). EDIT: Jo, a napadla mne ještě jedna věc: Vždycky si lze pořídit nějaký telefon za tisícovku s podnikatelským tarifem, připojit jej přes hyperterminál a posílat smsky tím reálným zařízením a nebo můžete napsal software, který bude dělat to samé se servisním kabelem pomocí AT příkazů. Ale to už je docela jiná legrace. Já jsem si zkusil zrealizovat to co Vy s tím roztříháním zprávy a došel jsem k tomuhle. Smsky chodí překvapivě často ve správném pořadí a prodlevy nebývají nijak hrozné, ale do reálného provozu bych to nenasazoval.
Imports System.Net.Mail
Imports System.Net
Imports System.Runtime.CompilerServices
Public Class Form1
Private Const SmsLength = 43 ' Affected by mail address length
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Send("123456789", "This text won't get to one SMS, because it's too long. But it doesn't matter, because we will split it.")
Me.Close()
End Sub
Private Sub Send([to] As String, sms As String)
Using client = New SmtpClient("smtp.mail.com", 587)
client.Credentials = New NetworkCredential("[email protected]", "password")
For index = 0 To sms.Length Mod SmsLength
client.Send("[email protected]", String.Format("+420{0}@sms.cz.o2.com", [to]), String.Empty, sms.Substring2(index * SmsLength, SmsLength))
Next
End Using
End Sub
End Class
Module ExtensionMethods
<Extension()> _
Public Function Substring2(input As String, index As Integer) As String
If index < 0 Then
Return input.Substring(input.Length + index, -index)
Else
Return input.Substring(index, input.Length - index)
End If
End Function
<Extension()> _
Public Function Substring2(input As String, index As Integer, length As Integer) As String
Dim index2 = index + length
If index2 > input.Length Then
length = input.Length Mod length
End If
Return input.Substring(index, length)
End Function
End Module
|