2011-08-30 29 views
54

मैं एक वर्ग है कि एक ईमेल (MailMessage) भेजता है, लेकिन मैं निम्नलिखित त्रुटि मिलती है:संकल्प 'निर्दिष्ट स्ट्रिंग किसी विषय के लिए आवश्यक रूप में नहीं है।'

"The specified string is not in the form required for a subject."

वहाँ तार को साफ़ करने में एक आसान dandy विधि है या मैं अपने ही लिखने के लिए है?

उत्तर

83

मैं व्यक्तिगत रूप से इसे करने की कोशिश नहीं की है, लेकिन this के अनुसार, आप केवल जरूरत है:

subject = subject.Replace('\r', ' ').Replace('\n', ' '); 

या कुछ बराबर।

if (value != null && MailBnfHelper.HasCROrLF(value)) 
{ 
    throw new ArgumentException(SR.GetString(SR.MailSubjectInvalidFormat)); 
} 

तो केवल सीमा (अब के लिए) CR या LF की उपस्थिति होने के लिए होता है:

आंतरिक रूप से, MailMessage वर्ग के साथ विषय की जाँच करेगा।

+0

एक आकर्षण की तरह काम करता है – Filip

+1

इसके लिए धन्यवाद। लेकिन कहना होगा - क्या कोई कारण है कि माइक्रोसॉफ्ट सिर्फ * कह सकता है कि न्यूलाइन की अनुमति नहीं है? –

+0

आप जानते हैं कि दस्तावेज़ीकरण कठिन है ;-) कारणों की अनुमति नहीं है, सबसे अधिक संभावना है कि संदेश प्रारूप में सीआरएलएफ के बहुत विशेष उद्देश्य हैं (देखें [आरएफसी 5322] (https://tools.ietf.org/html/rfc5322)) और वे स्वचालित रूप से उपयोगकर्ता के डेटा को बदलने में परेशान नहीं होना चाहते थे, बल्कि असफल हो गए और उसे मैन्युअल रूप से करने दें (जैसे ऊपर दिखाया गया है)। –

10

इसके अलावा 168 वर्णों की एक सीमा भी है, इसलिए आपको इसके लिए भी जांच करनी चाहिए।

अद्यतन: क्षमा करें यह पूर्ण बकवास है :) यह मेरे मामले में एक लाइन ब्रेक होना चाहिए।

+2

क्या इस पर लिंक करने के लिए कोई दस्तावेज है? – mlhDev

+0

मुझे ऐसा नहीं लगता है, हमने अभी इसे परीक्षण और त्रुटि से समझ लिया है। मैं गलत हो सकता हूं, आपका स्वागत है और परिणाम पोस्ट करने के लिए आपका स्वागत है। –

+0

मेरे लिए अच्छा लगता है, मैं सिर्फ उत्सुक था कि आप उत्तर से कैसे आए (और उस पर एक अजीब मूल्य)। पहले से ही +1 - एक समाधान एक समाधान है :) – mlhDev

3

VB.NET

subject = subject.Replace(vbNewLine, "") 
+2

मुझे लगता है कि 'विषय = विषय। बदलें (vbCr, "")। जगह बदलें (vbLf, "") ' – JNF

4

के लिए मैं .NET 2.0 के लिए और 4.5 के लिए करने की कोशिश की और यह 168 वर्णों से अधिक विषयों को भेजने के लिए अनुमति देता है। मैंने मेल की जांच के लिए Papercut का उपयोग किया।

+3

पेपरकट दिलचस्प लग रहा है, लेकिन आपको माइक पर एक टिप्पणी जोड़नी चाहिए नेल्सन का जवाब (नहीं) के जवाब में 'नहीं)। –

0

मैं यह पहले से ही उत्तर दिया है पता है, लेकिन यह जाता है:

subject = subject.Trim(); 
subject = subject .Substring(0, Math.Min(subject .Length, 78)); 

यह किसी भी नए निकाल देगा:

सबसे पहले, आप विषय अधिकतम लंबाई (What is the email subject length limit?) के लिए खाते में विषय ट्रिम करने के लिए की जरूरत है तो शुरुआत और अंत में रेखाएं या रिक्त स्थान। फिर विषय की लंबाई को प्रतिबंधित करने के लिए सबस्ट्रिंग का उपयोग किया जाता है।