2013-07-16 10 views
5

मैं Symfony 1.4 और तेज मेलर के साथ काम कर रहा हूँ मान्य Sendgrid के माध्यम से ईमेल के एक थोक सरणी भेजने के लिए कैसे।स्विफ्ट मेलर में MailboxHeader.php का विस्तार या ईमेल

मैं ईमेल पतों में से कुछ पर एक RFC अनुपालन त्रुटि हो रही है।

एक समाधान remove the condition to throw the error होगा, और यह काम करता है, लेकिन यह मूल बदलते शामिल है। आप साइट फ़ाइलों में MailboxHeader.php का विस्तार कैसे करेंगे और सिम्फनी कोर नहीं। ऐसा कुछ, लेकिन ऐसा नहीं है क्योंकि यह काम नहीं करता है:

class overrideRFCError extends Swift_Mime_Headers_AbstractHeader 
{ 
    private function _assertValidAddress($address) 
    { 
     if (!preg_match('/^' . $this->getGrammar('addr-spec') . '$/D', 
      $address)) 
     { 
      // throw new Swift_RfcComplianceException(
      // 'Address in mailbox given [' . $address . 
      // '] does not comply with RFC 2822, 3.6.2.' 
      // ); 
     } 
    } 
} 

यह भी थोड़ा भारी हाथ लगता है। आरएफसी अनुपालन के लिए ईमेल को प्रमाणित करने का कोई तरीका है। यदि ऐसा है, तो मैं इसे सरणी से बस अनसेट कर सकता हूं।

अद्यतन 07/17/13

मैं इसे आरएफसी के अनुरूप है, जो समस्या का हल करने के लिए प्रत्येक पते पर से सफ़ाई डाल करने में सक्षम था। हालांकि, मैं जानना चाहता हूं कि स्विफ्टमेलर में कोई फ़ंक्शन मौजूद है जो यह चेक करता है, बल्कि कस्टम फ़ंक्शन लिखता है।

अद्यतन 07/18/13

यहाँ मैं क्या काम मिल गया है। मैंने जितनी ज्यादा हो सके प्रविष्टियों को स्वच्छ करने की कोशिश की।

लोड एक चर $emailList

कार्यों में

बुलाया में पते की एक सरणी:

// loop and validate each email address 
    public static function validateEmails($emailList) { 
     foreach($emailList as $address => $name) { 
      try { 
       $v = new sfValidatorEmail(); 
       $email = $v->clean($address); 

      } catch (sfValidatorError $e) { 
       unset($emailList[$address]); 
      } 
     } 
     foreach($emailList as $address => $name) { 
      $rfcTesting = validateEmailForRFC::is_email($address); 
      if(!$rfcTesting) { 
       unset($emailList[$address]); 
      } 
      if (!preg_match('/^[[email protected]]/', $address)) { 
       unset($emailList[$address]); 
      } 
     } 
     // List should be clean 
     return $emailList; 
    } 

तो यह पहले sfValidator का उपयोग करता प्रारंभिक बाहर निकाल रहे हैं:

$cleanList = sendGridEmailer::validateEmails($emailList); 
sendGridEmailer कक्षा में

खराब पते इसके बाद, मुझे एक आरएफसी अनुपालन स्क्रिप्ट here मिली और उसे सत्यापित करें EmailForRFC क्लास में जो उन्हें आरएफसी अनुपालन करना चाहिए।

अंतिम, मैं अजीब वर्ण है कि पिछले चेकों समझ नहीं आया के साथ किसी भी stragglers के लिए एक अंतिम pregmatch है।

यह Symfony कोर अछूता रखने के लिए मुझे अनुमति दी है और कोई अनुपालन त्रुटियों के साथ स्विफ्ट के लिए पते तैयार।

+0

आप पतों कि त्रुटि जुटाने पर किसी भी जानकारी है? ओवरराइडिंग से त्रुटि से बचने के लिए एक समाधान हो सकता है लेकिन समाधान नहीं। –

+0

असल में, इससे बचने के लिए काफी संभावना नहीं है। गलत पतों की जांच आरएफसी का अनुपालन करती है हालांकि प्रदाता इसे स्वीकार कर सकते हैं। स्विफ्ट में चेकिंग नियम हार्डकोड किए गए हैं। कोर बदलें, त्रुटि फेंक न दें लेकिन पता लॉग फ़ाइल को लिखें। तो आप जांच सकते हैं कि पता गलत है या यह सिर्फ सख्त जांच है। –

+0

मैं त्रुटि जांच को नहीं हटाऊंगा। मुझे लगता है कि एक स्विफ्टमेलर फ़ंक्शन है जो आरएफसी सत्यापन की जांच करेगा। क्या यह अस्तित्व में है? –

उत्तर

3

आप सिम्फनी के sfValidatorEmail या filter-var फ़ंक्शन का उपयोग कर सकते हैं। वे SwiftMailer के साथ पर्याप्त काम करते हैं, लेकिन इनमें से कोई भी आरएफसी अनुपालन आईआईआरसी नहीं है। आरएफसी के खिलाफ सत्यापन के लिए आप या https://github.com/dominicsayers/isemail का उपयोग कर सकते हैं।

+0

समस्या नहीं है "कोई सत्यापन नहीं किया गया है"। स्विफ्टमेलर आरएफसी के अनुपालन में बनाया गया है और यह बहुत सारे मेल प्रदाताओं के लिए बहुत सख्त है जो कम सख्त पते (ईमेल पते का स्थानीय हिस्सा) –

+0

की अनुमति देते हैं क्योंकि 'स्विफ्टमेलर' ईमेल भेजने से पहले ईमेल पते की जांच करता है और अपवाद फेंकता है यदि यह अमान्य है तो आपको डेटाबेस में डालने से पहले या ईमेल भेजने से पहले ईमेल सत्यापित करना चाहिए। एक प्राप्तकर्ता को केवल भेजते समय आप 'कोशिश करें ... पकड़' का उपयोग कर सकते हैं लेकिन थोक भेजने के लिए यह इतना अच्छा नहीं है। – 1ed

+0

आईआईआरसी 'स्विफ्टमेलर' चेक वास्तव में आरएफसी की तुलना में कठोर है उदा। http://isemail.info/root%40localhost 'स्विफ्टमेलर 'आईआईआरसी में विफल रहता है ... और यह विदेशी ईमेल पते वाले उपयोगकर्ता के लिए एक समस्या हो सकती है, लेकिन आम तौर पर यह ठीक है। – 1ed

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