image in php mail()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chris Bosmans

chris Bosmans

22/11/2015 13:48:55
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<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.
 
PHP hulp

PHP hulp

19/04/2024 07:30:50
 
- Ariën  -
Beheerder

- Ariën -

22/11/2015 13:56:32
Quote Anchor link
- Of het plaatje bestaat niet
- Of de mail-client blokkeert directe afbeeldingen.

Wat werkt er niet aan PHPmailer dan?
 
Chris Bosmans

chris Bosmans

22/11/2015 14:24:13
Quote Anchor link
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
 
Ivo P

Ivo P

22/11/2015 14:30:09
Quote Anchor link
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.)
 
Chris Bosmans

chris Bosmans

22/11/2015 14:31:45
Quote Anchor link
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)
 
Ivo P

Ivo P

22/11/2015 14:33:37
Quote Anchor link
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?
 
Chris Bosmans

chris Bosmans

22/11/2015 14:34:18
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
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" />
Gewijzigd op 22/11/2015 14:36:14 door chris Bosmans
 
- Ariën  -
Beheerder

- Ariën -

22/11/2015 15:37:54
Quote Anchor link
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.
Gewijzigd op 22/11/2015 15:40:52 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

22/11/2015 15:41:28
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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:
Afbeelding

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
Gewijzigd op 22/11/2015 16:07:09 door Thomas van den Heuvel
 
Ivo P

Ivo P

22/11/2015 20:18:52
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

22/11/2015 22:06:17
Quote Anchor link
Quote:
Daar gaat jouw zondagmiddag-script niet aan kunnen tippen.

Beetje vooringenomen opmerking?

Quote:
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.
Gewijzigd op 22/11/2015 22:19:51 door Thomas van den Heuvel
 
Ivo P

Ivo P

22/11/2015 22:19:49
Quote Anchor link
was geen kritiek op jouw script, maar een advies aan TS om dit niet zelf in elkaar te klussen.

Gezien de vraag uit de openingspost, schat ik de php-ervaring van TS niet al te hoog in. Het lijkt me daarom beter om een uitgeteste tool te pakken ipv. zelf een oplossing te bouwen.

Want zelfs al er voor copy-paste uit de bovenstaande post gekozen wordt, dan zal dat best werken, mits een beetje handig in het bestaande script toegevoegd. Ik heb de code eerder alleen maar globaal bekeken.

In detail: het zou al best mis kunnen lopen als de afbeelding een jpeg of gif is.
En die aanpassing is uiteraard niet moeilijk weer te verhelpen -en ik snap dat het een stukje voorbeeld code is-
maar het is zoveel gemakkelijker om een complete tool te pakken

Ik heb recent nog aan een project gewerkt waarin ook een simpele mail-tool gebruikt was.
"simpel" als in "wat kleiner in omvang dan phpmailer"
Helaas voorzag de tool in een hoop zaken niet, zoals een tekenset meegeven aan de tekst.
En daar ging mijn tekst toch flink de mist in.

Ja ik ben dan misschien wel fan van phpmailer.
Niet van Swift, maar dat is puur omdat ik daar nooit mee gewerkt heb.
 
Thomas van den Heuvel

Thomas van den Heuvel

22/11/2015 22:21:46
Quote Anchor link
Je hebt gelijk, iemand die al moeite heeft met het opstellen van een kloppende image tag moet niet zelf MIME-mails gaan bouwen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.