Hello,
Does anyone have a working code of being able to send MMS (SMS with attachment using multi-part/mixed content?
Similar to
https://developers.ringcentral.com/api-reference/SMS/createSMSMessage
Simiar to
Hello,
Does anyone have a working code of being able to send MMS (SMS with attachment using multi-part/mixed content?
Similar to
https://developers.ringcentral.com/api-reference/SMS/createSMSMessage
Simiar to
I am not an expert on VBA so I cannot help. Not sure anyone else in this community could help you but I recommend you also post your question on stack overflow with more generic to how to post attachment with multi-part/mixed content.
Based on your advise, I have checked in Stackoverflow. I was able to gather up some pieces of information and built the below function. It is working for png, jpeg, .mpeg but failing for .wmv and .mov.
Is the Mime Type I am using wrong for .wmv (video/x-ms-wmv) and .mov(video/x-ms-wmv) ?
I am sure that the file size that I used was small (<500KB).
{
"errorCode" : "InvalidContent",
"message" : "Unsupported attachment media type, attachment [1]: [video2.wmv]",
"errors" : [ {
"errorCode" : "MSG-348",
"message" : "Unsupported attachment media type, attachment [1]: [video2.wmv]",
"attachmentFileName" : "video2.wmv",
"attachmentNumber" : "1"
} ],
"attachmentFileName" : "video2.wmv",
"attachmentNumber" : "1"
}
Function SendSMSWithAttachment(ByVal ToPhone As String, ByVal SMSMessage As String, ByVal StrFilePath As String) As String
'strFilePath is the file to upload (C:My Documents est.zip)
Const MULTIPART_BOUNDARY = "---------------------------0123456789012"
Dim Ado
Dim BytFormData, BytFile
Dim StrFormStart, StrFormEnd, StrFormStartUTF8, StrFormEndUTF8
Dim Web
Dim StrFileField, StrFileExtension, MimeType As String
Dim JSONObject As Object
'Read the file into a byte array
Set Ado = CreateObject("ADODB.Stream")
Ado.Type = 1
Ado.Open
Ado.LoadFromFile StrFilePath
BytFile = Ado.Read
Ado.Close
'Get the File Extension
StrFileExtension = VBA.UCase(Mid(StrFilePath, InStrRev(StrFilePath, ".") + 1))
If ((StrFileExtension = "JPG") Or (StrFileExtension = "JPEG")) Then
MimeType = "image/jpeg"
ElseIf (StrFileExtension = "PNG") Then
MimeType = "image/png"
ElseIf (StrFileExtension = "GIF") Then
MimeType = "image/gif"
ElseIf (StrFileExtension = "BMP") Then
MimeType = "image/bmp"
ElseIf ((StrFileExtension = "TIF") Or (StrFileExtension = "TIFF")) Then
MimeType = "image/tiff"
ElseIf (StrFileExtension = "SVG") Then
MimeType = "image/svg+xml"
ElseIf (StrFileExtension = "3GP") Then
MimeType = "video/3gpp"
ElseIf (StrFileExtension = "MP4") Then
MimeType = "video/mp4"
ElseIf (StrFileExtension = "MPEG") Then
MimeType = "video/mpeg"
ElseIf (StrFileExtension = "FLV") Then
MimeType = "video/x-flv"
ElseIf (StrFileExtension = "WMV") Then
MimeType = "video/x-ms-wmv"
ElseIf (StrFileExtension = "MOV") Then
MimeType = "video/quicktime"
ElseIf (StrFileExtension = "MP3") Then
MimeType = "audio/mpeg3"
ElseIf ((StrFileExtension = "VCF") Or (StrFileExtension = "VCARD")) Then
MimeType = "text/vcard"
ElseIf (StrFileExtension = "ZIP") Then
MimeType = "application/zip"
ElseIf (StrFileExtension = "RTF") Then
MimeType = "application/rtf"
ElseIf (StrFileExtension = "HTML") Then
MimeType = "text/html"
Else
MimeType = "text/html"
End If
'Create the multipart form data.
'Define the end of form
StrFormEnd = vbCrLf & vbCrLf & "--" & MULTIPART_BOUNDARY & "--" & vbCrLf
'First add any ordinary form data pairs
StrFormStart = ""
StrFormStart = StrFormStart & "--" & MULTIPART_BOUNDARY & vbCrLf
StrFormStart = StrFormStart & "Content-Type: application/json; charset=UTF-8" & vbCrLf
StrFormStart = StrFormStart & "Content-Transfer-Encoding: 8bit" & vbCrLf & vbCrLf
StrFormStart = StrFormStart & "{" & Chr(34) & "to" & Chr(34) & ":[{" & Chr(34) & "phoneNumber" & Chr(34) & ": " & Chr(34) & ToPhone & Chr(34) & "}]," & vbCrLf
StrFormStart = StrFormStart & Chr(34) & "text" & Chr(34) & ":" & Chr(34) & SMSMessage & Chr(34) & "," & vbCrLf
StrFormStart = StrFormStart & Chr(34) & "from" & Chr(34) & ":{" & Chr(34) & "phoneNumber" & Chr(34) & ": " & Chr(34) & LoginUserName & Chr(34) & "}}"
StrFormStart = StrFormStart & vbCrLf & vbCrLf
'Now add the header for the uploaded file
StrFileField = Mid(StrFilePath, InStrRev(StrFilePath, "") + 1)
StrFormStart = StrFormStart & "--" & MULTIPART_BOUNDARY & vbCrLf
StrFormStart = StrFormStart & "Content-Type: " & MimeType & vbCrLf
StrFormStart = StrFormStart & "Content-Disposition: attachment; "
StrFormStart = StrFormStart & "filename=""" & StrFileField & """"
StrFormStart = StrFormStart & "Content-Transfer-Encoding: base64"
StrFormStart = StrFormStart & vbCrLf & vbCrLf
BytFormData = StrFormStart & EncodeBase64(BytFile) & StrFormEnd
'Upload it
Set Web = CreateObject("WinHttp.WinHttpRequest.5.1")
Web.Open "POST", SMSURI, False
Web.SetRequestHeader "Content-Type", "multipart/mixed; boundary=" & MULTIPART_BOUNDARY
Web.SetRequestHeader "Authorization", "Bearer " + AccessToken
Web.setTimeouts 300000, 300000, 300000, 3000000
Web.Send BytFormData
If (Web.Status) = 200 Then
Set JSONObject = WebHelpers.ParseJson(Web.responseText)
SendSMSWithAttachment = JSONObject("conversation")("id")
Else
Err.Raise 11041 + vbObjectError, "SendSMSWithAttachment", _
Web.Status & ": " & Web.responseText
End If
End Function
Private Function EncodeBase64(bytes) As String
Dim objXML As msxml2.DOMDocument60
Dim objNode As msxml2.IXMLDOMElement
Set objXML = New msxml2.DOMDocument60
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = bytes
EncodeBase64 = objNode.Text
Set objNode = Nothing
Set objXML = Nothing
End Function
It looks like we don't support .wmv video for outbound MMS. Here are the list of supported mime types for outbound MMS:
images
.jpg / .jpeg => image/jpeg
.png => image/png
.gif => image/gif
.bmp => image/bmp
.svg => image/svg+xml
.tif / .tiff => image/tiff
files
.vcard => vcf/vcard
.gz => application/gzip
.zip => application/gzip
.rtf => application/rtf
audio
.mp3 => audio/mpeg
.m4a => audio/mp4
.arm => audio/amr
video
.mp4 => video/mp4
.mpeg => video/mpeg
.mpg => video/mpeg
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.