PHP

2009-07-13 19 views
46

का उपयोग कर बड़े पैमाने पर ईमेल भेजना मैं वर्तमान में एक संगीत ब्लॉग लिख रहा हूं। व्यवस्थापक हर 2-3 दिनों में एक नया लेख पोस्ट करता है। एक बार जब व्यवस्थापक एक लेख पोस्ट करता है, तो एक विशाल ईमेल तुरंत 5000 ग्राहकों को भेजा जाएगा।PHP

जन मेल सुविधा को लागू करने का सबसे अच्छा तरीका क्या है?

क्या निम्न कार्य काम करता है?

function massmail() 
{ 
    $content = '...'; 
    foreach ($recipients as $r) { 
    $_content = $content . '<img src="http://xxx/trackOpenRate.php?id='.$r.'">'; 
    mail($r, 'subject', $_content); 
    } 
} 

एक और सवाल: सभी 5000 ग्राहकों याहू मेल का उपयोग कर रहे हैं, तो याहू एक DDOS हमला मानते हैं और मेरे एसएमटीपी सर्वर का IP पता को अवरुद्ध कर देगा?

+0

हां, लेकिन 5000 प्राप्तकर्ताओं के लिए खराब है, लेकिन मैं कल्पना करता हूं। –

+0

यदि मैं PHP मेल() फ़ंक्शन के साथ 5000 ईमेल भेजता हूं तो क्या होता है। लेकिन सभी मेल बीसीसी में होना चाहिए, मेल() के साथ लूप नहीं करना? क्या यह ठीक है? – user345602

+9

@ user346665: चूंकि हजारों बीसीसी ईमेल ईमेल के शीर्षलेख में जाएंगे, तो आपको निम्न घातक त्रुटि मिलेगी (इसे स्वयं प्राप्त करें): 'php-server postfix/sendmail [26573]: घातक: [email protected] (33): प्राप्तकर्ताओं को निकालने में असमर्थ: संदेश शीर्षलेख लंबाई सुरक्षा सीमा से अधिक है – YOMorales

उत्तर

44

सबसे पहले, PHP के साथ आने वाले मेल() फ़ंक्शन का उपयोग करना एक इष्टतम समाधान नहीं है। इसे आसानी से स्पैम किए गए के रूप में चिह्नित किया जाता है, और आपको यह सुनिश्चित करने के लिए हेडर सेट अप करने की आवश्यकता है कि आप HTML ईमेल सही तरीके से भेज रहे हैं। इस बात के लिए कि कोड स्निपेट काम करेगा या नहीं, लेकिन मुझे संदेह है कि आपको specifying extra headers

पर सुझाव मिलेगा कि मैं आपको SwiftMailer पर एक नज़र डालें, जिसमें HTML समर्थन है, विभिन्न माइम प्रकारों के लिए समर्थन और एसएमटीपी प्रमाणीकरण (जो आपके मेल को स्पैम के रूप में चिह्नित करने की संभावना कम है)।

+9

+1 आप मेल सर्वर को नियंत्रित करने के तरीके के आधार पर कुछ देरी/समय भेजने के लिए भी कुछ देरी कर सकते हैं। यदि आप एक बार में सैकड़ों संदेश भेजते हैं तो कुछ गंतव्य सर्वर आपको अवरोधित कर सकते हैं। इसके अलावा, आप भेजे गए प्रत्येक ईमेल की स्थिति पर एक विस्तृत लॉग रखना चाह सकते हैं। 100+ परीक्षण ईमेल खाते (आपके परीक्षण खाते) होने और विभिन्न सामग्री के साथ उन्हें क्रमशः परीक्षण करने में सहायता मिलेगी। स्विफ्टमेलर –

+6

+1 स्विफ्टमेल ने इसे कुछ साल पहले इस्तेमाल किया और कभी पीछे नहीं देखा। – alex

+0

+1 स्विफ्टमेल के लिए – Chud37

15

यह सलाह है, जवाब नहीं: आप समर्पित मेलिंग सूची सॉफ़्टवेयर का उपयोग करके बहुत अधिक बेहतर हैं। mailman एक प्रयुक्त उदाहरण है, लेकिन mlmmj जितना आसान हो सकता है। बड़े पैमाने पर मेल भेजना वास्तव में वास्तव में एक कठिन काम है। न केवल आपको मेल भेजना होगा, आपको अपने मेल से बचने के लिए "मृत" पते का ट्रैक रखना होगा, या इससे भी बदतर, आपका मेल सर्वर, स्पैम के रूप में चिह्नित किया जा रहा है। आपको उसी कारण से सदस्यता रद्द करने वाले लोगों को संभालना होगा।

आप इन चीजों को स्वयं लागू कर सकते हैं, लेकिन विशेष रूप से बाउंस हैंडलिंग मुश्किल और अपरिवर्तनीय काम है। मेलिंग सूची प्रबंधक का उपयोग करना चीजों को बहुत आसान बना देगा।

याहू के लिए अपने मेल को आकर्षक बनाने के तरीके के रूप में, यह एक और मामला पूरी तरह से है। अपने सभी दोषों के लिए, वे SPF और डोमेनकी में बहुत अच्छा स्टॉक डालते हैं। आपको शायद उन्हें लागू करना होगा, जिसके लिए आपके मेल सर्वर व्यवस्थापक से सहयोग की आवश्यकता होगी।

+0

इस सलाह के लिए धन्यवाद, Michiel। मैं उन ग्राहकों को लगभग 4000 ईमेल भेजना चाहता था जो मेरे द्वारा प्रबंधित वेबसाइट से अग्रिम-आदेश दिया गया था। सेवा का उपयोग करने के लिए बहुत सारे अच्छे तर्क हैं, और जब मैंने इन ग्राहकों को अपने ग्राहक के मेलचंप खाते (एक महीने के लिए) में जोड़ने की लागत को देखा, तो यह लगभग $ 30US की वृद्धि हुई थी। हाथ से ऐसा करने से ज्यादा किफायती। – Jason

12

आप उस तरह के ऑपरेशन के लिए सीआरओएन का उपयोग करने पर विचार कर सकते हैं। एक बार में मास मेल भेजना निश्चित रूप से अच्छा नहीं है, यह स्पैम, डीडीओएस, आपके सर्वर को क्रैश आदि के रूप में पहचाना जा सकता है।

तो सीआरओएन एक अच्छा समाधान हो सकता है, एक बार में 100 मेल भेज सकता है, फिर कुछ मिनट प्रतीक्षा करें, अगले 100 , आदि

+12

सीआरओएन से एक PHP स्क्रिप्ट चलाते समय कोई php टाइमआउट नहीं है क्योंकि आप कमांड लाइन से PHP चला रहे हैं। इसका मतलब है कि हर कुछ मिनट में एक सीआरओएन सेट करने के बजाय आप अपने कोड में नींद cmd डाल सकते हैं जो 100 ईमेल भेजे गए हैं, फिर नींद (कुछ_टाइम) और स्क्रिप्ट जारी रहेगी। – Martin

+2

@ मार्टिन के कथन का समर्थन करने के लिए थोड़ा सा अतिरिक्त: http://www.php.net/manual/en/features.commandline.differences.php – YOMorales

2

इसके अलावा PHPmailer क्लास पर एक नज़र डालें। PHPMailer

+0

यदि मैं गलत नहीं हूं, तो स्विफ्टमेलर PHPMailer के शीर्ष पर नहीं बनाया गया है ? – Extrakun

+3

PHPMailer के शीर्ष पर बनाई गई बहुत सारी चीजें हैं, PHPList PHPMailer – Roland

26

मैं डेटाबेस में सभी ईमेल (एक कतार की तरह) में डाल दूंगा, फिर एक बार उस समय प्रक्रिया करें जब आपने अपने कोड में किया है (यदि आप स्विफ्टमेलर या phpmailer आदि का उपयोग करना चाहते हैं, तो आप कर सकते हैं वह भी।)

प्रत्येक मेल भेजे जाने के बाद, डेटाबेस को अद्यतन दिनांक/समय रिकॉर्ड करने के लिए अद्यतन करें।

उन्हें डेटाबेस में डाल करके पहले आप

  1. जो आप यह
  2. के लिए भेजा आपकी स्क्रिप्ट का समय है, तो या विफल रहता है की एक रिकार्ड है और आप इसे फिर से चलाने के लिए है, तो आप यह नहीं करेंगे लोगों को दो बार
  3. पर एक ही ईमेल भेजना समाप्त करें, आप एक क्रॉन नौकरी से प्रेषण प्रक्रिया चला सकते हैं और एक समय में बैच कर सकते हैं, ताकि आपका मेल सर्वर अभिभूत न हो, और
  4. भेजा गया ट्रैक का ट्रैक रखें

ध्यान रखें, बाउंस ईमेल या अमान्य ईमेल कैसे स्वचालित करें ताकि वे आपकी सूची से स्वचालित रूप से हटा सकें।

यदि आप उन ईमेल को भेज रहे हैं तो आप कुछ बाउंस प्राप्त करने के लिए बाध्य हैं।

8

आप phplist का उपयोग क्यों नहीं करते? यह PHP मेलर के शीर्ष पर भी बनाया गया है और कई उद्योग नेता इसका उपयोग कर रहे हैं। मैंने अपने ग्राहकों को थोक मेल भेजने के लिए इसे कई बार इस्तेमाल किया है। Phplist के बारे में अच्छी बात यह है कि आप अपने संदेशों को एक डोमेन स्तर पर एक समय सीमा स्तर पर थ्रॉटल कर सकते हैं। सुविधाओं की पूरी सूची के लिए एक नज़र डालें: http://www.phplist.com/details

हमने जो कुछ आंतरिक कैप्चर सिस्टम प्राप्त किए हैं, उसके साथ हमने क्या किया है, हमारे उपयोगकर्ता आधार को मलिंग सूची में धक्का देना था और फिर क्रॉन एंट्री ट्रिगरिंग करना था प्रत्येक दिन एक दिया गया मेल। संभावनाएं अनंत हैं, यह ओपन सोर्स के बारे में बहुत ही बढ़िया बात है!

8

मानक PHP उपकरण का उपयोग करके 5,000 लोगों को ईमेल भेजें। आपको सेकंड में अधिकांश आईएसपी द्वारा प्रतिबंधित कर दिया जाएगा और इसे कभी भी नहीं पता होगा। आपको या तो कुछ मेलिंग सूचियों सॉफ़्टवेयर या Email Service Provider का उपयोग करना चाहिए।

+1

के शीर्ष पर भी बनाया गया है, यह सच हो सकता है, लेकिन यदि आप प्रति घंटे 100 संदेश से नीचे अपने मेल रखते हैं तो अधिकांश आईएसपी आपको बहुत दुःख नहीं देगा; हालांकि जैसे ही आप अपने नेटवर्क का दुरुपयोग करते हैं तो आप इसके लिए अंदर हैं! बस सुनिश्चित करें कि आपके शीर्षलेख मानकों के लिए संरचित हैं; नेटवर्क का दुरुपयोग न करें और आप सुरक्षित रहेंगे। – Conrad

4

इसके अलावा नाशपाती संकुल:

http://pear.php.net/package/Mail_Mime http://pear.php.net/package/Mail http://pear.php.net/package/Mail_Queue

सिसकी।

पीएस: उन 5000 ईमेल भेजने के लिए मेल() का उपयोग न करें। हर किसी ने जो कहा, उसके अलावा, यह बेहद अक्षम है क्योंकि मेल() एक ही एमटीए तक भी एक अलग सॉकेट प्रति ईमेल सेट बनाता है।

-1

प्रोग्राम खुद को परेशान क्यों करें? यह एक ब्लॉग है, बस Google Feedburner का उपयोग करें जो स्वचालित रूप से ईमेल के माध्यम से ग्राहकों को अपडेट को धक्का देता है।

यह मुफ्त है और यह Google का आधारभूत संरचना का उपयोग करता है। इससे बेहतर कोई नहीं मिल सकता है। मैं इसे अपनी कुछ साइट्स/ब्लॉग्स के लिए उपयोग करता हूं और यह अद्भुत काम करता है।

नकारात्मक पहलू यह सक्रिय रूप से विकसित किया जाना है और किसी भी अधिक समर्थित नहीं नहीं करता प्रतीत होता है। यदि आप अपने व्यवसाय के बारे में गंभीर हैं तो मैं आपको एक वाणिज्यिक ईमेल सूची में फेंकने का सुझाव दूंगा।

0

मैंने पहले ही इसे Lotus Notus और PHP का उपयोग करके किया है।यह समाधान काम करता है यदि आपके पास मेल सर्वर तक पहुंच है या आप mail server व्यवस्थापक से कुछ अनुरोध कर सकते हैं:

1) mail server में एक समूह बनाएं: "बिक्री विभाग"।
2) समूह में होने वाले खातों को group पर असाइन करें।
3) समूह में एक इंटरनेट पता असाइन करें: [email protected]
4) मेल फ़ंक्शन का उपयोग करके आपको PHP स्क्रिप्ट बनाएं:
$ से = "[email protected]";
मेल ($ से, $ विषय, $ संदेश, $ शीर्षलेख);

यह मेरे लिए काम करता है और समूह में शामिल सभी खातों को मेल प्राप्त होता है।

भाग्य का सबसे अच्छा।

0

आप इसके लिए स्विफ्टमेलर का उपयोग कर सकते हैं। बैच प्रक्रिया का उपयोग करके।

<?php 
    $message = Swift_Message::newInstance() 
     ->setSubject('Let\'s get together today.') 
     ->setFrom(array('[email protected]' => 'From Me')) 
     ->setBody('Here is the message itself') 
     ->addPart('<b>Test message being sent!!</b>', 'text/html'); 

    $data = mysql_query('SELECT first, last, email FROM users WHERE is_active=1') or die(mysql_error()); 
    while($row = mysql_fetch_assoc($data)) 
    { 
     $message->addTo($row['email'], $row['first'] . ' ' . $row['last']); 
    } 

    $message->batchSend(); 
?>