PHP Mass البريد الإلكتروني أفضل الممارسات؟ (phpmailer + gmail)

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

  •  05-07-2019
  •  | 
  •  

سؤال

أفكر في كيفية التعامل مع إرسال كميات كبيرة من البريد الإلكتروني من تطبيقات الويب الخاصة بي ، وما إذا كانت هناك أفضل الممارسات للقيام بذلك. يقوم Stackoverflow بالفعل بتسمية هذا على أنه "شخصي" ، والذي قد يكون إلى حد ما ، لكنني بحاجة إلى معرفة الطريقة الأكثر نجاحًا لتنفيذ هذا النظام ، أو ما إذا كان هناك أي نهج موحد.

في الويب الخاص بي ، هناك مستخدمون يرأسون مجموعات من 1 إلى 10،000 مستخدم. يجب أن يكون هذا المستخدم قادرًا على إرسال رسالة إلى جميع هؤلاء المستخدمين عبر البريد الإلكتروني من خلال نظامي. لذلك ، فإن نظامي مسؤول عن إرسال ما يصل إلى 10000 رسالة بريد إلكتروني إلى مستخدمين فرديين لكل رأس مجموعة.

بقدر ما أستطيع أن أقول ، لا يوجد حد للأسعار في Gmail لإرسال الرسائل إلى الأفراد (على الرغم من وجود 500 مستلم كحد أقصى).

الآن ، الإعداد الحالي الخاص بي هو:

  • عندما يتم إرسال رسالة من خلال النظام ، فإنها تدخل قائمة انتظار بريد إلكتروني.
  • يمسك نص CRON رسائل من قائمة الانتظار كل بضع دقائق ، ويرسل رسائل البريد الإلكتروني تلك.
  • يتم إجراء جميع البريد الإلكتروني من خلال خادم SMTP من Gmail.
  • التطبيق الفعلي الذي يقوم بالبريد هو phpmailer.

هذا الإعداد ، مع نمو قاعدة المستخدمين ، ربما لن يكون كافيًا. الأسئلة التي لدي هي:

  1. هل يجب أن أستخدم خادم SMTP محلي بدلاً من ذلك؟
  2. هل يجب أن أستخدم بريدًا ثنائيًا على الجهاز المحلي بدلاً من ذلك؟ أنا هذه الحالة ، ربما يمكنني تخطي قائمة الانتظار تمامًا؟
  3. هل هناك طريقة مقبولة للقيام بذلك؟

شكرًا!

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

المحلول

مع حساب البريد الإلكتروني "مرتفع" 10.000 في اليوم ، لن أعتمد على Gmail (أو أي آخر) SMTP. ليس أنهم لا يستطيعون التعامل معها ، من الواضح أنهم يستطيعون التعامل أكثر من ذلك بكثير. لكنهم ربما لا يريدون ذلك.

وجود خادم SMTP محلي هو IMO الطريق للذهاب:

  • من السهل جدًا إعداده (لا تدع الناس يستخدمونه بدون مخطط أصيل قوي)
  • الأكثر حداثة MTA التعامل مع قوائم الانتظار بشكل جيد للغاية
  • لن تضطر إلى التعامل مع Gmail (أو غيرها) قرار حظر حسابك يومًا ما لأسباب الحصص

نصائح أخرى

محرك تطبيقات جوجل

أود أن أكتب هذا في Google App Engine (Python) لأنه:

  • إنه يقترب جيدا.
  • لديها واجهة برمجة تطبيقات بريد إلكتروني جيدة.
  • لديها مهمة مع واجهة برمجة تطبيقات جيدة للوصول إليها.
  • لأن بيثون لغة جميلة حقيقية.
  • إنها (نسبيًا) رخيصة.

بي أتش بي

إذا قمت بتنفيذها في PHP أود

  • ابحث عن نفسك خادم SMTP جيد يتيح لك إرسال هذا الصوت من الرسائل لأن Gmail لن يسمح لك بإرسال هذا النوع من الحجم. أنا متأكد من أن هذا سيكلفك بعض المال.
  • ابحث عن نفسك مكتبة بريد إلكتروني لائقة PHP لإرسال رسائل مع مثل Phpmailer على سبيل المثال كما قلت.
  • استخدم قائمة انتظار الرسائل مثل على سبيل المثال Beanstalkd لوضع رسائل البريد الإلكتروني في قائمة الانتظار وإرسال بريد إلكتروني بشكل غير متزامن. أولاً لأنه مع هذا ، سيكون لدى المستخدم تحميل صفحة snappier. في المرتبة الثانية مع قائمة انتظار الرسائل مثل BeanStalkd ، يمكنك تنظيم سرعة إرسال أفضل والتي ستمنع من زيادة التحميل الخاص بك مع العمل. ستحتاج إلى الوصول إلى SSH إلى الخادم لتجميع (تثبيت) BeanStalkD. يمكنك العثور على Beanstalkd في Beanstalkd
  • ستحتاج أيضًا إلى الوصول إلى SSH لتشغيل برنامج نصي PHP في الخلفية والذي سيعالج قائمة انتظار الرسائل. يمكنك العثور على عميل الفاصوليا في PHP Beanstalkd-Client

من PHP/Apache/WebPage

هذه هي الصفحة التي سترسل منها الرسائل إلى المستخدم. من هذه الصفحة ، سترسل رسالة إلى Beanstalkd عن طريق ترميز شيء ما في خطوط هذا:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');
$message = ""; // This would contain your message
$pheanstalk->put(json_encode($message);

يجب عليك وضع الرسائل في قائمة انتظار الرسائل باستخدام أمر PUT

من البرنامج النصي PHP على المدى الطويل في الخلفية:

سيبدو الرمز مثل هذا:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');

while(true) {
  $job =  $pheanstalk->reserve();
  $email = json_decode($job->getData());
  // Sent email using PHP mailer.
  $pheanstalk->delete($job);
}

كما أقول ، من الممكن مع كل من PHP و Google App Engine ، لكنني سأذهب إلى محرك التطبيق لأنه من الأسهل تنفيذها.

تحدك تطبيقات Gmail و Google إلى حوالي 500 رسالة بريد إلكتروني يوميًا. لست متأكدًا من الطريقة التي يجمع بها ذلك مع Max 500 المستلم ، ولكن إذا كنت ترغب في إرسال 10 000 رسالة بريد إلكتروني ، فربما ترغب في العثور على خادم بريد آخر. أنا شخصياً أستخدم خادمًا محليًا أو ISP أو SMTP الخاص بـ ISP أو Datacenter.

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

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

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

I'm not sure if it's publishe anywhere, but from experience I can tell you that Gmail will put a fifteen minute or so freeze on your account if you start sending hundreds of messages at a time. This happened to me last week. I think you should host your own SMTP server. Using the mail() function often will put your mail in someone's spam folder.

Just install Postfix on the local machine, or a machine on the same LAN for maximum access speeds. Make sure it is well secured from the outside, and quickly accessible from the inside.

Then code your PHP script to directly inject the emails to the Postfix queue. That shall dramatically increase the processing speed of mail delivery.

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