PDA

View Full Version : سوال: فاصله انداختن بین ارسال ایمیل



navid3d_69
دوشنبه 10 مهر 1391, 15:08 عصر
سلام من می خوام توی قسمت سایتم که کاربرا ایمیل می فرستند فاصله ارسال بیبن هر ایمیل مثلا 1 دقیقه باشه یعنی کاربر اگر به 100 از دوستاش ایمیل ارسال کرد برنامه تمامی ایمیل هارو بگیره و ارسال کنه بین هر ارسال 1 دقیقه فاصله ایجاد کنه

Unique
سه شنبه 11 مهر 1391, 01:43 صبح
میتونی از تابع sleep استفاده کنی.

navid3d_69
سه شنبه 11 مهر 1391, 16:31 عصر
میشه بیشتر راهنمایی کنید چون تا حالا از این تابع استفاده نکردم

tem988
چهارشنبه 12 مهر 1391, 00:50 صبح
ببین با sleep نمیشه.
چون وقتی از این استفاده کنی و به ازای هر ایمیل 1 ثانیه بزنی و اگر ایمیل ها 10 تا باشه اسکریپت بعد از 10 ثانیه اجرا میشه نه هر چرخش.
اول یک فایل ارسال ایمیل بساز که limit 10 باشه و برای هر ایمیل توی جدول یک وضعیت مشخص کن یعنی یک فیلد status
بعد این فایل رو داخل cronjobs که توی هاستته اضافه کن که هر چند دقیقه یک بار اجرا بشه و هر دفعه که فایل اجرا میشه و به اون ایمیل هایی که ارسال میشه وضعیتشون از 0 آپدیت بشه به 1
بعد دفعه بعد باید ایمیل هایی که وضعیتشون 0 هست رو بگیری و ایمیل ارسال کنه و همین طور ادامه داره تا وقتی که تموم بشه.

Unique
چهارشنبه 12 مهر 1391, 01:26 صبح
چون وقتی از این استفاده کنی و به ازای هر ایمیل 1 ثانیه بزنی و اگر ایمیل ها 10 تا باشه اسکریپت بعد از 10 ثانیه اجرا میشه نه هر چرخش.
راستش من تا حالا برای ارسال ایمیل از sleep استفاده نکردم ! اما منظور شما را هم متوجه نشدم ، مثلا اجرا شدن اسکریپت زیر با عوض کردن خط echo و استفاده از تابع mail چه فرقی میکنه ؟ چون این اسکریپت درست کار کردن sleep توی یک حلقه را به خوبی نشون میده !


$max_count = 10;
$i = 1;
while ($i < $max_count){
echo date("H:i:s")."<br>";
$i += 1;
sleep(2);
}

Unique
چهارشنبه 12 مهر 1391, 01:32 صبح
من تا حالا خیلی توی این انجمن دیدم که افراد میخوان بین ارسال هاشون 1 دقیقه یا 30 ثانیه فاصله بندازند ! میشه یک منبع یا دلیلی برای این کار کسی ارائه کنه ؟ من فکرکنم این بیشتر برای جلوگیری از spam هست و خیلی مسخره میاد چون اگه yahoo یا gmail ایمیل شما را بتونن صحت یابی کنند یعنی spf و DKIM و Reverse DNS به درستی تنظیم شده باشه و شما راهی برای حذف شدن از Mailing List توی ایمیل گذاشته باشین و بیخودی برای این و اون ایمیل الکی نزنید 5000 تا ایمیل هم توی یک loop بفرستین باید راحت Deliver بشه ! البته شاید من تجربه کافی ندارم و کسی هست که بتونه من را راهنمایی کنه ؟

tem988
چهارشنبه 12 مهر 1391, 02:08 صبح
من یک بار ای sleep استفاده کردم و چون تعداد ایمیل ها بالا بود سرور تایم اوت میداد مثلا اگر 4000 ایمیل داشته باشی میشه 4000 ثانیه که هم وقتت گرفته میشه هم اینکه ممکنه وسطش نت قطع بشه و کلی مشکل دیگه.
شایدم هم در مورد اجرای اسکریپت اشتباه نتیجه گرفتم.
برای ارسال ایمیل بالای 5000 هزار زمان زیادی طول میکشه که سرور بخواد ارسال کنه که اینم ممکنه سرور تایم اوت بده یا اینکه سرور توانایی ارسال اینقدر ایمیل رو نداشته باشه.
به خاطر همین بهترین روش cronjobs هست که هیچ کدوم از این مشکلات پیش نمیاد.

Unique
چهارشنبه 12 مهر 1391, 22:35 عصر
ولی به نظر من کلا php برای این تیپ کار ها نیست ، توی این مسائل بهتره از یک نرم افزار مستقل حالا با C یا ++C استفاده بشه (که خودتون بهتره بسازینش) php فقط ایمیل ها را توی Database ثبت کنه و اون برنامه را صدا بزنه تا شروع به ارسال کنه یا کلا برنامه همیشه در حال اجرا باشه و درخواست ها را به صورت صف ارسال کنه ! حالا مشکل این میشه که سرویس های Shared برای این کار مناسب نیستند ! php برای ارسال 100 تا 300 ایمیل میتونه کار راه انداز باشه نه چندین هزار ایمیل ! کلا انتظاراتی داریم که همخونی نداره !

navid3d_69
شنبه 22 مهر 1391, 18:50 عصر
من تا حالا خیلی توی این انجمن دیدم که افراد میخوان بین ارسال هاشون 1 دقیقه یا 30 ثانیه فاصله بندازند ! میشه یک منبع یا دلیلی برای این کار کسی ارائه کنه ؟ من فکرکنم این بیشتر برای جلوگیری از spam هست و خیلی مسخره میاد چون اگه yahoo یا gmail ایمیل شما را بتونن صحت یابی کنند یعنی spf و DKIM و Reverse DNS به درستی تنظیم شده باشه و شما راهی برای حذف شدن از Mailing List توی ایمیل گذاشته باشین و بیخودی برای این و اون ایمیل الکی نزنید 5000 تا ایمیل هم توی یک loop بفرستین باید راحت Deliver بشه ! البته شاید من تجربه کافی ندارم و کسی هست که بتونه من را راهنمایی کنه ؟

مشکل اینجاست که کاربرها که نمی دونند اگر یک سایت طراحی کنی بدی دسته مشتری بعد بیاد 50000 تا ایمیل رو توی 1 بار و تیو 1 ثانیه ارسال کنه کلا سرور بسته میشه و حالا مشکلات کپی رایت و اسپم و این هارو در نظر نگیریم

Unique
یک شنبه 23 مهر 1391, 01:07 صبح
این کاربرا ها را بفرستین سراغ شرکت هایی که ایمیل انبوه ارسال میکنند تا ارزش هر ایمیل دستشون بیاد. (تازه اگه ایمیلهای همونها هم spam نشه)

colors
یک شنبه 23 مهر 1391, 11:47 صبح
سلام

چند وقت پیش یه همچین سیستمی رو واسه یه پروژه پیاده کردم. خیلی ساده بود. اول با مدیریت هاستینگ یه گفتگو داشتیم و گفتش تو هر ساعت فقط 60تا ایمیل میتونید ارسال کنید. منم اومدم یه جدول تو دیتابایس ساختم که تاریخ و ساعت دقیق آخرین ایمیل ارسالی رو تو خودش داشت. هر وقت که ایمیل جدید باید ارسال میشد تاریخ ثبت شده رو چک میکرد و اگه 1 دقیقه گذشته بود ایمیل ارسال در غیر این صورت sleep میشد تا زمانی که ساعت آخرین ارسال بیش از 1 دقیقه میشد. فکر کنم دلیل این تاخیر انداختنها واسه اینه که سرور گیرنده(yahoo, gmail ... ) اگه از یه سرویس درخواستی ها پشت سر هم و زیادی داشته باشن به دلایلی اون ایمیل رو اسپم یا حتی بلوک میکنن. البته برای ارسال چیزی مث خبرنامه که لازمه یه ایمیل به 5000 کاربر ارسال بشه هم مشکلی نبود. یه جدول تو دیتابایس ساختم و که لیست انتظار ایمیلها بود. یه صفحه هم زدم که با کران ساعت 2 شب چک میکرد که آیا تو لیست انتظار ایمیلی واسه ارسال به کاربری وجود داره که اگه بود طبق اون جدول قبلی هر 1 دقیقه و برای هر کاربر ایمیلشو ارسال میکرد که کل کارش با یه loop بود. البته مطمئنم که اون پروژه من 5000 تا کاربر نداشت. چون اینجوری باید کران 83 ساعت پشت سر هم کار میکرد که شک ندارم باید با هاستینگ یه زدو خورد انجام میشد. در کل برای اینجور کارا یه سرور اختصاص حال میده.