2017-11-08 1 views
0

Ich habe eine Anwendung, die ich unterstütze. Ich frage mich, ob es möglich ist, ein Bild aus einer Datenbank (Image Datatype) zu erhalten und dieses Bild dann an eine E-Mail anzuhängen. Die Anwendung bettet die Bilder derzeit in eine E-Mail ein, aber ich brauche sie stattdessen, um Bilder anzuhängen.VB.Net - Abrufen von Bild aus der Datenbank Spalte und dann als Anlage an eine E-Mail anhängen

Ich habe in das Hinzufügen von Anhängen zu E-Mails gelesen, aber es greift das Bild von einem Speicherort, anstatt ein Datenbankfeld. Ich bin nicht auf etwas gestoßen, das meinen Bedürfnissen entspricht.

Muss ich das Bild lokal speichern und dann die E-Mail mit dem gespeicherten Bild senden?

SQL Server 2014

Pre Existing Get Bild Funktion

 Private Function GetImage() As Byte() 
      Dim rdrImage As SqlDataReader 
      Dim strSQL As String 
      Dim arrContent As Byte() 
      strSQL = "SELECT Photo FROM " & CommonThings1.GetDatabaseSuffix & "Images " 
      strSQL = strSQL & "WHERE PhotoID = " & Request("ZQ") & " AND Random = " & Request("WXP") 
      cmCM.CommandText = strSQL 
      rdrImage = cmCM.ExecuteReader 
      rdrImage.Read() 
      arrContent = CType(rdrImage("Photo"), Byte()) 
      rdrImage.Close() 
      Return arrContent 
     End Function 

Hilfe wird sehr geschätzt.

+0

Welche Datenbank verwenden Sie? Kannst du uns einen ** Code ** zeigen, um loszulegen? –

+1

Die MSDN-Dokumentation für die Klasse "MailMessage" enthält ein Codebeispiel, das das Hinzufügen eines Anhangs enthält. Es ist in C# verfügbar, aber nicht in VB, aber es ist ziemlich einfach zu sehen, was vor sich geht. In diesem Beispiel verwendet es den 'Attachment'-Konstruktor, der einen' String' mit einem Dateipfad als Argument akzeptiert. Sie können stattdessen den verwenden, der einen "Stream" verwendet. [Klicken Sie hier] (http://www.vbforums.com/showthread.php?469562-Save-Images-in-Databases), um ein Beispiel zu sehen, wie man einen 'MemoryStream' mit Bilddaten aus einer Datenbank erhält. – jmcilhinney

+0

@marc_s siehe aktualisierte Frage. Danke –

Antwort

1

Sollte etwas weitergehen, das von meinem Kopf weg von der Spitze zu schreiben so nicht getestet ...

Dim stream as new MemoryStream(GetImage()) 
stream.Position = 0 'If I remember correctly, need to be at beginning of stream to read from first position when attaching 
Dim MSG As New MailMessage 
Dim ToAddress = New MailAddress(SomeEmailAddress) 
Dim FromAddress As New MailAddress("[email protected]") 
Try 
    With MSG 
     .To.Add(ToAddress) 
     .From = FromAddress 
     .Subject = "Your Photo" 
     .IsBodyHtml = True 
     .Body = SomeHTML 
     .Attachments.Add(New Attachment(stream , "Photo.jpg", "application/jpg")) 
    End With 
Dim SendMessage As New SmtpClient("smtp.MyMailServer.com") 
SendMessage.Send(MSG) 
+0

Das hat funktioniert! Jetzt kann es mehrere Bilder pro Datensatz geben. Ich muss dies für jedes Bild tun. Danke für Ihre Hilfe. –

Verwandte Themen