PDA

View Full Version : تشخيص خوانده شدن ايميل هاي ارسالي



shimafaraz
دوشنبه 07 اردیبهشت 1394, 07:49 صبح
سلام دوستان
من يك خبرنامه ساختم . تمام مراحل درست انجام ميشه و مشكلي ندارم ولي ميخوام اين قابليت رو اضافه كنم كه هر كي ايميل رو باز كرد و خوند من تو سيستمم متوجه بشم
ولي هيچ اطلاعي از روش پياده سازيش ندارم
ممنون ميشم راهنمايي كنيد

-سیّد-
دوشنبه 07 اردیبهشت 1394, 08:19 صبح
سلام دوستان
من يك خبرنامه ساختم . تمام مراحل درست انجام ميشه و مشكلي ندارم ولي ميخوام اين قابليت رو اضافه كنم كه هر كي ايميل رو باز كرد و خوند من تو سيستمم متوجه بشم
ولي هيچ اطلاعي از روش پياده سازيش ندارم
ممنون ميشم راهنمايي كنيد
سلام
برای این کار تا جایی که من می‌دونم روش درست و حسابی و استاندارد وجود نداره. باید یه جوری بپیچونید!
یه روش اینه که یه عکس توی ایمیلتون بذارید، مثلاً به آدرس http://test.ir/logo.php?id=1234 و توی فایل logo.php توی خروجی، عکس لوگو رو نمایش بدید. اون وقت کافیه که این id که می‌ذارید برای هر ایمیل، id متناظر با کاربر باشه و در نتیجه به محض این که طرف ایمیلش رو باز کنه (البته در صورتی که تنظیم کرده باشه که عکس‌های خارجی توی ایمیلش نمایش داده بشن)، یه درخواست میاد برای صفحه‌ی logo.php با id اون کاربر و شما می‌تونید اون رو مثلاً در پایگاه داده ذخیره کنید که فلانی ایمیلش رو باز کرد.

این رو هم ببینید:
http://stackoverflow.com/questions/14000277/tracking-email-opens-with-a-real-image
این هم نکته‌ی خوبیه که اول عکس رو نمایش بدید، بعد کارتون رو بکنید.

arash691
دوشنبه 07 اردیبهشت 1394, 10:57 صبح
میتونید یه لینک بذارید و از کاربر بخواین برای قطعی شدن عضویت در خبرنامه بر روی اون لینک کلیک بکنه لینک رو با یک token خاصی از نام کاربری یا هرچیز دیگه ای پر کنید و سمت خودتون چک کنید و flag مربوط به ثبت نهایی خبرنامه شخص رو اپدیت کنید.

m.esmaeilzadeh
دوشنبه 07 اردیبهشت 1394, 11:04 صبح
سلام
برای این کار تا جایی که من می‌دونم روش درست و حسابی و استاندارد وجود نداره. باید یه جوری بپیچونید!
یه روش اینه که یه عکس توی ایمیلتون بذارید، مثلاً به آدرس http://test.ir/logo.php?id=1234 و توی فایل logo.php توی خروجی، عکس لوگو رو نمایش بدید. اون وقت کافیه که این id که می‌ذارید برای هر ایمیل، id متناظر با کاربر باشه و در نتیجه به محض این که طرف ایمیلش رو باز کنه (البته در صورتی که تنظیم کرده باشه که عکس‌های خارجی توی ایمیلش نمایش داده بشن)، یه درخواست میاد برای صفحه‌ی logo.php با id اون کاربر و شما می‌تونید اون رو مثلاً در پایگاه داده ذخیره کنید که فلانی ایمیلش رو باز کرد.

این رو هم ببینید:
http://stackoverflow.com/questions/14000277/tracking-email-opens-with-a-real-image
این هم نکته‌ی خوبیه که اول عکس رو نمایش بدید، بعد کارتون رو بکنید.


ولی ظاهرا سرویس هایی مثل یاهو و جیمیل خودشون یکبار ایمیل رو اتوماتیک باز میکنن و محتوا رو مورد بررسی قرار میدن که مشکلی از نظر امنیتی یا مسائل اخلاقی و غیره ( طبق قوانین خودشون برای فعالیت بهتر کاربران ) نداشته باشه. اینجوری که کلا همیشه لینک رو یکبار باز میکنه ؟!؟!؟

-سیّد-
دوشنبه 07 اردیبهشت 1394, 11:43 صبح
میتونید یه لینک بذارید و از کاربر بخواین برای قطعی شدن عضویت در خبرنامه بر روی اون لینک کلیک بکنه لینک رو با یک token خاصی از نام کاربری یا هرچیز دیگه ای پر کنید و سمت خودتون چک کنید و flag مربوط به ثبت نهایی خبرنامه شخص رو اپدیت کنید.
فکر می‌کنم درست متوجه منظورشون نشدید. این که شما می‌گید، برای ایمیل تأیید عضویت کاربرد داره. اونجوری که من فهمیدم، منظور دوستمون اینه که هر وقت که یه ایمیل به یکی می‌زنیم، وقتی بازش کرد متوجه بشیم.


ولی ظاهرا سرویس هایی مثل یاهو و جیمیل خودشون یکبار ایمیل رو اتوماتیک باز میکنن و محتوا رو مورد بررسی قرار میدن که مشکلی از نظر امنیتی یا مسائل اخلاقی و غیره ( طبق قوانین خودشون برای فعالیت بهتر کاربران ) نداشته باشه. اینجوری که کلا همیشه لینک رو یکبار باز میکنه ؟!؟!؟
ببینید «باز کردن» ایمیل خیلی حرف فنی‌ای نیست. باز کردن یعنی چی؟ اینی که شما می‌گید، اینه که سروری که ایمیل رو دریافت می‌کنه یه دور محتوا رو چک می‌کنه. ولی این که می‌گیم کاربر ایمیل رو باز می‌کنه، یعنی توسط یه client (یا مرورگر، یا email client) ایمیل رو باز می‌کنه، یعنی یه درخواست به سرور می‌فرسته، و سرور محتویات رو بهش برمی‌گردونه.
حالا در این موردی که من گفتم (که آدرس یه عکس رو بذاریم)، وقتی خود سرور داره محتوا رو بررسی می‌کنه (که HTML هست)، وقتی به عکس برخورد می‌کنه (دقت کنید که خود عکس اینجا نیست، فقط آدرسش هست) نمی‌ره درخواست بده به سرور مورد نظر و خود محتوای عکس رو دریافت کنه. اما وقتی کاربر توسط مثلاً مرورگرش این محتوا رو دریافت می‌کنه، مرورگر به محض این که به آدرس عکس برخورد می‌کنه یه درخواست می‌فرسته برای سرور مورد نظر تا عکس رو load کنه.

m.esmaeilzadeh
دوشنبه 07 اردیبهشت 1394, 20:01 عصر
فکر می‌کنم درست متوجه منظورشون نشدید. این که شما می‌گید، برای ایمیل تأیید عضویت کاربرد داره. اونجوری که من فهمیدم، منظور دوستمون اینه که هر وقت که یه ایمیل به یکی می‌زنیم، وقتی بازش کرد متوجه بشیم.


ببینید «باز کردن» ایمیل خیلی حرف فنی‌ای نیست. باز کردن یعنی چی؟ اینی که شما می‌گید، اینه که سروری که ایمیل رو دریافت می‌کنه یه دور محتوا رو چک می‌کنه. ولی این که می‌گیم کاربر ایمیل رو باز می‌کنه، یعنی توسط یه client (یا مرورگر، یا email client) ایمیل رو باز می‌کنه، یعنی یه درخواست به سرور می‌فرسته، و سرور محتویات رو بهش برمی‌گردونه.
حالا در این موردی که من گفتم (که آدرس یه عکس رو بذاریم)، وقتی خود سرور داره محتوا رو بررسی می‌کنه (که HTML هست)، وقتی به عکس برخورد می‌کنه (دقت کنید که خود عکس اینجا نیست، فقط آدرسش هست) نمی‌ره درخواست بده به سرور مورد نظر و خود محتوای عکس رو دریافت کنه. اما وقتی کاربر توسط مثلاً مرورگرش این محتوا رو دریافت می‌کنه، مرورگر به محض این که به آدرس عکس برخورد می‌کنه یه درخواست می‌فرسته برای سرور مورد نظر تا عکس رو load کنه.

منظور از باز کردن بسیار بسیار روشن و اصلا چیزی نیست که بخوایم بگیم حرفه ای است یا نه ؟!
در کلی از دستورات زبان های برنامه نویسی از open یا opening استفاده شده که همون معنی باز یا باز کردن رو میده !!!
به نظر من شما تمرین کنید که خیلی شتاب زده به هر چیزی ایراد نگیرید , چون واقعا اینجا چند نفری به نظر شما خندیدیم :چشمک:
اصلا راه حلی هم که شما گفتید کارآمد نیست , چون در هر صورت سرویس دهنده لینک ها رو باز و محتوای صفحه رو بررسی میکنه و شما هر چی پارامتر هم تنظیم کرده باشید باز اونور بر روی سرور ارسال کننده اعمال خواهد شد و فایده ای نخواهد داشت ...

-سیّد-
دوشنبه 07 اردیبهشت 1394, 22:11 عصر
منظور از باز کردن بسیار بسیار روشن و اصلا چیزی نیست که بخوایم بگیم حرفه ای است یا نه ؟!
در کلی از دستورات زبان های برنامه نویسی از open یا opening استفاده شده که همون معنی باز یا باز کردن رو میده !!!

:)
لطفاً موقع خوندن جواب‌ها یه مقدار بیشتر دقت کنید. من نگفتم حرفه‌ای، گفتم فنی! چی گفتم؟ گفتم «باز کردن ایمیل» حرف فنی‌ای نیست. باز هم تکرار می‌کنم!
می‌شه یکی از زبان‌های برنامه‌نویسی رو به من نشون بدید که توش بشه «ایمیل رو باز کرد»؟!
اون open هم که می‌گید، معمولاً در مورد file یا socket استفاده می‌شه، نه ایمیل.



به نظر من شما تمرین کنید که خیلی شتاب زده به هر چیزی ایراد نگیرید , چون واقعا اینجا چند نفری به نظر شما خندیدیم :چشمک:

:)
خوب شما لطف دارید! خوشحالم که باعث شدم لبخند روی لب چند نفر بیاد!
البته اگه یه مقدار دقیق‌تر جواب من رو خونده بودید، متوجه می‌شدید که به چیزی ایراد نگرفتم. فقط برای روشن شدن بحث، یه مقدار دقیق صحبت کردم. نمی‌دونم چرا سوء تفاهم شد و شما تصور کردید که به شما ایراد گرفتم.



اصلا راه حلی هم که شما گفتید کارآمد نیست , چون در هر صورت سرویس دهنده لینک ها رو باز و محتوای صفحه رو بررسی میکنه و شما هر چی پارامتر هم تنظیم کرده باشید باز اونور بر روی سرور ارسال کننده اعمال خواهد شد و فایده ای نخواهد داشت ...
خوب سعی می‌کنم کامل‌تر توضیح بدم تا متوجه راه حل بشید (البته توجه دارید که این راه حل عیناً توی اون لینک stackoverflow که فرستاده بودم هم اومده):

شما یه ایمیل به سرور gmail می‌فرستید، به این شکل:


Hello world!<br />
<hr />
<b>Salam donya! :D</b><br />
<img src="http://test.ir/logo.php?id=100" />

سرور وقتی این ایمیل رو دریافت می‌کنه، به قول شما محتواش رو بررسی می‌کنه که شامل چیز خطرناکی نباشه، یا اسپم نباشه، یا هر دلیل دیگه. بعید می‌دونم سرور جیمیل وقتی به اون عکس مورد نظر به آدرس http://test.ir/logo.php?id=100 می‌رسه، بره و عکس رو دریافت کنه. البته ممکنه هم این کارو بکنه، نمی‌دونم. ولی فکر نمی‌کنم دلیلی برای دریافت عکس داشته باشه.

خوب حالا صاحب ایمیل میاد و از طریق مرورگر و مراجعه به gmail.com فهرست ایمیل‌هاش رو مشاهده می‌کنه. وقتی که روی این ایمیل مورد نظر کلیک می‌کنه، سرور جیمیل این کد HTML که بالاتر نوشتم رو براش ارسال می‌کنه. مرورگر این کد رو می‌گیره و شروع به پردازش اون و نمایشش توی خروجی می‌کنه. مثلاً وقتی به تگ br برخورد می‌کنه، می‌ره سر خط. یا وقتی به تگ hr می‌رسه، یه خط صاف می‌کشه. وقتی هم به تگ img می‌رسه، در صورتی که اون کاربر توی تنظیمات جیمیلش گفته باشه که external image ها نشون داده بشن، اینجا مرورگر یه درخواست می‌فرسته به آدرس http://test.ir/logo.php?id=100 تا عکس رو بگیره و به کاربر نمایش بده، و اینجاس که شما متوجه می‌شید اون کاربر ایمیلش رو باز کرده.

یعنی پردازشی که سرور جیمیل می‌کنه، با پردازشی که مرورگر می‌کنه، خیلی فرق می‌کنه. سرور جیمیل موقعی که به تگ br برخورد می‌کنه نمی‌ره سر خط!!!!

پ.ن. چند تا نکته:
یکی این که ممکنه کاربر توی تنظیمات ایمیلش، load شدن عکس‌ها رو فعال نکرده باشه، که در این صورت شما متوجه باز شدن ایمیل نخواهید شد.
دوم این که ممکنه یه سرور ایمیل (مثلاً جیمیل) موقع پردازش ایمیل‌ها، عکس‌ها رو هم load کنه که باعث می‌شه قبل از این که کاربر ایمیلش رو باز کنه درخواست مورد نظر به سرور شما فرستاده بشه (این رو نمی‌دونم، باید تست کنید). در این صورت، وقتی که کاربر ایمیل رو باز کرد، برای بار دوم درخواست به سرور شما میاد که می‌تونید از این طریق متوجه بشید.
سوم این که ممکنه در صورتی که سرور ایمیل ببینه شما یه عکس با پسوند مثلاً php توی ایمیلتون گذاشتید، خیلی خوشش نیاد و یه مقدار به اسپم بودن شما شک کنه. برای همین شاید بهتر باشه از روش‌های آدرس‌دهی دیگه مثل http://test.ir/logo/100 استفاده کنید، یا حتی از پسوندهای fake، یعنی مثلاً آدرس این باشه: http://test.ir/logo.jpg?id=100 ولی واقعاً پشتش فایل jpg نباشه و php باشه.

Unique
سه شنبه 08 اردیبهشت 1394, 12:03 عصر
به نظر من شما تمرین کنید که خیلی شتاب زده به هر چیزی ایراد نگیرید , چون واقعا اینجا چند نفری به نظر شما خندیدیم
فکر نمیکنین باید کمی محترمانه تر با دوستان برخورد کنید. جناب سید توی پست هایی که من دیدم همیشه ادب را رعایت کردن و حتی اگه کسی اشتباه بگه دلیل نمیشه من یا فرد دیگه ای بهش بخندیم. این جور حرف زدن ها بار علمی انجمن را پایین میاره و آدم های با سوادی مثل آقای سید را فراری میده. امیدوارم مدیر برخورد کنه.


اصلا راه حلی هم که شما گفتید کارآمد نیست , چون در هر صورت سرویس دهنده لینک ها رو باز و محتوای صفحه رو بررسی میکنه و شما هر چی پارامتر هم تنظیم کرده باشید باز اونور بر روی سرور ارسال کننده اعمال خواهد شد و فایده ای نخواهد داشت ...
اتفاقا راه حل ایشون کاملا درسته. همه Email Marketing ها دارن به همین شکل کار میکنند. این عکس که معمولا یک عکس ۱ پیکسلی هست علاوه بر اینکه میگه ایمیل خونده شده یا نه میشه فهمید چند بار خونده شده ، کاربر روی چه Device ی بازش کرده ، کاربر از کجای دنیا بازش کرده و غیره ... پس جواب ایشون کاملا درسته.

اما موضوع گوگل و باز کردن فایل و این حرفا :
گوگل از سال ۲۰۱۳ (اوخر سال اگه اشتباه نکنم) تصمیم گرفت عکس ها را Cache کنه ! پس اولا عکس ها برای هیمشه ذخیره نمیشن و Cache را ۲۴ ساعته قرار داده. در ضمن من هیچ جایی نخوندم که در زمان دریافت email گوگل بیاد عکس ها را cache کنه. در واقع این cache در زمان درخواست نمایش ایمیل از طرف کاربر انجام میشه و خیلی ها هم میگن این cache روی IMAP و POP3 اتفاق نمیفته (فقط خوندم و خودم دقیقا سورس ها را چک نکردم). پس شما میتونید چک کنید ایمیل باز شده یا نه !‌ چون بالاخره گوگل داره برای کاربر درخواست اون عکس را میده.

اما اتفاق های بد هم میفته اینجا ، توی زمانی که گوگل ایمیل را cache میکنه نمیشه فهمید کاربر چند بار ایمیل را باز کرده (خیلی از سرویس های ایمیل انبوه این قابلیت را داشتن) ، نمیشه فهمید Deivice کاربر چیه چون درخواست کننده عکس گوگل هست نه مرورگر کاربر ! هیمنطور نمیتونیم بفهمیم موقعیت کاربر کجاست !

تنها موردی که توسط گوگل در دسامبر ۲۰۱۴ حل شد این بود که اگه توی header های عکس خط زیر را بفرستین گویا دیگه گوگل برای ۲۴ ساعت cache نمیکنه و میشه reopen ها یا همون تعداد باز کردن مجدد ایمیل را هم محاسبه کرد.

Cache-Control: no-cache, max-age=0

در مورد yahoo و live و غیره هیچ کدوم از این مشکلات وجود نداره.

پی نوشت : تمام اطلاعات بالا فقط دانسته هایی از مطالعات بنده در سطح وب بوده و به صورت عملی توسط من انجام نشده اما منابعش بسیار قابل اعتماد هستند. مثلا این مطلب MailChimp (https://blog.mailchimp.com/how-gmails-image-caching-affects-open-tracking/) توی وبلاگش یکی از استناد ها هستش. یا این مطلب توی Movable Ink (http://blog.movableink.com/real-time-content-and-re-open-tracking-return-to-gmail/) یکی دیگر از استناد ها.

shimafaraz
سه شنبه 08 اردیبهشت 1394, 15:33 عصر
ممنون از توضيحات دوستان اين روش عكس رو تست ميكنم ببنينم ميشه . تشكر ميكنم از راهنماييتون