گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

مخفی کردن ایمیل از Bot ها Crawler ها و Spammer ها

نویسنده:
11 می 19

اگر طراح وب باشین قطعاً یکی از مشکلاتی که باهاش مواجه هستین گذاشتن ایمیل توی متن وب سایت هست. چون وقتی ایمیل را به صورت مستقیم مثلاً me@domain.com میگذارین در زمان کوتاهی Bot ها و Crawler های مربوط به Spammer ها این آدرس را پیدا میکنند و دریافت Spam از در و دیوار ایمیلتون شروع میشه.

یکی از راه حل‌های عمومی این هست که ایمیل را به صورت عجیب و غریب بنویسین ، مثلاً me [at] domain [dot] com یا me[@]domain.com و غیره ، که خوب این روش هم اصلاً مطمئن نیست و یک Cralwer نسبتاً باهوش میتونه ایمیل درست را استخراج کنه و شما فقط استخراج را کمی سخت کردین.

بهترین راه حل این هست که ایمیل را در فرمت یک عکس ذخیره کنید و اون عکس را نمایش بدین تا Crawler ها نتونن اصل ایمیل را پیدا کنند که این روش هم دردسرهای خاص خودش را داره و تراز کردن متن و عکس میتونه اعصاب خورد کن باشه و توی نمایش‌های Responsive هم مشکلات نمایشی به وجود بیاره چون شما نمیتونین متن عکس را با بزرگ و کوچیکی متون کناریش تراز و اندازه کنید!

اما چند روز پیش به یک روش خیلی جالب روی وب برخورد کردم که با استفاده از css ایمیل را به همون فرمت متنی نمایش بدیم و امکان استخراج را حقیقتاً سخت کنیم. کافیه از یک span به صورت زیر استفاده کنیم:

<span class="e-mail" data-user="me" data-website="domain.com"></span>

حالا توی CSS داریم:

.e-mail:before {
content: attr(data-website) "\0040" attr(data-user);
unicode-bidi: bidi-override;
direction: rtl;
}

و ایمیل شما به راحتی به صورت متنی ، تراز و هم اندازه با باقی متون به صورت محرمانه باقی میمونه.

تفاوت Email Marketing با فرستادن Spam چیه ؟

نویسنده:
11 می 15

من در زمینه Email Marketing فعالیت نمیکنم اما بارها پیش اومده که یک مشتری درخواست ارسال ایمیل‌های تبلیغاتی و انبوه را داشته. در گذشته این درخواست ها را قبول میکردم و نرم‌افزار کارایی هم براش تولید کرده بودم اما اخیراً اگه کسی چنین درخواستی بکنه قطعاً به سمت سرویس های ارسال ایمیل تبلیغاتی داخلی و خارجی مثل MailChimp راهنماییش میکنم و شرّش را از سرم کوتاه میکنم چون به دردسرهای بعدش که Blacklist شدن و Spam Marked شدن و درگیری با ISP و Datacenter میزبانی وب هست نمی ارزه !

ایمیل مارکتینگ

دلیلش خیلی خیلی واضحه ، همه مشتریانی که من باهاشون سر و کار داشتم تبلیغات سالم را از اسپم تشخیص نمیدهند. حتی بعد از اینکه سرویس ارسال ایمیل انبوه را خریداری میکنند اولین خواسته بعدیشون خریدن لیست آدرس ایمیل هست ! و این را هم نمیدونن که اولین گام در ارسال اسپم همین ارسال های کور کورانه هستش.

اصلی ترین فرق ایمیل مارکتینگ با اسپم فرستادن اینه که افرادی که شما بهشون ایمیل می‌زنید خودشون درخواست دریافت چنین ایمیل‌هایی را از طریق فرم‌های آنلاین روی وب سایت شما ، فرم کاغذی یا جلسه کاری رو در رو داشته اند. در این صورت شما باید از فکر جمع کردن آدرس‌های ایمیل افراد گمنام و ناشناس پرهیز کنید.

این خیلی طبیعیه که مدت زمان بیشتری طول میکشه تا شما مخاطب انبوهی داشته باشین اما در این زمینه باید بگم که مخاطب با کیفیت از کمیت اونها مهمتره. حتی شما باید به صورت دوره ای ایمیلی برای مخاطب ها بفرستین و از اون ها بپرسین آیا همچنان علاقه به دریافت ایمیل‌های شما دارند ؟ و افرادی که به این ایمیل‌ها پاسخ نمیدهند را هم از لیستتون حذف کنید. ممکنه شما دارین برای مخاطبی ایمیل میفرستین که یا شما را به عنوان Spam به نرم‌افزار یا سایت دریافت ایمیلش معرفی کرده یا کلاً دیگه به ایمیلش مراجعه نمیکنه.

در آخر هم حتماً میدونین که برای جدا کردن خودتون از یک ارسال کننده اسپم باید امکان لغو عضویت وی را فراهم کنین و حتماً آدرس فیزیکی محل کار خودتون را به همراه شماره تماس در زیر ایمیل بنویسید تا گیرنده احساس کنه ایمیل را از یک شخص یا مجموعه گرفته و نه یک ربات‌ !

ارسال ایمیل از طریق حساب کاربری Gmail با PHP (پی اچ پی) از طریق SMTP

نویسنده:
2 دسامبر 14

توی خیلی از انجمن‌های برنامه نویسی به این سؤال برخوردم که چطور باید با PHP از حساب کاربری Gmail ایمیل ارسال کنیم. عده‌ای هم که میدونستند چطور باید این کار را بکنند اکثر ناموفق بودند. تصمیم گرفتم این مطلب را بنویسم تا مشکل خیلی از دوستان حل بشه.

برای ارسال ایمیل از Gmail برخلاف حالتی که از طریق وب سرور و یک MTA مثل Sendmail ایمیل ارسال میکنیم ، باید از SMTP استفاده کنیم. لازم هم نیست خیلی در مورد SMTP بدونیم و کلاس PHPMailer به خوبی SMTP را پشتیبانی میکنه. پس اولین کار اینه که PHPMailer را دانلود کنیم و بسته به مسیری که قرار دادیمش توی فایل ارسال ایمیل صداش کنیم. حواستون باشه که توی Package ی که دانلود میکنید یک فایل smtp.php هم هست که باید اون را هم در کنار فایل phpmailer.php قرار بدین.

دو نکته مهم :

۱ – اولین نکته مهمی که در رابطه با Gmail وجود داره این هست که Gmail از SSL/TLS استفاده میکنه.TLS روی پورت ۵۸۷ هست و توی کد بایستی به درستی تنظیم بشه.

۲ – دومین نکته مهمی که وجود داره بحث امنیت بالای خود Gmail هست. Gmail به شدت روی IP درخواست های ورود (در حالت SMTP هم شما مثل وب Login میکنید) حساس هست و مثلاً اگه شما از حساب Gmail خودتون توی ایران استفاده میکنید و سعی کنید با SMTP یک ایمیل از سرر خودون که مثلاً در انگلستان هست ارسال کنید. ۹۹ درصد Gmail مانع از Authentication پرتوکل SMTP میشه و خطای Authentication خواهید گرفت. یک ایمیل هم با افتخار از Gmail براتون ارسال میشه که شخص دیگری با پسورد صحیح شما از یک جای دیگه سعی کرده وارد بشه و ما جلوش را گرفتیم !!! :(. این موضوع دو تا راه حل داره :

راه حل اول : حساب کاربری Gmail را روی سرور خودتون بسازین و همیشه هم از همون سرور و IP درخواست SMTP بدین.

راه حل دوم : توی تنظیمات حساب کاربری گوگل در بخش Security → Account Permissions آیتم Access for less secure apps را Enabled کنین (این تغییر تا زمان نوشته شدن این مطلب وجود داشت و ممکنه بعد از مدتی مکانش یا حالتش عوض بشه یا حتی gmail بخواد که شما IP های معتبر مد نظرتون را تعیین کنین).

و اما کد :

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

 require("phpmailer.php");
 
 $mailObj = new phpmailer();
 $mailObj->IsSmtp();
 $mailObj->SMTPSecure = "tls";
 $mailObj->Host = "smtp.gmail.com";
 $mailObj->Port = "587";
 $mailObj->SMTPAuth = true;
 $mailObj->Username = "username@gmail.com";
 $mailObj->Password = "password";
 $mailObj->SMTPDebug = true; 
 $mailObj->CharSet = "utf-8";
 $mailObj->FromName = "Fullname";
 $mailObj->From = "username@gmail.com";
 $mailObj->AddAddress("recipient@domain.com",""); 
 $mailObj->Subject = "=?UTF-8?B?".base64_encode("عنوان فارسی نامه")."?=";
 $mailObj->Body = "متن نامه";
 $mailObj->Send();
 
 if ($mailObj->ErrorInfo != "")
 throw new Exception($mailObj->ErrorInfo);
 else 
 echo "Mail sent.";
 
 unset($mailObj);

پی نوشت : با وجود بررسی و دقتی که من در چگونگی حل مشکل ارسال از طریق Gmail SMTP داشتم باز هم یکی از دوستان مشکل داشتند که پس از بررسی متوجه ۲ نکته شدم ، توجه داشته باشید که فقط زمانی این دو نکته را اعمال کنید که خطای Authentication Failure بگیرین یا توی برگشتی Debug جمله Please log in via your web browser بگیرین و در ضمن اگه نکته ۱ مشکل را حل کرد نیاز به اعمال نکته ۲ نیست :

نکته ۱ : پس از ورود به حساب gmail روی این لینک https://www.google.com/accounts/DisplayUnlockCaptcha کلیک کنید و Accept کنید.
نکته ۲ : گذرواژه خودتون را عوض کنید و گذرواژه‌ای شامل حروف کوچک و بزرگ ، اعداد و علایم با طول حداقل ۸ کاراکتر انتخاب کنید.