File: D:/hMailServer/Events/EventHandlers - Copy (8).vbs
Option Explicit
' Version 1.11 (29/05/2025)
' (SS,2/9/12) added ProcessWorldPayCallbackFailure, GetAttachmentAsString, GetURL
' removed GetWebPageContents, also added SetLogFileName
' logs now saved in "D:\logs\hMailServer Events\" instead of "D:\hMailServer\Logs\eventlog.txt"
' Also added Option Explicit
' (SS,23/12/14) added Sub ProcessSpamDeletion (global rule: Spam Deletion)
' (SS,20/09/17) added Sub ProcessTransferWisePayment (hyperflight rule for transferwise emails)
' (SS,26/09/17) amended to removed oMessage.HTMLBody from email sent in Sub ProcessTransferWisePayment
' (SS,13/10/17) added removal of comma from amount in Sub ProcessTransferWisePayment
' (SS,27/10/17) added alert to Sub ProcessTransferWisePayment to mark email as alert if payment couldn't be assigned to an order
' (SS,21/10/20) Change to Sub ProcessTransferWisePayment due to slight change in format, i.e. "Amount:" changed to "Amount received:", also added reference field
' (SS,10/08/22) change to Sub ProcessTransferWisePayment to fix incorrect value in Reference field which was result on too long and causin failure when saving in PaymentInfo field in orders table
' also added Const DEBUG_MODE to help with debugging, later replaced with TRANSFERWISE_TEST_EMAIL
' (SS,09/03/23) Changes to Sub ProcessTransferWisePayment to handle new format
' (SS,29/04/25) New Sub GetFromWiseBodyMethodV3 to handle slight change
' Sub OnClientConnect(oClient)
' End Sub
' Sub OnAcceptMessage(oClient, oMessage)
' End Sub
' Sub OnDeliveryStart(oMessage)
' End Sub
' Sub OnDeliverMessage(oMessage)
' End Sub
' Sub OnBackupFailed(sReason)
' End Sub
' Sub OnBackupCompleted()
' End Sub
' Sub OnError(iSeverity, iCode, sSource, sDescription)
' End Sub
' Sub OnDeliveryFailed(oMessage, sRecipient, sErrorMessage)
' End Sub
' Sub OnExternalAccountDownload(oMessage, sRemoteUID)
' End Sub
' (SS,10/8/22) used to send test email to and also for detected debug mode
Const TRANSFERWISE_TEST_EMAIL = "transferwise@ssbsoft.co.uk"
' (SS,2/9/12)
Const LOG_FOLDER = "D:\logs\hMailServer Events\"
Dim NL
NL = Chr(13) + Chr(10)
Dim FLogFileName, FLogText
SetLogFileName "log.txt"
FLogText = ""
' (SS,5/10/07)
Sub ProcessGoogleCheckout(oMessage)
SetLogFileName "google-checkouts.txt" ' (SS,2/9/12)
' (SS,25/2/09) modified hmailserver rules to check for noreply@checkout.google.com in From address
' previously was "Purchase Receipt for Order" in subject
AddLog ""
' (SS,24/10/08) added & oMessage.To to show which email address / site
AddLog "1. ProcessGoogleCheckout called for " & oMessage.To
Dim NL
NL = Chr(13) + Chr(10)
' (SS,22/11/07) removed following check, wasn't working
' check email is from noreply@checkout.google.com i.e. in oMessage.FromAddress
'If oMessage.FromAddress <> "noreply@checkout.google.com" Then
' AddLog "1.1 Process aborted, reply email doesn't match noreply@checkout.google.com"
' Exit Sub
' End If
AddLog "2. Email from " & oMessage.FromAddress
' check subject contains with "Purchase Receipt for Order"
' (SS,25/2/09) removed subject check because it on longer contains 'Purchase Receipt for Order'
'If InStr(1, oMessage.Subject, "Purchase Receipt for Order", 1) = 0 Then
' AddLog "2.1 Process aborted, subject doesn't contain 'Purchase Receipt for Order'"
' Exit Sub
'End If
'AddLog "3. Email subject contains Purchase Receipt for Order"
Dim LPos, LDomain, LCallbackURL, LGoogleOrderNo, LOrderNo, LBuyer, LTotal, LEmailSubject, LBody
' NB. oMessage.Body has HTML tags removed
LGoogleOrderNo = Trim(GetString(oMessage.Subject,"Purchase Receipt for Order #", "", "A"))
' (SS,25/2/09) replaced above with following because subject now contains just the number
' (SS,16/3/09) now copes with both cases, because Google reverted back to previous template
If LGoogleOrderNo = "" Then
LGoogleOrderNo = Trim(oMessage.Subject)
End If
' (SS,16/3/09) added following to show google order no in log
AddLog "3. Email subject contains Google Order No: " & LGoogleOrderNo
' (SS,25/2/09) added following to convert newlines (0D & 0A) to spaces, the original email must be encoded
' the word Order No was being split across two lines, line ending "..Order" and next line starting with "No.."
LBody = ConvertNewlineToSpaces(oMessage.Body)
LOrderNo = Trim(GetString(LBody, "Order No GC#", " ", "A"))
' body must contain "Order No GC#"
If LOrderNo = "" Then
AddLog "3.1 Process aborted, order no missing"
Exit Sub
End If
' (SS,25/2/09) added following to detect cancellation email
If InStr(1, LBody, "Order cancelled", 1) > 0 Then
AddLog "3.2 Process aborted, order was cancelled"
Exit Sub
End If
AddLog "4. Order Number is " & LOrderNo
' (SS,25/2/09) replaced all oMessage.Body with LBody, removed NL replaced with " "
LBuyer = Trim(GetString(LBody, " has just completed a", " ", "B"))
LTotal = Trim(GetString(LBody, " Total: ", " ", "A"))
LTotal = Trim(Replace(LTotal, "=C2=A3", "")) ' remove unicode pound
' remove characters after and including the space
LPos = InStr(1, LTotal, " ", 1)
If LPos > 0 Then LTotal = Mid(LTotal, 1, LPos - 1)
LDomain = Trim(GetString(oMessage.To, "@", ">", "A"))
LCallbackURL = "http://www." & LDomain & "/googlecheckout-callback.asp"
Dim LPostData
LPostData = ""
LPostData = AddPostData(LPostData, "OrderNo", LOrderNo)
LPostData = AddPostData(LPostData, "GoogleOrderNo", LGoogleOrderNo)
LPostData = AddPostData(LPostData, "Buyer", LBuyer)
LPostData = AddPostData(LPostData, "Total", LTotal)
LPostData = AddPostData(LPostData, "EmailSubject", oMessage.Subject)
LPostData = AddPostData(LPostData, "EmailContents", oMessage.Body)
LBody = ""
LBody = LBody + "OrderNo = " & LOrderNo & NL
LBody = LBody + "GoogleOrderNo = " & LGoogleOrderNo & NL
LBody = LBody + "Buyer = " & LBuyer & NL
LBody = LBody + "Total = " & LTotal & NL
LBody = LBody + "To Address = " & oMessage.To & NL
LBody = LBody + "From Address = " & oMessage.FromAddress & NL
LBody = LBody + "Subject = " & oMessage.Subject & NL
LBody = LBody + "CallbackURL = " & LCallbackURL & NL
LBody = LBody + "Email Content = " & oMessage.Body & NL
' (SS,2/9/12) replaced GetWebPageContents(LCallbackURL, LPostData) with GetURL(LCallbackURL & "?" & LPostData)
LBody = LBody + "Callback Content = " & GetURL(LCallbackURL & "?" & LPostData)
AddLog "5. Callback executed: " & LCallbackURLBody & " - " & LPostData
' send the new email message
Dim oNewMessage
Set oNewMessage = CreateObject("hMailServer.Message")
oNewMessage.From = "hMailServer (Google Checkout Event)"
oNewMessage.FromAddress = "googlecheckout@itpartnership.com"
oNewMessage.Subject = "Google Checkout Payment Received for Order " & LOrderNo
oNewMessage.AddRecipient "", oMessage.To
oNewMessage.Body = LBody
oNewMessage.Save
Set oNewMessage = Nothing
AddLog "6. Email sent"
AddLog "7. ProcessGoogleCheckout completed"
End Sub
' (SS,2/9/12)
Sub ProcessWorldPayCallbackFailure(oMessage)
SetLogFileName "worldpay-callback-failures.txt"
AddLog ""
AddLog "1. ProcessWorldPayCallbackFailure"
AddLog "2. Email to " & oMessage.To
AddLog "3. Email from " & oMessage.FromAddress
Dim LTransactionID, LCartID, LInstallationID, LCallbackURL
' NB. oMessage.Body has HTML tags removed
LTransactionID = Trim(GetString(oMessage.Body, "Transaction ID: ", NL, "A"))
LCartID = Trim(GetString(oMessage.Body, "Cart ID: ", NL, "A"))
LInstallationID = Trim(GetString(oMessage.Body, "Installation ID: ", NL, "A"))
LCallbackURL = Trim(GetString(oMessage.Body, "Callback to: ", ": ", "A"))
' (SS,16/3/09) added following to show values in log
AddLog "4. Transaction ID: " & LTransactionID
AddLog "5. Cart ID: " & LCartID
AddLog "6. Installation ID: " & LInstallationID
AddLog "7. Callback URL: " & LCallbackURL
Dim LHost, LQueryString
LHost = ""
LQueryString = ""
If oMessage.Attachments.Count > 0 Then
Dim LAttachmentString
LAttachmentString = GetAttachmentAsString(oMessage.Attachments.Item(0))
AddLog "8.1 Attachment found: " & oMessage.Attachments.Item(0).Filename
LHost = Trim(GetString(LAttachmentString, "Host: ", NL, "A"))
LQueryString = Trim(GetString(LAttachmentString, NL & NL, "", "A")) ' everything after two new lines
End if
AddLog "8.2 Host from attachment: " & LHost
AddLog "8.3 Query String from attachment: " & LQueryString
If LCallbackURL <> "" And LQueryString <> "" Then
AddLog "8.4 Attempting callback to: " & LCallbackURL & "?" & LQueryString
AddLog "8.5 Callback response = " & GetURL(LCallbackURL & "?" & LQueryString)
Else
AddLog "8.4 Nothing to do"
End If
' send email message with log
Dim oNewMessage
Set oNewMessage = CreateObject("hMailServer.Message")
oNewMessage.From = "hMailServer (WorldPay Callback Failure Handler)"
oNewMessage.FromAddress = "worldpaycallbackfailure@itpartnership.com"
oNewMessage.Subject = "WorldPay Callback Failure Handled for " & LHost & " Order " & LCartID
oNewMessage.AddRecipient "", "purchases@itpartnership.com" 'oMessage.To
oNewMessage.Body = FLogText
oNewMessage.Save
Set oNewMessage = Nothing
AddLog "8. Email sent"
AddLog "9. ProcessWorldPayCallbackFailure completed"
End Sub
' (SS,5/10/07) returns part of given string after given string ending at given string
' ADirection can be "A" for after, "B" for before
' e.g. GetString("abc def ghi", "def", "h", "A") returns " g"
' e.g. GetString("abcd def ghi", "def", "bc", "B") returns "d "
' StrComp used for Text comparison to work with unicode strings
Function GetString(ASearchIn, ASearchFor, AEndsWith, ADirection)
Dim LStr, LPos, i, LLenSearchIn, LLenSearchFor, LLenEndsWith
LStr = ""
LPos = InStr(1, ASearchIn, ASearchFor, 1)
If LPos > 0 Then
LLenSearchIn = Len(ASearchIn)
LLenSearchFor = Len(ASearchFor)
LLenEndsWith = Len(AEndsWith)
If ADirection = "A" Then
LPos = LPos + LLenSearchFor
For i = LPos To LLenSearchIn
If LLenEndsWith <> 0 And StrComp(Mid(ASearchIn, i, LLenEndsWith), AEndsWith, 1) = 0 Then
Exit For
End If
LStr = LStr + Mid(ASearchIn, i, 1)
Next
Else
LPos = LPos - 1
For i = LPos To 1 Step -1
If LLenEndsWith <> 0 Then
If i - LLenEndsWith + 1 > 0 Then
If StrComp(Mid(ASearchIn, i - LLenEndsWith + 1, LLenEndsWith), AEndsWith, 1) = 0 Then
Exit For
End If
End If
End If
LStr = Mid(ASearchIn, i, 1) + LStr
Next
End If
End If
' (SS,25/2/09) added following to help with debugging
' (SS,2/9/12) removed debugged
'AddLog "GetString called with ASearchIn=" & ASearchIn & ", ASearchFor=" & ASearchFor & ", AEndsWith=" & AEndsWith & ", ADirection=" & ADirection
'AddLog "GetString returned " & LStr & ", LPos=" & LPos
GetString = LStr
End Function
' (SS,25/2/09)
Function ConvertNewlineToSpaces(AString)
ConvertNewlineToSpaces = Replace(AString, Chr(13) + Chr(10), " ")
End Function
' (SS,10/8/22)
Function ConvertNewlineToSemicolons(AString)
ConvertNewlineToSemicolons = Replace(AString, Chr(13) + Chr(10), "; ")
End Function
' (SS,5/10/07)
Function AddPostData(APostData, AFieldName, AFieldValue)
Dim LPostData
LPostData = APostData
If LPostData <> "" Then LPostData = LPostData & "&"
LPostData = LPostData & AFieldName & "=" & URLEncode(AFieldValue)
AddPostData = LPostData
End Function
' (SS/2/9/12) returns contents of given URL, used to send HTML emails, AURL can contain querystring
Function GetURL(AURL)
Dim LResult, LHttp
LResult = ""
Set LHttp = CreateObject("Msxml2.ServerXMLHTTP.3.0")
LHttp.open "GET", AURL, False
LHttp.send
If LHttp.status <> 200 then
LResult = "Error: " & LHttp.status
Else
LResult = LHttp.responseText
End If
GetURL = LResult
End Function
' (SS,5/10/07) Server.URLEncode doesn't work here (only in for ASP)
' modified to work with scripts (i.e. removed variable types and error handling code)
'**************************************
' Name: URLEncode Function
' Description:Encodes a string to create
' legally formatted
'QueryString For URL. This Function is more flexible
'than the IIS Server.Encode Function because you can
'pass In the WHOLE URL and only the QueryString data
'will be converted. IIS strangely converts EVERYTHING
'(ie "http://" becomes "http%3A%2F%2F").
' By: Markus Diersbock
'
' Inputs:sRawURL - String to Encode
'
' Returns:Encoded String
'
'This code is copyrighted and has' limited warranties.Please see http://w
' ww.Planet-Source-Code.com/vb/scripts/Sho
' wCode.asp?txtCodeId=43806&lngWId=1'for details.'**************************************
Function URLEncode(sRawURL)
Dim iLoop
Dim sRtn
Dim sTmp
Const sValidChars = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:/.?=_-$(){}~&"
If Len(sRawURL) > 0 Then
' Loop through each char
For iLoop = 1 To Len(sRawURL)
sTmp = Mid(sRawURL, iLoop, 1)
If InStr(1, sValidChars, sTmp, vbBinaryCompare) = 0 Then
' If not ValidChar, convert to HEX and p
' refix with %
sTmp = Hex(Asc(sTmp))
If sTmp = "20" Then
sTmp = "+"
ElseIf Len(sTmp) = 1 Then
sTmp = "%0" & sTmp
Else
sTmp = "%" & sTmp
End If
End If
sRtn = sRtn & sTmp
Next
URLEncode = sRtn
End If
End Function
Sub SetLogFileName(AFileName)
FLogFileName = LOG_FOLDER + AFileName
End Sub
' (SS,22/11/07)
Sub AddLog(AMessage)
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(FLogFileName, 8, True)
f.WriteLine(Now & " - " & AMessage)
f.Close
Set f = Nothing
Set fs = Nothing
' add to log text, which may be used in email
If AMessage <> "" Then FLogText = FLogText & Now & " - " & AMessage & NL
End Sub
' (SS,2/9/12) return contents of attachment as string, it has to be saved as file first
Function GetAttachmentAsString(AAttachment)
' save to file
Dim LFileName
LFileName = LOG_FOLDER + AAttachment.Filename
AAttachment.SaveAs(LFileName)
' read from file into string
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(LFileName, 1)
GetAttachmentAsString = f.ReadAll
f.Close
Set f = Nothing
Set fs = Nothing
End Function
' (SS,23/12/14) logs from and to address of the spam email, subject and name of the attached file (added to a Rule via function)
Sub ProcessSpamDeletion(oMessage)
SetLogFileName "spam-deletion.txt"
Dim LAttachmentFilename
If oMessage.Attachments.Count > 0 Then
LAttachmentFilename = oMessage.Attachments.Item(0).Filename
Else
LAttachmentFilename = ""
End if
AddLog "ProcessSpamDeletion, " & oMessage.To & ", " & oMessage.FromAddress & ", " & oMessage.Subject & ", " & LAttachmentFilename
End Sub
' (SS,19/9/19) return contents of given file name as a string
' using this to send a test HTML email from a file (forwarding from Outlook messes up the HTML)
Function GetFileAsString(AFileName)
' read from file into string
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(AFileName, 1)
GetFileAsString = f.ReadAll
f.Close
Set f = Nothing
Set fs = Nothing
End Function
' (SS,20/9/19) writes given string to given file name
Function SaveStringAsFile(AString, AFileName)
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile(AFileName, 2, True)
f.Write AString
f.Close
Set f = Nothing
Set fs = Nothing
End Function
'------------------------------------------
' Following functions TrimAll, TrimChar, TrimChars and NB; moved here from dbfunctions.asp, need TrimAll
' (SS,4/6/07) the ASP Trim function only removes leading and trailing spaces
' created TrimAll which removes spaces and control characters (i.e. the same as Delphi's Trim)
' this was required because at times I also want to remove newlines and carriage returns characters
' if string is null then it's converted to a blank string ""
' (SS,23/6/09) code moved to TrimChars which handles a range of chars
' this routine now calls TrimChars for characters between 0 and 32
Function TrimAll(AString)
TrimAll = TrimChars(AString, Chr(0), Chr(32))
End Function
' (SS,23/6/09) trims given char from string
Function TrimChar(AString, ACharToTrim)
TrimChar = TrimChars(AString, ACharToTrim, ACharToTrim)
End Function
' (SS,23/6/09) trims given chars between AMinChar and AMaxChar from start and end of string
' code taken from TrimAll and modified to trim a range of chars
Function TrimChars(AString, AMinChar, AMaxChar)
Dim LString, LLen, LStart, LEnd, i
LLen = Len(AString)
LString = NB(AString)
If LString = "" Then
TrimChars = ""
Exit Function
End If
For i = 1 To LLen
If (Mid(LString, i, 1)) < AMinChar Or (Mid(LString, i, 1)) > AMaxChar Then
Exit For
End if
Next
LStart = i
LEnd = LLen
For i = LLen To 1 Step -1
If (Mid(LString, i, 1)) < AMinChar Or (Mid(LString, i, 1)) > AMaxChar Then
Exit For
End if
Next
LEnd = i
If LEnd < LStart Then
TrimChars = ""
Else
TrimChars = Mid(LString, LStart, LEnd - LStart + 1)
End If
End Function
' (SS,14/9/06) returns null as "" (i.e. Null as Blank)
Function NB(AValue)
If IsNull(AValue) Then
NB = ""
Else
' (SS,22/5/07) replaced NB = AValue with following to ensure non string is converted to a string
If VarType(AValue) = VBString Then
NB = AValue
Else
NB = CStr(AValue)
End If
End If
End Function
'------------------------------------------
' (SS,19/9/17) handles email from TransferWise to automate bank transfer payments received for HyperFlight orders
' (SS,21/10/20) fixed for change from "Amount:" to "Amount received:", also added "Reference" field
' also changed to sent alert email when amount or currency missing
' (SS,10/08/22) added code for DEBUG_MODE, also fixed issue with Reference value being correct
Sub ProcessTransferWisePayment(oMessage)
' (SS,9/3/23)
Dim VERSION
VERSION = 2
' (SS,10/8/22)
Dim DEBUG_MODE
DEBUG_MODE = InStr(oMessage.To, TRANSFERWISE_TEST_EMAIL) > 0
SetLogFileName "transferwise-payments.txt"
' (SS,25/2/09) modified hmailserver rules to check for noreply@checkout.google.com in From address
' previously was "Purchase Receipt for Order" in subject
AddLog ""
' (SS,10/8/22) if in debug mode then log that we're in this mode
If DEBUG_MODE Then
AddLog "0. In DEBUG MODE" & " (VERSION " & VERSION & ")" ' (SS,9/3/23) added version to check it's running the latest version
End If
AddLog "1. ProcessTransferWisePayment called for: " & oMessage.To
Dim NL
NL = Chr(13) + Chr(10)
AddLog "2. Email from: " & oMessage.FromAddress
' (SS,21/9/17) removed following, causing error because subject contains unicode characters
' AddLog "3. Email subject: " + oMessage.Subject
Dim LPos, LDomain, LCallbackURL, LBuyer, LTotal, LEmailSubject, LBody
' (SS,10/8/22) in debug mode get the content from a specific file, else as before
If DEBUG_MODE Then
'SaveStringAsFile LBody, "d:\temp\testfile.txt"
' when testing, I found that I had to convert the following file to ANSI format
LBody = GetFileAsString("d:\temp\transferwise-test-email.htm")
' SaveStringAsFile LBody, "d:\temp\testfile.txt"
Else
LBody = oMessage.HTMLBody
End If
' (SS,9/3/23) removed LPaymentDetails, moved to GetFromWiseBodyMethodV1
Dim LAmount, LCurrency, LPayerName, LTransferNumber, LReference
LAmount = ""
LCurrency = ""
LPayerName = ""
LTransferNumber = ""
LReference = "" ' (SS,21/10/20)
' (SS,09/03/23) moved code to GetFromWiseBodyMethodV1 (old method)
'GetFromWiseBodyMethodV1 LBody, LAmount, LPayerName, LTransferNumber, LReference
' (SS,09/03/23) V2 to handle the new format
'GetFromWiseBodyMethodV2 LBody, LAmount, LPayerName, LTransferNumber, LReference
' (SS,29/4/25) replaced above with following
GetFromWiseBodyMethodV3 LBody, LAmount, LPayerName, LTransferNumber, LReference
' separate currency from amount
If LAmount <> "" Then
LCurrency = Right(LAmount, 3)
LAmount = Trim(Mid(LAmount, 1, Len(LAmount) - 3))
LAmount = Replace(LAmount, ",", "") ' (SS,13/10/17) remove the comma from thousands
End If
AddLog "3. Amount: " + LAmount + " Currency: " + LCurrency
AddLog "4. Payer Name: " + LPayerName
AddLog "5. Transfer Number: " + LTransferNumber
AddLog "6. Reference: " + LReference ' (SS,10/8/22)
' (SS,21/10/20) move following here from below "If" to work for both condition in email
LBody = ""
LBody = LBody + "Amount = " & LAmount & NL
LBody = LBody + "Currency = " & LCurrency & NL
LBody = LBody + "Payer Name = " & LPayerName & NL
LBody = LBody + "Transfer Number = " & LTransferNumber & NL
LBody = LBody + "Reference = " & LReference & NL ' (SS,10/8/22)
LBody = LBody + "To Address = " & oMessage.To & NL
LBody = LBody + "From Address = " & oMessage.FromAddress & NL
LBody = LBody + "Subject = " & oMessage.Subject & NL
' exit if no amount or currency
' (SS,21/10/20) replaced Exit Sub with Else to allow alert email to be sent if no amount found
If LAmount = "" Or LCurrency = "" Then
AddLog "7. Process aborted, amount or currency missing"
' Exit Sub
' (SS,21/10/20) replaced above with following
LBody = LBody + "No callback done due to missing amount or currency" & NL
LCallbackResult = ""
Else
LDomain = Trim(GetString(oMessage.To, "@", ">", "A"))
' (SS,10/08/22) added If DEBUG_MODE Then, for different behaviour in debug mode
' (SS,09/03/23) changed debug URL from "https://hyperflight.itpartnership.com" to "https://dev.hyperflight.co.uk"
If DEBUG_MODE Then
LCallbackURL = "https://dev.hyperflight.co.uk"
Else
LCallbackURL = "https://www." & LDomain
End If
LCallbackURL = LCallbackURL & "/transferwise-callback.asp"
Dim LPostData, LCallbackResult
LPostData = ""
LPostData = AddPostData(LPostData, "Amount", LAmount)
LPostData = AddPostData(LPostData, "Currency", LCurrency)
LPostData = AddPostData(LPostData, "PayerName", LPayerName)
LPostData = AddPostData(LPostData, "TransferNumber", LTransferNumber)
LPostData = AddPostData(LPostData, "Reference", LReference) ' (SS,21/10/20)
' (SS,21/10/20) moved some of the LBody code from here to above
LBody = LBody + "Callback URL = " & LCallbackURL & NL
LCallbackResult = GetURL(LCallbackURL & "?" & LPostData)
LBody = LBody + "Callback Response = " & NL & LCallbackResult & NL
' (SS,26/9/17) removed following and renamed "Callback Content" to "Callback Response" above, also removed
'LBody = LBody + "Email Content = " & NL & NL & oMessage.HTMLBody
' (SS,10/8/22) added ConvertNewlineToSemicolons to following, to keep all text on same line
AddLog "7. Callback executed and returned: " & ConvertNewlineToSemicolons(LCallbackResult)
End If
' send the new email message
Dim oNewMessage
Set oNewMessage = CreateObject("hMailServer.Message")
oNewMessage.From = "hMailServer (TransferWise Payment Event)"
oNewMessage.FromAddress = "transferwise@itpartnership.com"
' (SS,27/10/17) added following if, to mark as "ALERT!!!" if payment couldn't be applied
Dim LSubject
LSubject = "TransferWise Payment Received (" & LTransferNumber & ")"
If InStr(LCallbackResult, "Payment succesfully applied") = 0 Then
LSubject = "ALERT!!! " + LSubject
oNewMessage.HeaderValue("X-Priority") = "1" ' mark as high importance
End If
oNewMessage.Subject = LSubject
' (SS,10/8/22) added If Not DEBUG_MODE Then to only send to this address in live mode
If Not DEBUG_MODE Then
oNewMessage.AddRecipient "", "neil@hyperflight.co.uk" ' (SS,21/9/17) oMessage.To doesn't work because it contains name as well
End If
oNewMessage.AddRecipient "", "contactforms@itpartnership.com"
oNewMessage.Body = LBody
oNewMessage.Save
Set oNewMessage = Nothing
AddLog "8. Email sent"
AddLog "9. ProcessTransferWisePayment completed"
End Sub
' (SS,9/3/23) code moved here from ProcessTransferWisePayment above, L prefix changed to A prefix for variable name
Sub GetFromWiseBodyMethodV1(ABody, ByRef AAmount, ByRef APayerName, ByRef ATransferNumber, ByRef AReference)
Dim LPaymentDetails
' try email format for EUR payments
LPaymentDetails = Trim(GetString(ABody, "Payment details</h5>", "</dl>", "A"))
If LPaymentDetails <> "" Then
' LAmount = Trim(GetString(LPaymentDetails, "<dt>Amount:</dt>", "</dd>", "A"))
' (SS,21/10/20) replaced "Amount:" with "Amount received:", it had stopped working, last worked 13/10/2020
AAmount = Trim(GetString(LPaymentDetails, "<dt>Amount received:</dt>", "</dd>", "A"))
AAmount = Trim(GetString(AAmount, "<dd>", "</dd>", "A"))
APayerName = Trim(GetString(LPaymentDetails, "<dt>From:</dt>", "</dd>", "A"))
APayerName = Trim(GetString(APayerName, "<dd>", "</dd>", "A"))
ATransferNumber = Trim(GetString(LPaymentDetails, "<dt>Transfer Number:</dt>", "</dd>", "A"))
ATransferNumber = Trim(GetString(ATransferNumber, "<dd>", "</dd>", "A"))
' (SS,21/10/20) noticed they now have the reference field, now added
'LReference = Trim(GetString(LPaymentDetails, "<dt>Reference:</dt>", "</dd>", "A"))
' (SS,10/8/22) replaced above with following to fix issue
AReference = Trim(GetString(LPaymentDetails, "<dt>Reference:</dt>", "</dd>", "A"))
AReference = Trim(GetString(AReference, "<dd>", "</dd>", "A"))
Else
' try email format for USD payments
LPaymentDetails = Trim(GetString(ABody, "<strong>Amount:</strong>", "</tbody>", "A"))
AAmount = TrimAll(GetString(LPaymentDetails, "-webkit-text-size-adjust:100%;"">", "</td>", "A"))
APayerName = Trim(GetString(LPaymentDetails, "<strong>From:</strong>", "</tr>", "A"))
APayerName = TrimAll(GetString(APayerName, "-webkit-text-size-adjust:100%;"">", "</td>", "A"))
ATransferNumber = Trim(GetString(LPaymentDetails, "<strong>Transfer Number:</strong>", "</tr>", "A"))
ATransferNumber = TrimAll(GetString(ATransferNumber, "-webkit-text-size-adjust:100%;"">", "</td>", "A"))
End If
End Sub
' (SS,9/3/23) V2 for new format
Sub GetFromWiseBodyMethodV2(ABody, ByRef AAmount, ByRef APayerName, ByRef ATransferNumber, ByRef AReference)
Dim LPaymentDetails
LPaymentDetails = Trim(GetString(ABody, "Payment details</div>", "</table>", "A"))
AAmount = Trim(GetString(LPaymentDetails, ">Amount received:</div>", ">Reference:</div>", "A"))
AAmount = Trim(GetString(AAmount, "</div>", ">", "B"))
APayerName = Trim(GetString(LPaymentDetails, ">From:</div>", ">Amount received:</div>", "A"))
APayerName = Trim(GetString(APayerName, "</div>", ">", "B"))
ATransferNumber = Trim(GetString(LPaymentDetails, ">Transfer Number:</div>", "</tbody>", "A"))
ATransferNumber = Trim(GetString(ATransferNumber, "</div>", ">", "B"))
AReference = Trim(GetString(LPaymentDetails, ">Reference:</div>", ">Transfer Number:</div>", "A"))
AReference = Trim(GetString(AReference, "</div>", ">", "B"))
End Sub
' (SS,29/5/25) V3 for new format, slight change with <mj-raw></mj-raw> in the content
Sub GetFromWiseBodyMethodV3(ABody, ByRef AAmount, ByRef APayerName, ByRef ATransferNumber, ByRef AReference)
Dim LPaymentDetails
LPaymentDetails = Trim(GetString(ABody, "Payment details</div>", "</table>", "A"))
' (SS,29/4/25) following is new, trying two other ways
If LPaymentDetails = "" Then
LPaymentDetails = Trim(GetString(ABody, "<!-- Payment details -->", "</table>", "A"))
If LPaymentDetails = "" Then
LPaymentDetails = Trim(GetString(ABody, "Payment details", "</table>", "A"))
End If
End If
AAmount = Trim(GetString(LPaymentDetails, ">Amount received:</div>", ">Reference:</div>", "A"))
AAmount = Trim(GetString(AAmount, "</div>", ">", "B"))
'APayerName = Trim(GetString(LPaymentDetails, ">From:</div>", ">Amount received:</div>", "A"))
'APayerName = Trim(GetString(APayerName, "</div>", ">", "B"))
APayerName = Trim(GetString(LPaymentDetails, ">From:</div>", ">Amount received:</div>", "A"))
' (SS,29/4/25) replaced Trim with TrimAll, to also remove newlines, also replaced </div> with <mj-raw></mj-raw>"
APayerName = TrimAll(GetString(APayerName, "<mj-raw></mj-raw>", "<mj-raw></mj-raw>", "A"))
ATransferNumber = Trim(GetString(LPaymentDetails, ">Transfer Number:</div>", "</tbody>", "A"))
ATransferNumber = Trim(GetString(ATransferNumber, "</div>", ">", "B"))
AReference = Trim(GetString(LPaymentDetails, ">Reference:</div>", ">Transfer Number:</div>", "A"))
AReference = Trim(GetString(AReference, "</div>", ">", "B"))
End Sub
' (SS,10/8/22) following is used for testing Sub ProcessTransferWisePayment
Sub SendTestEmail(oMessage)
Dim LBody
'LBody = GetFileAsString("D:\Temp\testemail.txt")
LBody = GetFileAsString("D:\Temp\transferwise-test-email.htm")
'SendEmail "Surinder", "transferwise@ssbsoft.co.uk", "hMailServer SendTestEmail Event", "hmailserver@itpartnership.com", "Just testing", LBody, True
' (SS,10/8/22) replaced above with following
SendEmail "TransferWise Test", TRANSFERWISE_TEST_EMAIL, "hMailServer SendTestEmail Event", "hmailserver@itpartnership.com", "Just testing TransferWise", LBody, True
AddLog "SendTestEmail called. Debug Mode: " & DEBUG_MODE ' (SS,10/8/22)
End Sub
' (SS,19/9/17) send given email
Sub SendEmail(AToName, AToAddress, AFromName, AFromAddress, ASubject, ABody, AIsHTML)
Dim oNewMessage
Set oNewMessage = CreateObject("hMailServer.Message")
' (SS,10/8/22) added & "<" & AFromAddress & ">" because address was not appearing in the "From" field in an email
' later reverted back, don't need a reply address because it's not applicable
' oNewMessage.From = AFromName & "<" & AFromAddress & ">"
oNewMessage.From = AFromName
oNewMessage.FromAddress = AFromAddress
oNewMessage.Subject = ASubject
oNewMessage.AddRecipient AToName, AToAddress
If AIsHTML Then
oNewMessage.HTMLBody = ABody
Else
oNewMessage.Body = ABody
End If
oNewMessage.Save
Set oNewMessage = Nothing
End Sub