[Article 616]Send SMS through bibob with Powershell

I thought I had posted this script more than a year ago, but apparently I have not. It is quite similar to the script, I posted recently sending SMS messages through unwire, this just allows bibob customers to send messages through bibobs online gateway.

One thing to notice is that you are required to convert your password in an MD5 hash, before you send it. Here is a function to convert your plain passwords into an MD5 hash (Adapted from a script by Dennis Damen)

[ps]
Function New-MD5Hash {
param(
[Parameter(Position=0, Mandatory=$true)]
[System.String]
$inputString
)
$cryptoServiceProvider = [System.Security.Cryptography.MD5CryptoServiceProvider];
$hashAlgorithm = new-object $cryptoServiceProvider
$hashByteArray = $hashAlgorithm.ComputeHash($([Char[]]$inputString));
foreach ($byte in $hashByteArray) { if ($byte -lt 16) {$result += “0{0:X}” -f $byte } else { $result += “{0:X}” -f $byte }}
write-host $result
}
[/ps]
Example of usage:

Here is the bibob send sms script.
[ps]
<#
.SYNOPSIS
Send SMS through Bibob (Danish mobile phone company)

.DESCRIPTION
Send SMS Text messages through bibob SMS Gateway services

.PARAMETER Content
The text that the message should contain (Strings above 160 Chars will be split) [Mandatory]

.PARAMETER Recipient
The recipient phonenumber (8 digits) [Mandatory]

.EXAMPLE
PS C:\>Send-SMS -Content "Hello handsome" -Recipient 42424242

.INPUTS
System.String,System.Int32

.OUTPUTS
Sends SMS text message

.NOTES

.LINK
about_functions_advanced

.LINK
about_comment_based_help

#>

function Send-SMS {
[CmdletBinding()]
param(
[Parameter(Position=0, Mandatory=$true)]
[System.String]
$Content= "Hello Handsome",
[Parameter(Position=1)]
[System.Int32]
$Recipient=42424242
)
begin {
If ($Recipient -notmatch ‘^(\d{8})$’ )
{Write-Host "Error in Phone Number"
break
}
$Username = "42424242" # The same as your login to bibob.dk (You cannot spoof you sender number, so it is used as sender as well)
$MD5Password = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

}

process {
$objHTTP = New-Object -ComObject MSXML2.XMLHTTP
$SoapServer = "https://www.bibob.dk/SmsSender.asmx"

$XMLString = @"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SendMessage xmlns="http://www.bibob.dk/">
<cellphone>$Username</cellphone>
<password>$MD5Password</password>
<smsTo>
<string>$recipient</string>
</smsTo>
<smscontents>$content</smscontents>
<fromNumber>$username</fromNumber>
</SendMessage>
</soap:Body>
</soap:Envelope>
"@

$objHTTP.open(‘POST’, $SoapServer, $False)

$objHTTP.setRequestHeader(‘Man’, ‘POST’ + ‘ ‘ + $SoapServer + ‘ HTTP/1.1′)
$objHTTP.setRequestHeader(‘Host’, ‘www.bibob.dk’)
$objHTTP.setRequestHeader(‘Content-Type’, ‘text/xml; charset=utf-8′)
$objHTTP.setRequestHeader(‘Content-Length’, $($XMLString.Length))
$objHTTP.setRequestHeader(‘SOAPAction’, ‘http://www.bibob.dk/SendMessage’)

$objHTTP.send($XMLString)
}
}

[/ps]


One Response to [Article 616]Send SMS through bibob with Powershell

  1. Hi
    I’m from Denmark too, but I will type in english, as it might be a help to others ;)

    Why do you use ‘Man’ in the following line:
    $objHTTP.setRequestHeader(‘Man’, ‘POST’ + ‘ ‘ + $SoapServer + ‘ HTTP/1.1′)

    If you look at this page:
    https://www.bibob.dk/SmsSender.asmx?op=SendMessage
    You will se that only need to add the following:
    POST /SmsSender.asmx HTTP/1.1

    Is ‘Man’ some kine of build in function for powershell?

    The reason why I’m asking, is that I’m trying to port i to c#

    Best Reagards
    Kristian Lauszus