als mail() werkt, dan werkt phpmailer ook. Het is niet meer dan een grote schil om mail() heen.
(behalve als je uitgebreidere settings inschakeld, want phpmailer kan ook rechtstreeks met de smtp server praten, maar dat hoeft dus niet).
Maar in principe werkt een completen url naar een plaatje in een img-tag.
Behalve dan als je mail programma weigert om externe plaatjes te laten zien.
(privacy: als ik een plaatje opneem chris.jpg en ik kijk in de logs zou ik precies kunnen zien of en wanneer jij je mailt hebt bekeken.)
Vraag, in mijn mail box komen genoeg nieuwsbrieven met reklame waar in foto's zitten
dus waarom blokkeert hij die dan niet (zelfs php hulp heeft een logo afbeelding in zijn response mail)
Blijkbaar heb je voor PHPhulp de externe-afbeeldingen weergave gewoon toegestaan in je mailcliënt.
Wat Ivo wilt zeggen met privacy is dat er anders, zonder die beveiliging, heel gemakkelijk door de verzender is te bekijken of een mail is bekeken. Of sterker zelf... of een mailadres nog bestaat, wat zéér waardevol is voor spammers.
Vervolgens voeg je deze afbeelding als volgt toe in het multipart/related deel:
<?php
// ...
// INLINE IMAGE HEADER
$file = 'logo.png';
$path = 'files/logo.png';
$body[] = '--'.$boundary_van_multipart_related;
$body[] = 'Content-Type: image/png; name="'.$file.'"'; // obviously depends on file type
$body[] = 'Content-Transfer-Encoding: base64';
$body[] = 'Content-ID: <'.$image_id.'>';
$body[] = 'Content-Disposition: inline; filename="'.$file.'"';
$body[] = ''; // empty line that separates headers from body, DO NOT REMOVE
// INLINE IMAGE
$body[] = add_attachment($path); // hulpfunctie voor base64 chunked versie van bestand
// ...
?>
Mogelijjke implementatie van add_attachment:
<?php
function add_attachment($filename) {
clearstatcache();
if (file_exists($filename)) {
$fp = fopen($filename, 'rb');
$contents = fread($fp, filesize($filename)); // @todo remember to fix zero-length files
// note that chunk_split also adds an "end" character sequence at the end of the string, hence rtrim
return rtrim(chunk_split(base64_encode($contents), 76, "\n")); // @todo 3rd parameter might depend on platform
} else {
return false;
}
}
?>
De opbouw van je MIME-mail zal er ongeveer als volgt uit moeten zien:
Het kan dus zeer goed, er zijn echter wel wat overwegingen die spelen als je zo'n afbeelding of deze manier invoegt:
- het maakt de mail (flink) groter
- een groter percentage van het mailtje bevat voor mensen onleesbare inhoud (base64) wat een positief effect zou kunnen hebben op een spamscore
ik zou willen adviseren om wanneer je voor de oplossing van meesturen van de afbeelding gaat, om dat dan niet met eigen scripts te doen, maar met een class als phpmailer of swiftmailer.
Aan dergelijke projecten werken tientallen developers al jaren mee. Daar gaat jouw zondagmiddag-script niet aan kunnen tippen.
Bijvoorbeeld de situatie dat je 2 of meer afbeeldingen zo gaat meesturen of andere situaties die je vooraf niet voorzag.
Het zal best leerzaam zijn hoor.
Maar voor "het moet wel blijven werken" en "ik moet niet voor elke aanpassing de source in moeten duiken", zou ik een complete oplossing kiezen.
En dan dus niet alleen voor de situatie met de inline afbeeldingen, maar ook attachments, CC en BCC of meerdere ontvangers.
Controles op "is dit wel een mailadres", "bevat subject line geen enter" etc.
Daar gaat jouw zondagmiddag-script niet aan kunnen tippen.
Beetje vooringenomen opmerking?
Bijvoorbeeld de situatie dat je 2 of meer afbeeldingen zo gaat meesturen of andere situaties die je vooraf niet voorzag.
Het is een (hele) kleine moeite om het bovenstaande in een (of meer) functie(s) of methode(n) te vangen.
Ik laat alleen zien hoe iets werkt. Probleem?
Als je niet wilt weten hoe iets inhoudelijk werkt: gebruik vooral PHPMailer/een andere library en werp vooral geen blik in de broncode, je zou daar iets van kunnen leren.