Getting RadEditor content as e-mail body

5 posts, 0 answers
  1. Jill-Connie Lorentsen
    Jill-Connie Lorentsen avatar
    118 posts
    Member since:
    Nov 2008

    Posted 13 May 2013 Link to this post

    I want to create an e-mail that the user can edit and then send. The e-mail has a defaut body, which can be edited in a RadEditor. When the user clicks a button, the e-mail is created like this:

    function OnClientButtonClicking(sender, args) {
            var button = args.get_item();
            if (button.get_commandName() == "SendEmail") {           
                var emailaddress = document.getElementById("EmailAddress").value;
                var subject = document.getElementById("EmailSubject").value;
                var editor = $find("<%=RadEditorEmailBody.ClientID%>");
                var body = editor.get_html();
                 
                window.location = "mailto:" + emailaddress  + "?subject=" + subject  + "&body=" + body;
      
            }
        }


    I enter a text into the RadEditor like this:
    string body = string.Empty;
    body += string.Format("This is the message to send.<br />");
    body += string.Format("It contains various information<br />");
    body += string.Format("<br />");
     
     
    RadEditorEmailBody.Content =body;
     
    The problem is that the formatting is displays as text in the e-mail.
    If I use var body = editor.get_html(true);   in the javascript the result is the same, but the text is clipped if I enter a special character like §, ø, etc.


    Any suggestions?



    Regards, Jill-Connie 
  2. Elliott
    Elliott avatar
    392 posts
    Member since:
    May 2010

    Posted 13 May 2013 Link to this post

    yes, because that is pretty much the application I developed

    1 - use the Content property as the Body (which I notice you are already doing)
    2 - determine which Tools will not be needed and Remove them in the Page Load event handler
    3 - if you want to use style sheets you'll need to manually identify the classes used - and pump in the corresponding style sheet text
    Imports System.Collections.Generic
    Imports System.IO
    Imports System.Text
    Imports System.Text.RegularExpressions
     
    Public Class CSSParser
        Private Shared AnArray As String()
        Private _aString As String
        Private StyleSheets As List(Of String)
        Private _alist As SortedList(Of String, StyleClass)
     
        Public Property AList As SortedList(Of String, StyleClass)
            Get
                Return Me._alist
            End Get
            Set(value As SortedList(Of String, StyleClass))
                Me._alist = value
            End Set
        End Property
     
        Public Function BuildListofStyles(FilePath As String) As String()
            Dim AnArray As String()
            Me.StyleSheets = New List(Of String)
            Me._alist = New SortedList(Of String, StyleClass)
            Me.StyleSheets.Add(FilePath)
            AnArray = ParseStyleSheet(FilePath)
            Return AnArray
        End Function
     
        Private Function ParseStyleSheet(FilePath As String) As String()
            Dim strBody, AString, SecondString, ThirdString As String
            Dim i, j As Integer
            Dim sb As StringBuilder = Nothing
            Dim aryStyle, aryClass As String()
     
            sb = New StringBuilder(String.Empty)
            strBody = RemoveExtraneousCharacters(File.ReadAllText(FilePath))
            AnArray = strBody.Split("}")
            For i = 0 To AnArray.Length - 2
                aryStyle = AnArray(i).Split("{")
                If aryStyle(0).Length > 0 Then
                    AString = aryStyle(0).Remove(0, 1)
                    sb.Append(AString)
                    sb.Append(",")
                End If
            Next
            _aString = sb.ToString
            j = _aString.LastIndexOf(",")
            SecondString = _aString.Remove(j)
            ThirdString = _aString.Remove(j - 1)
            aryClass = SecondString.Split(",")
            Return AnArray
        End Function
     
        Private Function RemoveExtraneousCharacters(strBody As String) As String
            Dim strTemp As String
            Dim cnstRegEx As String = "(/\\*(.|[\r\n])*?\\*/)|(//.*)"
            Dim regExpr As Regex = Nothing
     
            strTemp = strBody
            regExpr = New Regex(cnstRegEx)
            strTemp = regExpr.Replace(strTemp, "")
            strTemp = strTemp.Replace("\r", "").Replace("\n", "")
            Return strTemp
        End Function
     
        Public Function BuildCSSString(ASet As SortedSet(Of String), AnArray As String()) As String
            Dim sb As StringBuilder = Nothing
            Dim AClass As String = String.Empty
     
            sb = New StringBuilder("<style type=")
            sb.append(Chr(34))
            sb.Append("text/css")
            sb.Append(Chr(34))
            sb.Append(" >")
            sb.Append(vbCrLf)
            For Each AClass In ASet
                sb.Append(GetCSSClass(AnArray, AClass))
            Next
            sb.Append(vbCrLf)
            sb.Append("</style>")
            Return sb.ToString
        End Function
     
        Public Function GetCSSClass(aryClass As String(), AClass As String) As String
            Dim sb As StringBuilder = Nothing
            Dim i, j As Integer
            Dim aryStyle, aryAttr As String()
     
            sb = New StringBuilder(String.Empty)
            For i = 0 To aryClass.Length - 1
                aryStyle = aryClass(i).Split("{")
                If (aryStyle(0).Trim() = "." & AClass) Then
                    sb.Append(".")
                    sb.Append(AClass)
                    sb.Append(" { ")
                    aryAttr = aryStyle(1).Split(";")
                    For j = 0 To aryAttr.Length - 1
                        sb.Append(aryAttr(j).Trim())
                        sb.Append("; ")
                    Next
                    sb.Append("} ")
                End If
            Next
            Return sb.ToString
        End Function
     
        Public Class StyleClass
            Private _name As String = String.Empty
            Private _attributes As New SortedList(Of String, String)
            Public Property Name As String
                Get
                    Return _name
                End Get
                Set(value As String)
                    _name = value
                End Set
            End Property
            Public Property Attributes As SortedList(Of String, String)
                Get
                    Return _attributes
                End Get
                Set(value As SortedList(Of String, String))
                    _attributes = value
                End Set
            End Property
        End Class
    End Class


    4 - include a textbox so the user can send her(him) self a test email before emailing the actual recipient

    if you've never generated email from a web site - to get images into the body of an email you may need to use AlternateViews
  3. Jill-Connie Lorentsen
    Jill-Connie Lorentsen avatar
    118 posts
    Member since:
    Nov 2008

    Posted 14 May 2013 Link to this post

    Thank you for your reply and the code.

    I am afraid I need a bit more help... I think this is more than what I need, and I have difficulties seeing which parts that can be omitted. I don't use style sheets.

    Could you please give me an example of usage of this class in my context? RadEditor.Content = ???

    Thank you very much!

    Regards, Jill-Connie Lorentsen
  4. Elliott
    Elliott avatar
    392 posts
    Member since:
    May 2010

    Posted 14 May 2013 Link to this post

    Jill
    you can completely ignore the class above if you don't use style sheets
    to remove Tools, in the Page Load, if not PostBack
    myRadEditor.EnsureToolsFileLoaded()
    For Each etGroup As EditorToolGroup In myRadEditor.Tools
        dim etBase As List(Of EditorToolBase)
            Dim etBase As List(Of String)=etGroup.GetAllTools
                For i = 0 To etBase.Count - 1
            If DirectCast(etBase(i), EditorTool).Name = "whatever"
                        etGroup.Tools.Remove(etBase(i))
                    End If
                Next
            Next
    Print
    AjaxSpellCheck
    FindAndReplace
    SelectAll
    Cut
    Copy
    Paste
    PasteStrip
    Undo
    Redo
    ImageManager
    DocumentManager
    FlashManager
    MediaManager
    TemplateManager
    LinkManager
    Unlink
    Superscript
    Subscript
    InsertParagraph
    InsertGroupbox
    InsertHorizontalRule
    InsertDate
    InsertTime
    FormatCodeBlock
    FormatBlock
    FontName
    RealFontSize
    AbsolutePosition
    Bold
    Italic
    Underline
    StrikeThrough
    JustifyLeft
    JustifyCenter
    JustifyRight
    JustifyFull
    JustifyNone
    Indent
    Outdent
    InsertOrderedList
    InsertUnorderedList
    ToggleTableBorder
    XhtmlValidator
    ForeColor
    BackColor
    ApplyClass
    FormatStripper
    InsertSymbol
    InsertTable
    InsertFormElement
    InsertSnippet
    ImageMapDialog
    InsertCustomLink
    ConvertToLower
    ConvertToUpper
    Zoom
    ModuleManager
    ToggleScreenMode
    AboutDialog

    then all you need to do is set mail message.Body = Rad Editor.Content
    make sure you set IsHTML to true if you include any styling icons
    the control generates <span> tags which don't work in Text email
    the Managers (Document Manager,ImageManager, etc.) require a location on the web site with write privileges to put images, etc to upload
  5. Jill-Connie Lorentsen
    Jill-Connie Lorentsen avatar
    118 posts
    Member since:
    Nov 2008

    Posted 14 May 2013 Link to this post

    Thanks, it works from code behind, but I would like to do it with javascript on the client side

    <script type = "text/javascript">
     
        function OnClientButtonClicking(sender, args) {
            var button = args.get_item();
            //alert(button.get_commandName());
            if (button.get_commandName() == "SendProgramByEmail") {           
                var emailaddress = document.getElementById("HiddenEmailAddress").value;
                var subject = document.getElementById("HiddenEmailSubject").value;
                //var body = document.getElementById("HiddenEmailBody").value;
                var editor = $find("<%=RadEditorEmailBody.ClientID%>");
                var body = editor.get_html(true);
                
                
     
                window.location = "mailto:" + emailaddress  + "?subject=" + subject  + "&body=" + body;
     
            }
        
     
         
     
    </script>


    Is there a way?


    Regards, Jill-Connie
Back to Top