无法从字节数组打开电子邮件附件

时间:2015-03-26 08:53:41

标签: mysql vb.net

我正在尝试使用VB.net将从MySQL服务器检索到的二进制数据作为附件附加到电子邮件中。

我可以发送附带附件但不能打开任何附件的电子邮件,即使word文件也是空的。

错误讯息是 - > Adobe Reader无法打开“xxx.pdf”,因为它不是受支持的文件类型,或者因为文件已损坏(例如,它是作为电子邮件附件发送的,并且未正确解码)。

一直在搜索,但仍然无法找出我的代码有什么问题。

任何人都可以提供帮助,非常感谢!谢谢!

    Dim m_ImageBinary As [Byte]() = New [Byte](-1) {}
    Dim m_AttachmentType As String = ""
    Dim m_AttachmentName As String = ""
    Dim m_Attachment As Boolean = False
    Dim cmd3 As New MySqlCommand("SELECT Attachment, AttachmentType, AttachmentName FROM tbcommunication WHERE CommunicationID = " & cid, MySql)
    Dim rdr2 As MySqlDataReader = cmd3.ExecuteReader()
    While rdr2.Read()
        If rdr2("Attachment").ToString() <> "" Then
            Dim m_Length As Integer = DirectCast(rdr2("Attachment"), [Byte]()).Length

            m_ImageBinary = New [Byte](m_Length - 1) {}
            m_ImageBinary = DirectCast(rdr2("Attachment"), [Byte]())
            m_AttachmentType = rdr2("AttachmentType").ToString()
            m_AttachmentName = rdr2("AttachmentName").ToString()
        End If
    End While

    If m_ImageBinary.Length <> 0 Then
        If m_Attachment = False Then
            If m_AttachmentType.Contains("jpeg") OrElse m_AttachmentType.Contains("bmp") OrElse m_AttachmentType.Contains("gif") Then
                m_Attachment = False
            Else
                m_Attachment = True
            End If
        End If

        If m_Attachment = True Then
            ' If not image file
            Response.AppendHeader("content-disposition", "attachment; filename=" & m_Atta`enter code here`chmentName)
        End If

        'Write(binary)
        'Response.ContentType = m_AttachmentType
        'Response.BinaryWrite(m_ImageBinary)
        'Response.[End]()
    End If



    Dim mailmssg As New MailMessage()
    Dim smtp_client As New SmtpClient

    Using memoryStream As New MemoryStream()
        Dim bytes As Byte() = memoryStream.ToArray()

        Dim att As New Attachment(New MemoryStream(bytes), m_AttachmentName)

        mailmssg.Attachments.Add(att)
        MemoryStream.Dispose()

        smtp_client.DeliveryMethod = SmtpDeliveryMethod.Network
        smtp_client.Send(mailmssg)
   End Using

1 个答案:

答案 0 :(得分:0)

'...
' memoryStream = new blank MemoryStream
Using memoryStream As New MemoryStream()
        ' get emtpy array from memoryStream
        Dim bytes As Byte() = memoryStream.ToArray()
        ' Create empty MemoryStream from empty bytes array
        Dim att As New Attachment(New MemoryStream(bytes), m_AttachmentName)
'...

使用当前代码,除了带有名称的空文件外,您永远不会发送任何内容。