Les gens vont sonner pour vous dire d'utiliser SwiftMailer ou d'une autre bibliothèque. Mais ce n'est pas si difficile. C'est très difficile, mais pas dur. Voici une fonction que j'utilise. Je l'ai anonymisé un peu, et j'espère ne rien casser. Dans le message html (que je reçois d'une autre fonction), un lien vers votre image jointe de cette façon:
$output .= '<p><img src="cid:' . $linkID . '" alt="graph" /></p>';
Où $linkID
est la même valeur utilisée dans la fonction ci-dessous.
public function sendEmail($emailAddress)
{
$random_hash = md5(date('r', time()));
$htmlString = $this->getHTML($random_hash);
$message = "--mixed-$random_hash\n";
$message .= 'Content-Type: multipart/alternative; boundary="alt-' . $random_hash . '"' . "\n\n";
$message .= 'MIME-Version: 1.0' . "\n";
$message .= '--alt-' . $random_hash . "\n";
$message .= 'Content-Type: text/plain; charset="iso-8859-1"' . "\n";
$message .= 'Content-Transfer-Encoding: 7bit' . "\n\n";
// text message
$message .= strip_tags($htmlString) . "\n\n";
$message .= '--alt-' . $random_hash . "\n";
$message .= 'Content-Type: text/html; charset="iso-8859-1"' . "\n";
// $message .= 'MIME-Version: 1.0' . "\n";
$message .= 'Content-Transfer-Encoding: 7bit' . "\n\n";
// html message
$message .= $htmlString . "\n\n";
$message .= '--alt-' . $random_hash . '--' . "\n";
// graph image
if($this->selectedGraph != 0)
{
$graphString = $this->getGraph();
$graphString = chunk_split(base64_encode($graphString));
$linkID = 'graph-' . $random_hash . '-image';
$message .= '--mixed-' . $random_hash . "\n";
$message .= 'MIME-Version: 1.0' . "\n";
$message .= 'Content-Transfer-Encoding: base64' . "\n";
$message .= 'Content-ID: ' . $linkID . "\n";
$message .= 'Content-Type: image/gif; name="graph.gif"' . "\n";
$message .= 'Content-Disposition: attachment' . "\n\n";
$message .= $graphString;
$message .= '--mixed-' . $random_hash . '--' . "\n";
}
else
{
$message .= '--mixed-' . $random_hash . '--' . "\n";
}
$headers = 'From: ' . $this->from. "\r\nReply-To: " . $this->replyto;
$headers .= "\r\nContent-Type: multipart/related; boundary=\"mixed-" . $random_hash . "\"\r\nMIME-Version: 1.0";
$flags = '-f ' . BOUNCED_EMAIL_ADDRESS;
return mail($emailAddress, $this->subject, $message, $headers, $flags);
}
Que ce soit intéressant ou non, c'est une autre question. Si vous joignez l'image, vous utilisez la bande passante pour envoyer le message. Peut-être vaut-il mieux utiliser la bande passante en même temps plutôt que de l'étaler? Peut être pas.
Je n'ai pas utilisé d'images jointes jusqu'à ce que je devais envoyer une image différente à chaque destinataire. Je n'étais pas sur le point de stocker et de gérer toutes ces images sur notre serveur (et essayer de les nommer de façon unique).
est '$ this-> getGraph()' chargement juste le contenu de l'image comme 'file_get_contents()' serait? – animuson
Dans mon cas, getGraph() crée réellement l'image en utilisant une bibliothèque de graphiques, mais oui, c'est la même idée. –
Une raison pour envoyer l'image dans le courrier au lieu d'un lien pourrait être que certains clients de messagerie n'ouvriront pas d'images sur un serveur distant, car cela pourrait révéler que l'utilisateur a ouvert le message. Ou au moins le client de messagerie demandera à l'utilisateur s'il (elle) visionnera les images à distance. –