hoe krijg ik een foto bij in een brief die ik via de functie mail() verstuur
het is een html brief, en de foto is beschikbaar op de server.

ik had geprobeerd met gewoon de img tag

<img src="http://www.site.be/pics/foto.jpg/>


maar dan krijg ik een image holder in mijn mail met een kruisje er in.

ik heb wat op gezocht opt net, maar alles verwijst naar php mailer en die krijg ik momenteel niet aan de praat.

graag zou ik dus via de gewone mail() dit gebruiken, dit moet toch lukken.
- Of het plaatje bestaat niet
- Of de mail-client blokkeert directe afbeeldingen.

Wat werkt er niet aan PHPmailer dan?
smtp connect en heb van alles geprobeerd en niets werkte

kan misschien ook mijn netwerk zijn?



Toevoeging op 22/11/2015 14:28:51:

plaatje bestaat want heb directe link in browser gestoken
en wordt zichtbaar

ik gebruik outlook en hier is het probleem zichtbaar
in mijn webmail foto niet zichtbaar maar wel de ALT tekst is zichtbaar


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)
plaatjes kunnen meegestuurd worden in de mail.

phphulp doet dat niet.
Mogelijk heb je ooit toestemming gegeven om de afbeeldingen van phphulp wel te tonen?
voor phpmailer was het een uitgebreide functie denk ik
maar vind niet echt een goede beginner tut.


Ivo wat bedoel je met met de comment (privacy...)


Toevoeging op 22/11/2015 14:35:16:

ik wil niet echt plaatje mee sturen maar gewoon een link zoals php is prima...
waar zit dan het verschil in code?


Toevoeging op 22/11/2015 14:43:36:

als ik in source van de mail van php hulp kijk, zie ik dat zei just hetzelfde doen



body bgcolor="#e9e9e9" style="background-color: #e9e9e9; padding-bottom: 20px;">
<table cellpadding="0" cellspacing="0" border="0" width="660" style="margin: 0 auto; text-align: left; width: 660px; background: #e3e3e3;">
	<tr>
		<td valign="top" style="background: #ffffff;">
**doe ik ook->**		<img width="660" height="165" src="http://www.phphulp.nl/img/header-phphulp.jpg" alt="" title="" style="display: block" />

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.

Over afbeeldingen via attachments, dat kan heel simpel via phpMailer (of zonder, maar dat is complexer):
http://phpmailer.worxware.com/?pg=tutorial#3.3

Verder is er niet echt een tutorial voor phpMailer nodig, gezien ze al een mooie sample op hun site hebben staan voor de basis instellingen.
Ivo P op 22/11/2015 14:33:37
plaatjes kunnen meegestuurd worden in de mail.

Ik neem aan dat bedoeld wordt "inline afbeeldingen die direct getoond worden". Dit kan prima (via MIME mail).

EDIT: Ah, daar refereert de link die Ariën hierboven plaatst ook aan.

Je kunt het volgende doen binnen de text/html boundary:
<img src="cid:<?php echo $image_id ?>" alt="logo" />

Waarbij $image_id een random id is.

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.

Reageren