2011-07-06 7 views
28

ऐसा प्रतीत होता है कि .NET के SmtpClient होस्ट नामों में एक अतिरिक्त बिंदु के साथ ईमेल बना रहा है यदि बिंदु MIME एन्कोडेड लाइन की शुरुआत में दिखाई दे रहा था (उदाहरण के लिए test.com कभी-कभी परीक्षण के रूप में दिखाई देता है .. कॉम)। उदाहरण कोड:System.Net.Mail अवैध ईमेल और eml फ़ाइलों को बना रहा है? मेजबान नामों में अतिरिक्त बिंदुओं को सम्मिलित करना

एक्स प्रेषक:: [email protected]

एक्स रिसीवर: [email protected]

[TestMethod] 
public void TestEmailIssue() 
{ 
    var mail = new System.Net.Mail.MailMessage(); 
    var smtpClient = new System.Net.Mail.SmtpClient(); 

    mail.To.Add("[email protected]"); 
    mail.Subject = "Test"; 
    mail.From = new System.Net.Mail.MailAddress("[email protected]"); 
    mail.Body = "Hello this is a short test of the issue:" 
      +" <a href='https://test.com/'>https://test.com/</a>: "; 

    smtpClient.PickupDirectoryLocation = "C:\\temp\\"; 
    smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory; 
    smtpClient.Send(mail); 
} 

यह है कि इस तरह दिखता है .eml फ़ाइल बनाता है

माइम-संस्करण: 1.0

से: [email protected]

करने के लिए: [email protected]

दिनांक: 6 जुला 2011 15:55:28 -0400

विषय: टेस्ट

सामग्री प्रकार: पाठ/सादे; चारसेट हमें-ascii =

सामग्री-स्थानांतरण-एन्कोडिंग: उद्धृत-मुद्रण योग्य

नमस्ते यह है समस्या के संक्षिप्त परीक्षण: https: // परीक्षण =

..com/'>https://test.com/: = 20

फ़ाइल भेजते समय, या Outlook (या किसी अन्य प्रोग्राम) में खोलते समय, डबल डॉट्स (यानी test..com) दिखाते हैं। ध्यान दें कि यदि मैं अतिरिक्त स्थान को हटाता हूं ("एक है" में), तो test.com सही ढंग से दिखाता है क्योंकि रेखा की शुरुआत में बिंदु अब प्रकट नहीं होता है।

यह वेबसाइट पते भेजने की कोशिश करते समय एक समस्या का कारण बनता है, और हमें यह कहते हुए ग्राहकों से कॉल मिलती है कि वे हमारे लिंक पर क्लिक नहीं कर सकते हैं।

क्या किसी और ने इसका अनुभव किया है? हम अपने स्वयं के एन्कोडिंग लिखने के अलावा इस मुद्दे को कैसे हल कर सकते हैं?

+0

दिलचस्प खोज। – Jay

+0

यही हमने सोचा था! दुर्भाग्य से यह ग्राहकों के एक बड़े समूह के लिए रोल-आउट करने से पहले सप्ताह तक नहीं आया, मुझे उम्मीद है कि एक आसान फिक्स है। –

+0

कुछ भी नहीं जो मुझे हाथ से पता है। एक बदसूरत फिक्स + आउटपुट फ़ाइल को पार्स खोलने के लिए होगा, उन त्रुटियों को देखें और उन्हें ठीक करें। युक। – Jay

उत्तर

44

यह वास्तव में प्रति RFC 2821 (4.5.2 पारदर्शिता)

मेल टेक्स्ट की पंक्ति में भेजने से पहले, एसएमटीपी ग्राहक लाइन का पहला वर्ण जांच करता है।यदि यह एक अवधि है, तो लाइन की शुरुआत में एक अतिरिक्त अवधि डाली जाती है।

नेट सिर्फ "संचार करने के लिए तैयार" मोड में फ़ाइल संग्रहीत कर रहा है जिसका अर्थ है कि इसे भेजने से पहले ईमेल के साथ बंदर नहीं है, बल्कि यह इसे प्रेषित कर सकता है। दुर्भाग्य से यह प्रारूप आउटलुक एक्सप्रेस के ईएमएल प्रारूप के रूप में 100% समान नहीं है। आपको एन्कोडिंग को यूटीएफ -8 (या कुछ समान) में सेट करने में सक्षम होना चाहिए और यह आपके लिए बेस -64 एन्कोडिंग में लात देगा।

mail.BodyEncoding = System.Text.Encoding.UTF8; 
+0

बहुत बढ़िया, धन्यवाद! –

+0

क्या इन एएमएल फ़ाइलों को पढ़ने और इस एन्कोडिंग को सही तरीके से डीकोड करने का कोई तरीका है? (मैं परीक्षण वातावरण के लिए एक डैशबोर्ड बनाना चाहता हूं जो सभी ईमेल दिखाता है) – Myster

+1

मूल रूप से, अंतर्निहित एमएस कक्षाओं का उपयोग करके? शायद नहीं, भंडारण प्रारूप सिर्फ एक आंतरिक प्रतिनिधित्व है कि नेट और आईआईएस/एक्सचेंज शायद सहमत हैं। मेरे सबसे अच्छे ज्ञान के लिए इस के लिए कोई आधिकारिक कल्पना नहीं है। आप निश्चित रूप से अपना खुद का रोल कर सकते हैं, [यह पोस्ट] (https://stackoverflow.com/questions/1151155/is-it-possible-to-read-eml-files-in-net) के साथ ऐसा करने पर कुछ और है एक पुस्तकालय। –

4
नेट 2.0 में

X-Sender: [email protected] 
X-Receiver: [email protected] 
MIME-Version: 1.0 
From: [email protected] 
To: [email protected] 
Date: 6 Jul 2011 21:29:04 +0100 
Subject: Test 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: quoted-printable 

Hello this is a short test of the issue: <a href=3D'https://test.com/'>https://test.com/</a>:= 

ऐसा लगता है कि यह प्रत्येक पंक्ति में एक निश्चित चरित्र विस्तार से पाठ लपेटकर है

। मुझे अस्पष्टता से याद है कि .NET 2.0 में कोई समस्या थी, जहां डिफ़ॉल्ट रूप से ऐसा नहीं होता है जो स्पैम फ़िल्टर के साथ समस्याएं पैदा कर सकता है।

X-Sender: [email protected] 
X-Receiver: [email protected] 
MIME-Version: 1.0 
From: [email protected] 
To: [email protected] 
Date: 6 Jul 2011 21:34:21 +0100 
Subject: Test 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: quoted-printable 

Hello this is a short test of the sssssssssssssssssissue: <a hre= 
f=3D'https://test.com/'>https://test.com/</a>:=20 

एक बग की तरह लगता है:

तथ्य संदेश के आकार में वृद्धि में नेट 4.0 में निम्नलिखित देता है।

एएससीआईआई के अलावा किसी अन्य चीज़ को बॉडीएन्कोडिंग को बदलने के लिए एक कामकाज हो सकता है।

+0

+1 की तुलना करने के लिए .NET 2.0 और .Net 4.0 की समस्या – BlueFox

1

.NET 4 स्रोत कोड को देखते हुए, हो सकता है आप क्या अनुभव कर रहे हैं MailWriter.WriteAndFold विधि के साथ कुछ करने के लिए है। मेलवाइटर कक्षा में

static int writerDefaultLineLength = 76 

परिवर्तनीय, प्रति पंक्ति चरित्र गणना का अर्थ है। शायद क्योंकि आपने एक अतिरिक्त स्पेस कैरेक्टर हटा दिया है, यह काम करना शुरू कर दिया है।

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