[PHP] Mailtje met html-bijlage met embedded plaatjes?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
Ik weet dat het mogelijk is om plaatjes te embedden in je HTML-e-mailbericht, maar is het ook mogelijk om plaatjes te embedden in de HTML-bijlage van je HTML-e-mailbericht? Zowel in mijn mail als in mijn bijlage staan namelijk plaatjes, maar ik wil niet de ontvanger die van mijn server moet halen als hij de bijlage opent.

Ik kan hierover niets op Google vinden, omdat alle zoekopdrachten met 'html', 'embed', 'graphics' e.d. leiden naar tutorials die gaan over het embedden van plaatjes in het mailtje zelf.

Iemand een idee?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik heb er zelf niet zo veel verstand van, maar ik zou eens op Multipart zoeken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


Acties:
  • 0 Henk 'm!

  • _Gekkie_
  • Registratie: Oktober 2000
  • Laatst online: 24-06 20:21

_Gekkie_

And the cow said: Helloooooow?

Kijk even goed naar standaar PHP mail oplossingen (zoals swiftmailer, het onderdeel in zend framework, de pear library etc) die beschikken veelal over dit soort functies...

(ik ben persoonlijk behoorlijke voorstander van Swiftmailer. Die werkt uitstekend!)

Gekkie is a proud member of TheBenny!


Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
Ik versta de vraag niet zo goed. Is de HTML-bijdrage het bericht maar dan in HTML (alternate content)? Ja dat kan en volgens mij staat dat ook gewoon in de standaard beschreven.

Van het eerste google antwoord:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
From: foo1atbar.net 
To: foo2atbar.net 
Subject: A simple example 
Mime-Version: 1.0 
Content-Type: multipart/related; boundary="boundary-example"; type="text/html" 

--boundary-example 
Content-Type: text/html; charset="US-ASCII" 

... text of the HTML document, which might contain a URI 
referencing a resource in another body part, for example 
through a statement such as: 
<IMG SRC="cid:foo4atfoo1atbar.net" ALT="IETF logo"> 

--boundary-example 
Content-Location: CID:somethingatelse ; this header is disregarded 
Content-ID: <foo4atfoo1atbar.net> 
Content-Type: IMAGE/GIF 
Content-Transfer-Encoding: BASE64 

R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNv 
cHlyaWdodCAoQykgMTk5LiBVbmF1dGhvcml6ZWQgZHV 
wbGljYXRpb24gcHJvaGliaXRlZC4A etc... 

--boundary-example--

Acties:
  • 0 Henk 'm!

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 21:10

DexterDee

I doubt, therefore I might be

Je hebt meerdere opties mocht je gebruik willen maken van een open source library. De library die ik vaker heb gebruikt is PHPMailer.

Voorbeeld aldus de website:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
require_once '../class.phpmailer.php';
 
$mail = new PHPMailer(true); //defaults to using php "mail()"; the true param means it will throw exceptions on errors, which we need to catch

try {
  $mail->AddReplyTo('name@yourdomain.com', 'First Last');
  $mail->AddAddress('whoto@otherdomain.com', 'John Doe');
  $mail->SetFrom('name@yourdomain.com', 'First Last');
  $mail->AddReplyTo('name@yourdomain.com', 'First Last');
  $mail->Subject = 'PHPMailer Test Subject via mail(), advanced';
  $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional MsgHTML will create an alternate automatically
  $mail->MsgHTML(file_get_contents('contents.html'));
  $mail->AddAttachment('images/phpmailer.gif');      // attachment
  $mail->AddAttachment('images/phpmailer_mini.gif'); // attachment
  $mail->Send();
  echo "Message Sent OK\n";
} catch (phpmailerException $e) {
  echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
  echo $e->getMessage(); //Boring error messages from anything else!
}


Op bovenstaande manier voeg je de images dus daadwerkelijk als attachment toe in plaats van alleen een URL referentie.

Klik hier om mij een DM te sturen • 3245 WP op ZW


Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46

KompjoeFriek

Statsidioot

DexterDee schreef op dinsdag 18 augustus 2009 @ 17:35:
...
Op bovenstaande manier voeg je de images dus daadwerkelijk als attachment toe in plaats van alleen een URL referentie.
Dat klopt helemaal, maar de TS wil die attached images ook graag middels html in de mail zelf laten zien. Dat noemen ze Inline Attachements.

Mocht je voor PHPMailer gaan, gebruik dan DexterDee's voorbeeld met AddEmbeddedImage ipv AddAttachment.
Voor details, zie: http://phpmailer.worxware.com/index.php?pg=tutorial#3

De oplossing van moozzuzz werkt ook. Tenzij je hele aparte dingen van plan bent lijkt het me makkelijker om toch voor PHPMailer te gaan.

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
Bedankt!

Misschien moet ik het wat beter uitleggen. Ik heb een mail, bestaande uit HTML, met daarin het logo van het bedrijf. Echter... in de bijlage van de mail zit ook een HTML-bestand (de factuur) en in dat bestand staat ook het logo van het bedrijf.

Welnu, het lukt me wel om het logo te embedden in de mail, maar niet in de bijlage. Als ik jullie oplossingen goed begrijp, gaan die allemaal over het embedden van plaatjes in de mail zelf.

Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 06-09 16:59

CoolGamer

What is it? Dragons?

Dan kan je het beste gewoon in het html-bestand linken naar het logo op internet, want het is niet makkelijk om een afbeelding toe te voegen aan een los html-bestand (terwijl het blijft werken in alle veel gebruikte browsers).

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

  • Joolee
  • Registratie: Juni 2005
  • Niet online
Een mogelijkheid zou zijn om als bijlage een mhtml bestand mee te leveren. Hier kun je wel de extra bestanden in kwijt. Nadeel is dat deze niet standaard door Firefox en Chrome wordt ondersteund.

Andere mogelijkheid is het HTML document en de afbeeldingen in een zip bestand op te sturen. Dit werkt naar mijn idee op zo'n 99% van de computers in NLD. Of ook 99% van de gebruikers het dan nog snapt is een ander punt...

Acties:
  • 0 Henk 'm!

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46

KompjoeFriek

Statsidioot

Een plaatje kan direct in een html document opgenomen worden in base64 encoded vorm, welke ook door alle moderne browsers ondersteund wordt.
PHP:
1
2
$img = base64_encode( file_get_contents('chucknorris.jpg') );
print '<img src="data:image/jpeg;base64,' . $img . '" alt="image!">';
Voor andere type plaatjes moet je niet vergeten het content-type aan te passen :)

WhatPulse! - Rosetta@Home - Docking@Home


Acties:
  • 0 Henk 'm!

Verwijderd

Of je stuurt gewoon een factuur als PDF zoals het grootste deel van het bedrijfsleven doet.

Acties:
  • 0 Henk 'm!

Verwijderd

Rekcor schreef op dinsdag 18 augustus 2009 @ 20:57:
Bedankt!

Misschien moet ik het wat beter uitleggen. Ik heb een mail, bestaande uit HTML, met daarin het logo van het bedrijf. Echter... in de bijlage van de mail zit ook een HTML-bestand (de factuur) en in dat bestand staat ook het logo van het bedrijf.

Welnu, het lukt me wel om het logo te embedden in de mail, maar niet in de bijlage. Als ik jullie oplossingen goed begrijp, gaan die allemaal over het embedden van plaatjes in de mail zelf.
Precies wat jij wilt, staat in het bericht boven je! PHPMailer met de functie AddEmbeddedImage is wat je zoekt!!

Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-09 13:49

Patriot

Fulltime #whatpulsert

Nee GuidoH, jij hebt het over de HTML van het mailtje. Hij heeft het over een apart HTML-bestand dat hij als bijlage heeft toegevoegd, daarin wil hij een plaatje invoegen. Het gaat dus niet om de HTML van het mailtje, maar om de HTML van het bestand dat zélf als bijlage is toegevoegd. En dat kan gewoon op de manier die KompjoeFriek geeft.

offtopic:
edit @ hieronder: muhah :+

[ Voor 5% gewijzigd door Patriot op 19-08-2009 03:06 ]


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op woensdag 19 augustus 2009 @ 02:49:
[...]

Precies wat jij wilt, staat in het bericht boven je! PHPMailer met de functie AddEmbeddedImage is wat je zoekt!!
Nee, die zoekt ie helemaal niet. Als jij een HTML-attachment opent in je (default) browser, dan kan die browser onmogelijk bij je "inline attached image" in je e-mail. ;)

[ Voor 20% gewijzigd door Osiris op 19-08-2009 03:00 ]


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
Verwijderd schreef op woensdag 19 augustus 2009 @ 01:32:
Of je stuurt gewoon een factuur als PDF zoals het grootste deel van het bedrijfsleven doet.
Dit zou inderdaad de beste oplossing zijn (en heb ik ook voorgesteld). Ze vinden die oplossing echter te duur, want dan moet er veel omgeprogrammeerd worden.

Anyway, dat idee van Kompjoefreak zit er veelbelovend uit! Hartelijk dank!

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Wat voor type bijlage is het? Een HTML document?
Kijk dan eens naar het MHT-bestandsformaat

Acties:
  • 0 Henk 'm!

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023
Veel omgeprogrammeer worden?
Sorry hoor maar een PDFje via fpdf of welke library dan ook (welke heb je nog meer, tcpdf en nog een stel) automatisch aanmaken kost je minder tijd dan wat je nu wilt doen. Binnen een uur heb je een pdf bijlage van de factuur hoor!

Of je laat je logo uiteraard online staan. Als PDF echt een no-go is zou ik dat doen ipv echt moeilijk doen.

Verwijderd

De beste class die ik tot nu toe gevonden heb is swiftmailer.. persoonlijke mening maar het is erg eenvoudig:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    include_once ('swift4/swift_required.php');
    $transport  = Swift_SmtpTransport::newInstance('mail.zeelandnet.nl', 25);
    $mailer     = Swift_Mailer::newInstance($transport);        
    $message    = Swift_Message::newInstance('titel van het mailtje')
    ->setFrom(array('info@site.nl' => 'Site.nl - Info'))
    ->setTo('you@yourprovider.nl')  
    ->setCharset('utf-8');
    ->setBody(
        '<html>
            <head></head>
            <body>
                <img src="'.$message->embed(Swift_Image::fromPath("img.png")).'" alt="link">
            </body>
        </html>',
        'text/html' //Mark the content-type as HTML
    )
    ->attach(Swift_Attachment::fromPath('doc.pdf'));
    $result = $mailer->send($message);


Is ook erg goed gedocumenteerd.

Een leuke plugin isw throttler. Zo kun je een max aantal bytes of mailtjes per minuut opgeven.

[ Voor 53% gewijzigd door Verwijderd op 20-08-2009 09:32 ]


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

KompjoeFriek schreef op woensdag 19 augustus 2009 @ 01:30:
Een plaatje kan direct in een html document opgenomen worden in base64 encoded vorm, welke ook door alle moderne browsers ondersteund wordt.
PHP:
1
2
$img = base64_encode( file_get_contents('chucknorris.jpg') );
print '<img src="data:image/jpeg;base64,' . $img . '" alt="image!">';
Voor andere type plaatjes moet je niet vergeten het content-type aan te passen :)
Meeste mensen gebruiken geen webbrowser voor email, maar programma's zoals Outlook.
Nou zijn er naar mijn weten alleen niet veel mailclients die een moderne HTML renderer in zich hebben.
En al opent men de bijlage met een browser: dan nog heb je géén garantie dat het werken zal, omdat je niet kan uitsluiten (in dit geval) welke browser gebruikt word.
Verwijderd schreef op donderdag 20 augustus 2009 @ 09:23:
De beste class die ik tot nu toe gevonden heb is swiftmailer.. persoonlijke mening maar het is erg eenvoudig:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    include_once ('swift4/swift_required.php');
    $transport  = Swift_SmtpTransport::newInstance('mail.zeelandnet.nl', 25);
    $mailer     = Swift_Mailer::newInstance($transport);        
    $message    = Swift_Message::newInstance('titel van het mailtje')
    ->setFrom(array('info@site.nl' => 'Site.nl - Info'))
    ->setTo('you@yourprovider.nl')  
    ->setCharset('utf-8');
    ->setBody(
        '<html>
            <head></head>
            <body>
                <img src="'.$message->embed(Swift_Image::fromPath("img.png")).'" alt="link">
            </body>
        </html>',
        'text/html' //Mark the content-type as HTML
    )
    ->attach(Swift_Attachment::fromPath('doc.pdf'));
    $result = $mailer->send($message);


Is ook erg goed gedocumenteerd.

Een leuke plugin isw throttler. Zo kun je een max aantal bytes of mailtjes per minuut opgeven.
Maar dan nu met het HTML document in de bijlage van de mail, waar vervolgens de afbeelding in moet als ik de TS goed begrijp, niet direct in de mail... ;)

Mooiste oplossing is die van Cheetah: een PDF document in de bijlage van dat mailtje doen, zoals 80% / 90% van de bedrijven doet.

[ Voor 28% gewijzigd door CH4OS op 21-08-2009 15:29 ]


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
GJtje schreef op vrijdag 21 augustus 2009 @ 15:17:
[...]

Mooiste oplossing is die van Cheetah: een PDF document in de bijlage van dat mailtje doen, zoals 80% / 90% van de bedrijven doet.
Wellicht dat je je HTML document om kan zetten naar PDF met PHP? Er zijn een aantal libraries die HTML naar PDF om kunnen zetten, zoals TCPDF en HTML2PDF.

Dat kost jezelf dus amper werk. Daarnaast kan het door meer mensen goed bekeken worden, aangezien elke (web) e-mail client anders omgaat met HTML code (en vooral styles en images erin).

[ Voor 15% gewijzigd door Borizz op 22-08-2009 17:07 ]

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • leroyk2
  • Registratie: Juli 2009
  • Niet online
Borizz schreef op zaterdag 22 augustus 2009 @ 17:06:
Wellicht dat je je HTML document om kan zetten naar PDF met PHP? Er zijn een aantal libraries die HTML naar PDF om kunnen zetten, zoals TCPDF en HTML2PDF.

Dat kost jezelf dus amper werk. Daarnaast kan het door meer mensen goed bekeken worden, aangezien elke (web) e-mail client anders omgaat met HTML code (en vooral styles en images erin).
Meestal werken die oplossingen maar half. Het is mij nog nog niet gelukt om een goede pdf te kunnen genereren aan de hand van een html pagina. De layout in de pdf zag er altijd wel apart uit.

Voor een factuur te genereren is http://xml-2-pdf.sourceforge.net/ misschien wel een leuke oplossing.

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
leroyk2 schreef op zaterdag 22 augustus 2009 @ 17:42:
[...]


Meestal werken die oplossingen maar half. Het is mij nog nog niet gelukt om een goede pdf te kunnen genereren aan de hand van een html pagina. De layout in de pdf zag er altijd wel apart uit.

Voor een factuur te genereren is http://xml-2-pdf.sourceforge.net/ misschien wel een leuke oplossing.
Mijn ervaringen zijn toch anders als je rekening houdt met wat er ondersteund wordt kwa html/css etc, dan werkt het prima. En zeker html2pdf ondersteunt HTML en CSS vrij aardig (de float property wordt bijvoorbeeld ook ondersteund en ook background images in css en er kan met styles aangegeven worden waar een pagina op zou moeten houden). Als je zelf controle hebt over de html dan is dit zeker wel te doen. Voor een factuur heb je waarschijnlijk ook geen ingewikkelde layout nodig.

XML 2 PDF ziet er leuk uit, maar er is nog weinig documentatie of zie ik dat verkeerd? Je moet hiervoor ook weer een nieuw taaltje leren om je factuur op te maken.

[ Voor 8% gewijzigd door Borizz op 22-08-2009 19:49 ]

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 05-09 21:08
Bedankt!

Ik had inderdaad naar zo'n html2pdf-oplossing gekeken ja. Maar ergens vind ik het niet 'juist' om de pagina in opmaaktaal A op te maken, en dan met programmeertaal B te converteren naar opmaaktaal C. Zeker als B ook direct C kan produceren. Of moet ik niet Roomser dan de paus willen zijn?

Acties:
  • 0 Henk 'm!

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 21:10

DexterDee

I doubt, therefore I might be

Rekcor schreef op maandag 24 augustus 2009 @ 10:47:
Bedankt!

Ik had inderdaad naar zo'n html2pdf-oplossing gekeken ja. Maar ergens vind ik het niet 'juist' om de pagina in opmaaktaal A op te maken, en dan met programmeertaal B te converteren naar opmaaktaal C. Zeker als B ook direct C kan produceren. Of moet ik niet Roomser dan de paus willen zijn?
Mijn mening hierover is dat je beter een nette PDF invoice naar de klant kan sturen met code die niet helemaal netjes, gestructureerd en academisch correct is, dan een slecht ondersteunde HTML invoice met de meest prachtige code die de mensheid ooit gezien heeft.

Zo gaat het trouwens vaak in het bedrijfsleven. Van sommige gerespecteerde bedrijven met een goed imago is het goed schrikken als je daar eens in de code duikt van sommige software ;)

Klik hier om mij een DM te sturen • 3245 WP op ZW


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Rekcor schreef op maandag 24 augustus 2009 @ 10:47:
Bedankt!

Ik had inderdaad naar zo'n html2pdf-oplossing gekeken ja. Maar ergens vind ik het niet 'juist' om de pagina in opmaaktaal A op te maken, en dan met programmeertaal B te converteren naar opmaaktaal C. Zeker als B ook direct C kan produceren. Of moet ik niet Roomser dan de paus willen zijn?
Je kan de factuur ook prima met een PDF class / library maken (zoals FPDF), maar je gaf zelf aan dat het dan te duur wordt... Een simpele factuur (met wat afbeeldingen) maken met fpdf hoeft overigens echt niet veel tijd te kosten.

Je zal toch een keuze moeten maken..

If I can't fix it, it ain't broken.

Pagina: 1