Html e-posta görüntü nasıl embed

5 Cevap php

Ben web geliştirme tamamen yeni bir adam değilim. Şimdi gömülmüş görüntü ile html e-posta göndermek için bir kod uygulamak çalışıyorum.

I already tried for simple html email with image but this image is taken from server. I don't have fluent english, but I think you understand what I meant to say.

Şimdiden teşekkürler

5 Cevap

I would strongly recommend using a library like PHPMailer to send emails.
It's easier and handles most of the issues automatically for you.

Gömülü (inline) görüntüme ilişkin, burada ne var their documentation:

Inline Eklentiler

There is an additional way to add an attachment. If you want to make a HTML e-mail with images incorporated into the desk, it's necessary to attach the image and then link the tag to it. For example, if you add an image as inline attachment with the CID my-photo, you would access it within the HTML e-mail with <img src="cid:my-photo" alt="my-photo" />.

In detail, here is the function to add an inline attachment:

$mail->AddEmbeddedImage(filename, cid, name);
//By using this function with this example's value above, results in this code:
$mail->AddEmbeddedImage('my-photo.jpg', 'my-photo', 'my-photo.jpg ');


Sana nasıl çalışır daha eksiksiz bir örnek vermek gerekirse:

<?php
require_once('../class.phpmailer.php');
$mail = new PHPMailer(true); // the true param means it will throw exceptions on     errors, which we need to catch

$mail->IsSMTP(); // telling the class to use SMTP

try {
  $mail->Host       = "mail.yourdomain.com"; // SMTP server
  $mail->Port       = 25;                    // set the SMTP port
  $mail->SetFrom('name@yourdomain.com', 'First Last');
  $mail->AddAddress('whoto@otherdomain.com', 'John Doe');
  $mail->Subject = 'PHPMailer Test';

  $mail->AddEmbeddedImage("rocks.png", "my-attach", "rocks.png");
  $mail->Body = 'Your <b>HTML</b> with an embedded Image: <img src="cid:my-attach"> Here is an image!';

  $mail->AddAttachment('something.zip'); // this is a regular attachment (Not inline)
  $mail->Send();
  echo "Message Sent OK<p></p>\n";
} catch (phpmailerException $e) {
  echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
  echo $e->getMessage(); //Boring error messages from anything else!
}
?>

Edit:

Regarding your comment, you asked how to send HTML email with embedded images, so I gave you an example of how to do that.
The library I told you about can send emails using a lot of methods other than SMTP.
Take a look at the PHPMailer Example page for other examples.

Eğer kütüphanesi tarafından desteklenen şekilde e-posta göndermek istemiyorsanız, yine mesajı oluşturmak için kütüphane kullanımı (gereken) bir yolu ya da diğer, o zaman bunu istediğiniz şekilde gönderin.

Örneğin:

Sen e-posta göndermek satırı değiştirebilirsiniz:

$mail->Send();

Bu grubu:

$mime_message = $mail->CreateBody(); //Retrieve the message content
echo $mime_message; // Echo it to the screen or send it using whatever method you want

Hope that helps. Let me know if you run into trouble using it.

Ben mektupta tüm görüntüleri bulmak ve iletiye verdiği bu işlevi kullanıyorum.

Parameters: Takes your HTML (which you want to send);
Return: The necessary HTML and headers, which you can use in mail();

Example usage:

define("DEFCALLBACKMAIL", "yourmail@yourdomain.com"); // WIll be shown as "from".
$final_msg = preparehtmlmail($html); // give a function your html*

mail('your@mail.com', 'your subject', $final_msg['multipart'], $final_msg['headers']); 
// send email with all images from html attached to letter


function preparehtmlmail($html) {

  preg_match_all('~<img.*?src=.([\/.a-z0-9:_-]+).*?>~si',$html,$matches);
  $i = 0;
  $paths = array();

  foreach ($matches[1] as $img) {
    $img_old = $img;

    if(strpos($img, "http://") == false) {
      $uri = parse_url($img);
      $paths[$i]['path'] = $_SERVER['DOCUMENT_ROOT'].$uri['path'];
      $content_id = md5($img);
      $html = str_replace($img_old,'cid:'.$content_id,$html);
      $paths[$i++]['cid'] = $content_id;
    }
  }

  $boundary = "--".md5(uniqid(time()));
  $headers .= "MIME-Version: 1.0\n";
  $headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
  $headers .= "From: ".DEFCALLBACKMAIL."\r\n";
  $multipart = '';
  $multipart .= "--$boundary\n";
  $kod = 'utf-8';
  $multipart .= "Content-Type: text/html; charset=$kod\n";
  $multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
  $multipart .= "$html\n\n";

  foreach ($paths as $path) {
    if(file_exists($path['path']))
      $fp = fopen($path['path'],"r");
      if (!$fp)  {
        return false;
      }

    $imagetype = substr(strrchr($path['path'], '.' ),1);
    $file = fread($fp, filesize($path['path']));
    fclose($fp);

    $message_part = "";

    switch ($imagetype) {
      case 'png':
      case 'PNG':
            $message_part .= "Content-Type: image/png";
            break;
      case 'jpg':
      case 'jpeg':
      case 'JPG':
      case 'JPEG':
            $message_part .= "Content-Type: image/jpeg";
            break;
      case 'gif':
      case 'GIF':
            $message_part .= "Content-Type: image/gif";
            break;
    }

    $message_part .= "; file_name = \"$path\"\n";
    $message_part .= 'Content-ID: <'.$path['cid'].">\n";
    $message_part .= "Content-Transfer-Encoding: base64\n";
    $message_part .= "Content-Disposition: inline; filename = \"".basename($path['path'])."\"\n\n";
    $message_part .= chunk_split(base64_encode($file))."\n";
    $multipart .= "--$boundary\n".$message_part."\n";

  }

  $multipart .= "--$boundary--\n";
  return array('multipart' => $multipart, 'headers' => $headers);  
}

PHPMailer otomatik olarak HTML e-posta görüntüleri gömmek için yeteneği vardır. Size HTML yazarken, dosya sistemine tam yol vermek zorunda:

<img src="/var/www/host/images/photo.png" alt="my photo" />

Bu otomatik olarak dönüşür:

<img src="cid:photo.png" alt="my photo" />

Sen MIME olarak e-posta kodlamak için ve o zaman temelde ek olarak e-posta ekleyebilirsiniz var. Siz e cid onları referans.

Alternatif e-posta ekleyebilirsiniz olamazdı ve doğrudan URL'ler kullanın ama çoğu posta programları spam e-posta adresleri canlılık algılamak için hile kullanmak gibi bu engeller.

Sen hangi dili söylüyorlar ama burada biri yok example.

Burada kodlama hakkında endişelenmenize gerek kalmadan bir dize değişkeni almak için bir yoldur.

Eğer varsa Mozilla Thunderbird, sizin için görüntü html kodunu almak için kullanabilirsiniz.

Ben bir ekran ile tam burada biraz öğretici, (bu powershell için, ama bu önemli değil) yazdı:

powershell email with html picture showing red x

Ve yine:

How to embed images in email