Получение AlternateView электронной почты

Я бы предложил добавить класс и затем наследовать элемент управления DataGridView в этом классе. Я сделал небольшой небольшой пример этого, и код работает, но чтобы заставить его работать, вам нужно будет выполнить несколько шагов:

(1) Если у вас еще нет приложения Windows Form для Затем проверьте это, сделайте новый. (2) Создайте класс с именем KeyedDataGridView

(3) Скопируйте и вставьте следующий код в класс KeyedDataGridView

(4) Перестройте свой проект

(5) Перетащите и отпустите новый компонент на форму Windows.

ПРИМЕЧАНИЕ. Этот класс ограничен, но он все еще должен выполнять то, что вам требуется.

Наконец, если вам нужна помощь, пожалуйста, оставьте комментарий и постараюсь добраться до него, когда смогу.

    Option Explicit On

    Public Class KeyedDataGridView
        Inherits Windows.Forms.DataGridView

        Dim _Rows As KeyedDataRows

        Public Shadows Property Rows As KeyedDataRows
            Get
                Return _Rows
            End Get
            Set(value As KeyedDataRows)
                _Rows = value
            End Set
        End Property

        Public Sub New()
            Dim strName As String

            strName = Me.Name

            strName = MyBase.Name

            _Rows = New KeyedDataRows(Me)
            _Rows.Rows = MyBase.Rows
        End Sub

        Protected Overrides Sub Finalize()
            _Rows = Nothing

            MyBase.Finalize()
        End Sub
    End Class


    Public Class KeyedDataRows
        Inherits Windows.Forms.DataGridViewRowCollection

        Dim _TagNames As Dictionary(Of String, Integer)
        Dim _Rows As DataGridViewRowCollection
        Dim _Cells As Dictionary(Of String, DataGridViewCellCollection)
        Dim dgv As DataGridView

        Default Public Overloads ReadOnly Property Item(strTagName As String) As DataGridViewRow
            Get
                Return _Rows.Item(Me.IndexFromName(strTagName))
            End Get
        End Property

        Protected Friend Property Rows As DataGridViewRowCollection
            Get
                Return _Rows
            End Get
            Set(value As DataGridViewRowCollection)
                _Rows = value
            End Set
        End Property



        Public Property TagName(index As Integer) As String
            Get
                Return CStr(_TagNames.Item(index))
            End Get
            Set(value As String)
                _TagNames.Item(index) = value
            End Set
        End Property

        Public Sub New(tmp As DataGridView)
            MyBase.New(tmp)

            dgv = tmp

            _TagNames = New Dictionary(Of String, Integer)
            _Cells = New Dictionary(Of String, DataGridViewCellCollection)
        End Sub

        Public Shadows Sub Add(strTagName As String)
            Dim intCurRow As Integer

            If dgv.AllowUserToAddRows Then
                intCurRow = _Rows.Count - 1
            Else
                intCurRow = _Rows.Count
            End If
            _TagNames.Add(strTagName, intCurRow)
            _Rows.Add()
        End Sub

        Public Shadows Sub Add(strTagName As String, dataGridViewRow As DataGridViewRow)
            Dim intCurRow As Integer

            If dgv.AllowUserToAddRows Then
                intCurRow = _Rows.Count - 1
            Else
                intCurRow = _Rows.Count
            End If
            _TagNames.Add(strTagName, intCurRow)
            _Rows.Add(dataGridViewRow)
        End Sub

        Public Shadows Sub Add(count As Integer, strTagNames() As String)
            Dim intI As Integer
            Dim intCurRow As Integer

            If dgv.AllowUserToAddRows Then
                intCurRow = _Rows.Count - 1
            Else
                intCurRow = _Rows.Count
            End If
            For intI = 0 To (count - 1)
                _TagNames.Add(strTagNames(intI), intCurRow)
                _Rows.Add()

                intCurRow = _Rows.Count - 1
            Next intI
        End Sub

        Public Property IndexFromName(strTagName As String) As Integer

            Get
                If _TagNames.Count > 0 Then
                    If _TagNames.ContainsKey(strTagName) Then
                        Return _TagNames.Item(strTagName)
                    Else
                        Return -1
                    End If
                Else
                    Return -1
                End If
            End Get
            Set(value As Integer)
                _TagNames.Add(strTagName, value)
            End Set
        End Property

        Public Overloads Sub RemoveAt(strTagName As String)
            _Cells.Remove(strTagName)
            _Rows.RemoveAt(IndexFromName(strTagName))
            _TagNames.Remove(strTagName)
        End Sub


        Protected Overrides Sub Finalize()
            _TagNames.Clear()
            _TagNames = Nothing

            _Cells.Clear()
            _Rows.Clear()

            _Cells = Nothing
            _Rows = Nothing

            MyBase.Finalize()
        End Sub
    End Class

Я также добавил следующие кнопки в форму окна для проверки кода:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        With KeyedDataGridView1
            .Rows.Add("Tag Test 1")

            .Rows.Add("Tag Test 2")

            .Rows.Add("Tag Test 3")

            .Rows.Add("Tag Test 4")
        End With
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        MsgBox(KeyedDataGridView1.Rows("Tag Test 3").Cells(0).Value & vbCrLf &
               KeyedDataGridView1.Rows("Tag Test 3").Cells(1).Value & vbCrLf &
               KeyedDataGridView1.Rows("Tag Test 3").Cells(2).Value)
        MsgBox(KeyedDataGridView1.Rows("Tag Test 2").Cells(0).Value & vbCrLf &
               KeyedDataGridView1.Rows("Tag Test 2").Cells(1).Value & vbCrLf &
               KeyedDataGridView1.Rows("Tag Test 2").Cells(2).Value)
        MsgBox(KeyedDataGridView1.Rows("Tag Test 1").Cells(0).Value & vbCrLf &
               KeyedDataGridView1.Rows("Tag Test 1").Cells(1).Value & vbCrLf &
               KeyedDataGridView1.Rows("Tag Test 1").Cells(2).Value)

    End Sub
7
задан Cœur 27 December 2016 в 07:39
поделиться

2 ответа

Не сразу возможный проанализировать электронное письмо с классами, доступными в Системе. Сеть. Почтовое пространство имен; или необходимо создать собственный синтаксический анализатор MIME или пользоваться сторонней библиотекой вместо этого.

Эта большая статья Codeproject Peter Huber, SG, наделенный правом 'Почтовый клиент POP3 с полной Поддержкой MIME (.NET 2.0)', даст Вам понимание того, как обработка MIME может быть реализована, и связанные статьи спецификации RFC.

Можно использовать статью Codeproject в качестве запуска для записи собственного синтаксического анализатора или оценить библиотеку как SharpMimeTools, который является библиотекой с открытым исходным кодом для парсинга и декодирования электронных писем MIME.

http://anmar.eu.org/projects/sharpmimetools/

Надеюсь, это поможет!

1
ответ дан 6 December 2019 в 07:08
поделиться

У меня была та же проблема, но вам просто нужно было прочитать ее из потока. Вот пример:

    public string ExtractAlternateView()
    {
        var message = new System.Net.Mail.MailMessage();
        message.Body = "This is the TEXT version";

        //Add textBody as an AlternateView
        message.AlternateViews.Add(
            System.Net.Mail.AlternateView.CreateAlternateViewFromString(
                "This is the HTML version",
                new System.Net.Mime.ContentType("text/html")
            )
        );

        var dataStream = message.AlternateViews[0].ContentStream;
        byte[] byteBuffer = new byte[dataStream.Length];
        return System.Text.Encoding.ASCII.GetString(byteBuffer, 0, dataStream.Read(byteBuffer, 0, byteBuffer.Length));
    }
8
ответ дан 6 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: