كم وظيفة البريد () يمكن استخدامها في وقت تنفيذ 30 ثانية؟

StackOverflow https://stackoverflow.com/questions/1670767

  •  13-09-2019
  •  | 
  •  

سؤال

لا بد لي من جعل صفحة سترسل البريد الإلكتروني إلى مشتركي النشرة الإخبارية. هناك أكثر من 15000 مشترك. أريد استخدام وظيفة PHP Mail () لإرسال بريد إلكتروني إليهم. لكنني أخشى أنه لن يكون قادرا على إرسال بريد إلكتروني إلى جميع المشتركين للحصول على حد PHP 30SEC Max_execution_Time. ليس من الممكن اختبار مقدار البريد الإلكتروني الذي يمكن إرساله عن طريق إرسال بريد إلكتروني إلى المشتركين. لذلك أريد أن أعرف مقدار البريد الإلكتروني الذي يمكن إرساله مع وظيفة البريد () في 30 ثانية الحد الأقصى Max_execution_Time. سيكون مفيدا جدا إذا كنت تستطيع الإجابة لي.

أيضا سؤال آخر - هو وقت تنفيذ MySQL هو أيضا العد في PHP؟

الإصدار 2.2.13 (UNIX) PHP الإصدار 5.2.11

هل كانت مفيدة؟

المحلول

PHP. max_execution_time الإعداد قابل للتخصيص. 30 ثواني هي الافتراضي ولكن يمكنك ضبطه على 0 ثواني لعدم وجود حد زمني للتنفيذ على الإطلاق. يستخدم مجموعة المهلة().

set_time_limit(0);

إذا قمت بذلك، يجب أن تكون قادرا على إرسال جميع بريدك الإلكتروني.

يرجى توخي الحذر في إرسال أكثر من بريد إلكتروني إلى نفس خادم البريد في الثانية الواحدة. أنت لا تريد الحصول على القائمة السوداء.

نصائح أخرى

يجب عليك تشغيل هذا من Cronjob أو تفرخ مهمة خلفية أو استخدام شيء آخر مناسب بشكل أفضل إلى وظائف الدفعات.

قد تحصل على 14000 رسالة بريد إلكتروني في 30 ثانية إذا كانت Mailserver الخاصة بك بسرعة كافية، ولكن ما يحدث عندما تحصل على عدد قليل من المشتركين ويتوقف عن العمل بشكل صحيح؟

ربما يمكنك تعيين علامة في قاعدة البيانات لكل مستخدم، ثم إعادة تعيين العلم عند إرسال بريد إلكتروني إليهم بواسطة مهمة خلفية. من شأنها أن تساعد في تجنب التكرارات وما إذا كانت هناك مشكلة في خادم البريد.

هذا يعتمد على العديد من المتغيرات التي لا يمكن إجابةها واحدة. تشمل العوامل:

  1. سرعة وحدة المعالجة المركزية
  2. عرض النطاق الترددي متاح من نظام الإرسال إلى MTA
  3. قدرة MTA على قبول رسائل البريد الإلكتروني

الطريقة الوحيدة لمعرفة ذلك هي تجربة ذلك.

كان لدي هذه المشكلة بالضبط مرة أخرى في أحد مشاريعي. الحل هو عزل إرسال البريد الإلكتروني من الموقع الفعلي.

أرمزت فئة صغيرة سيتم استدعاؤها لإرسال بريد إلكتروني. سيتم تمرير بريد إلكتروني قالب، حيث ستخزن بعد ذلك في قاعدة البيانات في قائمة انتظار البريد. في النهاية الخلفية، كان لدي وظيفة Cron التي تسمى البرنامج النصي Mailer كل 8 ثوان. يبحث البرنامج النصي في قائمة انتظار قاعدة البيانات عن رسائل البريد الإلكتروني، والاستيلاء على رقم X من قائمة الانتظار لمحاولة إرسال (أمرت بواسطة Timestamp in)، ثم أحاول التسليم. على افتراض عدم وجود أخطاء، سينسم البرنامج النصي بالرسالة كما هو المرسل. ستكون الخطوة التالية هي تطهير جميع رسائل البريد الإلكتروني من قائمة الانتظار التي تم إرسالها وأكبر من x أيام (أبقى لتسجيل).

نأمل أن يكون مفيدا.

على محمل الجد، إذا كنت ترغب في إرسال نفس البريد إلى عشرة أشخاص من MailApp العادي، فهل يمكنك إنشاء عشرة رسائل مالية متطابقة أو هل فقط أرسل البريد بمجرد إضافة المستلمين إلى قائمة الإرسال؟

تعديل: إذا كانت الإجابة "أبعثها مرة واحدة"، أعتقد أنك يجب أن ننظر في هذا الاتجاه هنا أيضا (تم وصفه حتى كيفية إرسالها إلى مستلمين متعددين http://www.php.net/mail.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top