Archief - PHP: HTML mails sturen met afbeeldingen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

HoAxKe

Legacy Member
Hey, Ik probeer al heel de tijd mails te sturen met afbeeldingen die ik heb geupload. Maar dit lukt niet. Ik heb de content type op text/html staan en de links naar de afbeeldingen worden allemaal extern ingeladen(<img src="http://www.domein.com/image.jpg"/>). Ze staan allemaal op mijn webruimte met andere woorden. Kan iemand me helpen?

Obliv`

Legacy Member
HoAxKe zei:
Hey, Ik probeer al heel de tijd mails te sturen met afbeeldingen die ik heb geupload. Maar dit lukt niet. Ik heb de content type op text/html staan en de links naar de afbeeldingen worden allemaal extern ingeladen(<img src="http://www.domein.com/image.jpg"/>). Ze staan allemaal op mijn webruimte met andere woorden. Kan iemand me helpen?

De ontvanger van de e-mail kan toch nog steeds de afbeeldingen zien, zolang jouw server online is?

Als je de afbeeldingen wil embedden in je e-mail moet je maar eens googlen op 'PHP + mail + images + cid'.

Zo embed ik images in een mailmessage in asp.net:
Code:
Private Function EmbedImages(ByRef messageBody As String) As System.Net.Mail.AlternateView
            'Checks for the first image tag with priming read
            Dim checkStart As Integer = messageBody.IndexOf("<img", 0)
            Dim checkEnd As Integer = 0
            Dim oldImageTag As String = Nothing
            Dim newImageTag As String = Nothing
            Dim field As String = Nothing
            Dim alternateView As System.Net.Mail.AlternateView = Nothing
            Dim linkedResourceArrayList As New ArrayList
            Dim linkedResource As System.Net.Mail.LinkedResource = Nothing
            Dim httpWebRequest As System.Net.HttpWebRequest = Nothing
            Dim httpWebResponse As System.Net.HttpWebResponse = Nothing

            'If an image tag was found, replaces it with the embedded image
            Do While Not checkStart = -1
                'Gets the whole image tag
                checkEnd = messageBody.IndexOf(">", checkStart)
                oldImageTag = messageBody.Substring(checkStart, (checkEnd - checkStart) + 1)

                'Gets the image's src property
                field = oldImageTag.Substring(oldImageTag.IndexOf("src") + 5)
                field = field.Substring(0, field.IndexOf(""""))

                'Links the image to embed
                httpWebRequest = CType(System.Net.HttpWebRequest.Create(field), System.Net.HttpWebRequest)
                httpWebRequest.Credentials = System.Net.CredentialCache.DefaultCredentials
                httpWebResponse = CType(httpWebRequest.GetResponse(), System.Net.HttpWebResponse)
                linkedResource = New System.Net.Mail.LinkedResource(httpWebResponse.GetResponseStream())
                linkedResource.ContentId = "Image" & checkStart

                'Set the image's new src property
                newImageTag = oldImageTag.Replace(field, "cid:" & linkedResource.ContentId)
                messageBody = messageBody.Remove(checkStart, (checkEnd - checkStart) + 1)
                messageBody = messageBody.Insert(checkStart, newImageTag)

                'Adds the resource to the alternate view
                linkedResourceArrayList.Add(linkedResource)

                'Checks for the next image tag
                checkStart = messageBody.IndexOf("<img", checkStart + 4)
            Loop

            'Creates an alternate view with the embedded images
            alternateView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(messageBody, Nothing, "text/html")

            'Adds all the embedded images to the alternate view
            For Each linkedResource In linkedResourceArrayList
                alternateView.LinkedResources.Add(linkedResource)
            Next

            Return alternateView
        End Function

Het komt er dus op neer dat de mailbody wordt gescanned op img-tags. De afbeelding die staat opgegeven in het src-attribuut wordt gedownload en als attachment toegevoegd aan de e-mail.

Vervolgens wijzig ik het src-attribuut naar cid:[imageId]. Doordat er 'cid' voorstaat wordt er in de attachments gezocht naar de afbeelding met de corresponderende Id.

Hoe dit juist werkt in PHP weet ik niet. Hopelijk kan dit toch al wat helpen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan