PDA

View Full Version : درج تصویر در ایمیل HTML بصورت Embedded



eshpilen
دوشنبه 09 بهمن 1391, 11:52 صبح
من الان این دو روش رو امتحان کردم که کار کردن:

روش اول:


<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');

echo 1;

$str = '<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAAB zenr0AAACR0lEQVRYha1XvU4bQRD+bF/JjzEnpUDwCPROywPgB4h0PUWkFEkLposUIYyEU4N5AEpewnkDC iQcjBQpWLiLjk3DrnZnZ3buTv4ae25mZ+Z2Zr7daxljDGpg++M v978Y5Nhc6+Di5tk9u7/bR3cjY9eOJnMUh3mg5y0roBjk+PF1F+1WCwCCJKTgpz9/ozjMg+ftVQQ/PtrB508f1OAcau8ADW5xfLRTOzgAZMPxTNy+YpDj6vaPGtxPgv pL7QwAtKXts8GqBveT8P1p5YF5x8nlo+n1p6bXn5ov3x9M+fZm jDGRXBXWH5X/Lv4FdqCLaLAmwX1/VKYJtIwJeYDO+dm3PSePJnO8vJbJhqN62hOUJ8QpoD1Au5kmIe ntr9TobAK04RyJEOazzjV9KokogVRwjvm6652kniYRJUBrTkft 5bUEAGyuddzz7noHALBYls5O09skaE+4HdAYruobUz1FVI6qcy 7xRFW95A915pzjiTp6zj7za6fB1lay1/Ssfa8/jRiLw/n1k9tizl7TS/aZ3xDakdqUByR/gDcF0qJV8QAXHACy+7v9wGA4ngWLVskDo8kcg4Ot8FpGa8PV0I 7MyeWjq53f7Zrer3nyOLYJpJJowgN+g9IExNNQ4vLFskwyJtVr d8JoB7g3b4rz66dIpv7UHqg611xw/0om8QT7XXBx84zheCbKGui2U9n3p/YAlSVyqRqc+kt+mCyWJTSeoMGjOQciOQDXA6kjVTsL6JhpYHtA +wihPaGOWgLqnVACPQua4j8NK7bPLP4+qQAAAABJRU5ErkJggg ==" width="32" height="32">';

$to = "he@example.com";
$subject = "HTML email";

$message = "
<html>
<head>
<title>HTML email</title>
</head>
<body>".$str."
</body>
</html>
";

// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";

// More headers

mail($to,$subject,$message, $headers);

echo 2;

?>

روش دوم:


<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');

echo 1;

$str = 'This is a MIME-encoded message. If you are seeing this, your mail
reader is old.
--outer-boundary
Content-Type: text/plain; charset=us-ascii

This message might make you :) or it might make you :(

--outer-boundary
MIME-Version: 1.0
Content-Type: multipart/related;
type="text/html"; start="<body@here>"; boundary="inner-boundary"

--inner-boundary
Content-Type: text/html; charset=us-ascii
Content-Disposition: inline
Content-ID: <body@here>

<html>
<body>
This message might make you
<img src="cid:smile@here" alt="smile">
or it might make you
<img src="cid:frown@here" alt="frown">
</body>
</html>

--inner-boundary
Content-Type: image/gif
Content-Disposition: inline
Content-Transfer-Encoding: base64
Content-ID: <smile@here>

R0lGODlhEAAQAKEBAAAAAP//AP//AP//ACH5BAEKAAIALAAAAAAQABAAAAIzlA2px6IBw2
IpWglOvTahDgGdI0ZlGW5meKlci6JrasrqkypxJr8S0oNpgqkG LtcY6hoFADs=

--inner-boundary
Content-Type: image/gif
Content-Disposition: inline
Content-Transfer-Encoding: base64
Content-ID: <frown@here>

R0lGODlhEAAQAKEBAAAAAAD//wD//wD//yH5BAEKAAIALAAAAAAQABAAAAIzlA2px6IBw2
IpWglOvTahDgGdI0ZlGW5meKlci75drDzm5uLZyZ1I3Mv8ZB5K rtgg1RoFADs=

--inner-boundary--

--outer-boundary--';

$to = "he@example.com";
$subject = "HTML email";

$message = "
<html>
<head>
<title>HTML email</title>
</head>
<body>".$str."
</body>
</html>
";

// Always set content-type when sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= 'Content-type: multipart/alternative; boundary="outer-boundary"' . "\r\n";

// More headers

mail($to,$subject,$message, $headers);

echo 2;

?>

حالا نمیدونم کدوم برای ایمیل بهتره. منظورم از نظر استاندارد بودن و محدودیت ها (مثلا محدودیت حجم تصویر) و ساپورت بیشتره.
گفتم فعلا تا اینجا تحقیقات و تستهایی که انجام دادم رو ثبت کنم (شاید بعدا خودمم دنبالش بگردم!!).

ضمناً توجه داشته باشید که کلا ایمیل های HTML ممکنه در مواردی به دلایل امنیتی پاکسازی بشن، تصویرها بصورت پیشفرض نشون داده نشن، و حتی ممکنه وجود تصویرهای زیاد یا حجیم در ایمیل باعث افزایش امتیاز اونها برای تشخیص داده شدن بعنوان اسپم بشه.

اگر خواستید فایلهای دیگر مثل فایل فلش، ویدئو، صدا و غیره رو هم در ایمیل Embed کنید فکر کنم با همین روشها بشه، ولی در خیلی موارد اینطور فایلها/تگها ممکنه توسط سرویسهای ایمیل یا نرم افزارهای کلاینت ایمیل، بخاطر مسائل امنیتی فیلتر بشن.

راستی چون ممکنه فروم کدها رو خراب کنه فایلشون رو ضمیمه کردم.