2012-09-04 8 views
6

में तत्काल ईमेल भेजने के लिए कैसे करें मेरे सिम्फनी 2 वेब ऐप में मुझे दो प्रकार के ईमेल भेजना है: तत्काल और थोक। तत्काल ईमेल तुरंत भेजना चाहिए जबकि थोक ईमेल स्पूल का उपयोग करके भेजना चाहिए। सिम्फनी 2 में स्विफ्टमेलर की डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ ऐसा करना असंभव है क्योंकि केवल एक मेलर सेवा है।स्पूल का उपयोग करने के लिए अतिरिक्त मेलर सेवा को परिभाषित करने और सिम्फनी 2

इसी प्रकार के सवालों के कोई भाग्य के साथ एसओ (How to spool emails (in a task) and send normal emails in the moment in the other controllers?) में यहां कहा है कि कर दिया गया है, लेकिन इस GitHub धागा (https://github.com/symfony/SwiftmailerBundle/issues/6) के अनुसार यह एक दूसरे मेलर सेवा का उपयोग डिफ़ॉल्ट एक से पूरी तरह से अलग विन्यस्त किया जा सकता बनाने के लिए संभव है। इस नई सेवा को बनाने के लिए स्विफ्टमेलरबंडल (https://github.com/symfony/SwiftmailerBundle/blob/master/Resources/config/swiftmailer.xml) में मिली कॉन्फ़िगरेशन का पालन करने के लिए संभावित समाधान के रूप में किसी को (स्टॉफ) अनुशंसित किया गया है, लेकिन मुझे नहीं पता कि यह वास्तव में कैसे करता है।

क्या कोई जानता है कि एक अतिरिक्त मेलर सेवा कैसे बनाएं जिसे मैं स्पूल के रूप में कॉन्फ़िगर कर सकता हूं जबकि डिफ़ॉल्ट मेलर सेवा नियमित (तत्काल) ईमेल भेजने के लिए हो सकती है?

उत्तर

11

मैं समाधान here

पाया यह मैं इसे कैसे लागू किया है:

पहले, मैं एक स्पूल के रूप में काम करने के लिए थोक ईमेल भेजने के लिए डिफ़ॉल्ट मेलर सेवा कॉन्फ़िगर किया गया।

(config.yml)

swiftmailer: 
    transport: %mailer_transport% 
    encryption: %mailer_encryption% 
    auth_mode: %mailer_auth_mode% 
    host: %mailer_host% 
    username: %mailer_user% 
    password: %mailer_password% 
    spool: 
     type: file 
     path: "%kernel.root_dir%/spool" 

फिर, मेरी बंडलों (CommonBundle) में से एक के अंदर मैं "instant_mailer" नामक एक नई सेवा है कि Swiftmailer वर्ग के लिए नक्शे पंजीकृत।

(service.yml)

instant_mailer: 
    class: %swiftmailer.class% 
    arguments: ["@?swiftmailer.transport.real"] 

अंत में, मेरी नियंत्रक, जब भी मैं स्पूल usning एक ईमेल भेजना चाहते हैं में मैं सिर्फ कार्य करें:

$mailer = $this->get('mailer'); 

और एक पल ईमेल भेजने के लिए:

$mailer = $this->get('instant_mailer'); 
+2

अच्छा! लेकिन यदि आप एक पर्यावरण स्पूलिंग का उपयोग करते हैं तो आप मुद्दों में भाग सकते हैं और दूसरा नहीं। हो सकता है कि आप यह जांचना चाहें कि '$ this-> प्राप्त करें ('मेलर') -> getTransport() उदाहरण \ Swift_Transport_SpoolTransport' .real परिवहन पर स्विच करने से पहले, क्योंकि यह अस्तित्व में नहीं है! – bksunday

संबंधित मुद्दे