4 Byte UTF8 fix.

Use this forum if you have problems with a hMailServer script, such as hMailServer WebAdmin or code in an event handler.
Post Reply
User avatar
SorenR
Senior user
Senior user
Posts: 6308
Joined: 2006-08-21 15:38
Location: Denmark

4 Byte UTF8 fix.

Post by SorenR » 2015-03-04 19:27

When using hMailServer older than Version 5.5 AND enabling indexing, one may see occational SQL errors when storing "Subject:" strings.

One solution is to upgrade to latest hMailServer AND use MySQL version 5.5.3 or later.

Another solution could be running a script to eliminate those pesky Emoji's.

Subject, From, To and CC can all be UTF8 coded in emails AND all are used for indexing, thus all four headers are included in this script snippet.

Code: Select all

   Sub OnAcceptMessage(oClient, oMessage)
         Call FixEmojis(oMessage)
   End Sub


   Sub FixEmojis(oMessage)
      Dim strValue, strEmoji, ECFlag, SFlag : SFlag = False
      ECFlag = oMessage.EncodeFields
      oMessage.EncodeFields = False

      ' Subject: - header
      If (InStr(oMessage.Subject, "=F0=9F=") > 0) Then
         strEmoji = Mid(oMessage.Subject, InStr(oMessage.Subject, "=F0=9F="), 12)
         strValue = Replace(oMessage.Subject, strEmoji, "")
         oMessage.Subject = strValue
         SFlag = True
      End If

      ' From: - header
      If (InStr(oMessage.From, "=F0=9F=") > 0) Then
         strEmoji = Mid(oMessage.From, InStr(oMessage.From, "=F0=9F="), 12)
         strValue = Replace(oMessage.From, strEmoji, "")
         oMessage.Subject = strValue
         SFlag = True
      End If

      ' To: - header
      If (InStr(oMessage.To, "=F0=9F=") > 0) Then
         strEmoji = Mid(oMessage.To, InStr(oMessage.To, "=F0=9F="), 12)
         strValue = Replace(oMessage.To, strEmoji, "")
         oMessage.To = strValue
         SFlag = True
      End If

      ' CC: - header
      If (InStr(oMessage.CC, "=F0=9F=") > 0) Then
         strEmoji = Mid(oMessage.CC, InStr(oMessage.CC, "=F0=9F="), 12)
         strValue = Replace(oMessage.CC, strEmoji, "")
         oMessage.CC = strValue
         SFlag = True
      End If

      If SFlag Then oMessage.Save
      oMessage.EncodeFields = ECFlag
   End Sub
SørenR.

Woke is Marxism advancing through Maoist cultural revolution.

Post Reply