2016-10-19 12 views
15

मैं एक गैर-ASCII ईमेल पते पर एक ईमेल भेजना चाहता हूं और मुझे यकीन नहीं है कि जेडीके 8 का उपयोग करके अनुशंसित प्रक्रिया क्या है।जावा: गैर-ASCII ईमेल पते पर ईमेल भेजें

मुझे निम्नलिखित ईमेल पते से कैसे निपटना चाहिए?

  1. [email protected]
  2. [email protected]örensen.de
  3. [email protected]örensen.de

वहाँ किसी भी सुरक्षा विचारों से अवगत होना है?

क्या यह नमूना कोड पर्याप्त होगा?

import java.net.IDN; 


public class IDNMailHelper { 

    public static String toIdnAddress(String mail) { 
     if (mail == null) { 
      return null; 
     } 
     int idx = mail.indexOf('@'); 
     if (idx < 0) { 
      return mail; 
     } 
     return localPart(mail, idx) + "@" + IDN.toASCII(domain(mail, idx)); 
    } 

    private static String localPart(String mail, int idx) { 
     return mail.substring(0, idx); 
    } 

    private static String domain(String mail, int idx) { 
     return mail.substring(idx + 1); 
    } 

} 

उत्तर

2

RFC6530 के कारण आप वास्तव में UTF-8 के रूप में ईमेल सांकेतिक शब्दों में बदलना चाहिए। इसका मतलब है कि आपको आईडीएन का उपयोग नहीं करना चाहिए।
यदि आपका आउटगोइंग एसएमटीपी सर्वर ईएआई (अंतर्राष्ट्रीयकृत ईमेल) का समर्थन करता है, तो यह कोई समस्या नहीं होनी चाहिए।

कृपया ध्यान रखें कि ईएआई गंभीर सुरक्षा जोखिम पैदा कर सकता है। यदि आप अपने आवेदन (सेवा?) में हैंडल करने का निर्णय लेते हैं, तो उपयोगकर्ताओं को समान रूप से दिखने वाले ईमेल पते पंजीकृत करने से रोकने के लिए सुनिश्चित करें, यानी विभिन्न स्क्रिप्ट का उपयोग करने वाले लोग। उदाहरण के लिए, इन लोगों में से एक को अस्वीकार कर दिया जाना चाहिए:

+0

6530 अभी भी एक मसौदा है, नहीं? – bmargulies

+0

"प्रस्तावित मानक" और "श्रेणी: मानक ट्रैक" कुछ और सुझाव देता है। इस तरह यह लागू किया जाना प्रतीत होता है और मुझे पूरा विश्वास है कि वहां इस एक्सटेंशन का समर्थन करने वाले एसएमटीपी सर्वर हैं। –

3

पावेल अनिवार्य रूप से सही है कि पतों को UTF-8 के रूप में एन्कोड किया जाना चाहिए यदि आपका सर्वर इसका समर्थन करता है, लेकिन यह उससे अधिक जटिल है क्योंकि वर्तमान में जावामेल सर्वर एक्सटेंशन का समर्थन नहीं करता है जो यूटीएफ -8 शीर्षकों के उपयोग की अनुमति देता है।

एक संभावित कामकाज में जावा यूनिकोड स्ट्रिंग को एक यूटीएफ -8 एन्कोडेड बाइट सरणी में परिवर्तित करना शामिल है, फिर जावा यूनिकोड स्ट्रिंग बनाना जहां प्रत्येक बाइट एक अलग आईएसओ -885 9 -1 वर्ण है। मैंने यह कोशिश नहीं की है इसलिए मुझे नहीं पता कि यह अन्य मुद्दों में चलेगा, लेकिन जावामेल में आवश्यक समर्थन के बिना यह शायद आपकी सबसे अच्छी आशा है।

उदाहरण के लिए:

address = new String(address.getBytes("utf-8"), "iso-8859-1"); 
+2

यदि आप जावामेल के किसी संस्करण का परीक्षण करने में रुचि रखते हैं जिसमें गैर-ASCII शीर्षलेखों के लिए समर्थन शामिल है, तो [email protected] पर मुझसे संपर्क करें। –

+0

क्या आपने उपरोक्त कोशिश की? क्या आप जावामेल के एक निश्चित संस्करण का परीक्षण करना चाहते हैं? –

+0

मैंने कभी तुमसे कभी नहीं सुना है इसलिए मुझे लगता है कि यह आपके लिए महत्वपूर्ण नहीं था। –

1

अपने ईमेल के हेडर के लिए, इस का हल RFC-2047, जो ईमेल में गैर आईएसओ 646 पात्रों के लिए एक विशिष्ट एन्कोडिंग प्रोटोकॉल परिभाषित करता है। जावा मेल का उपयोग करने के लिए एक वर्ग है: MimeUtility। हेरिक उपयोग के लिए Punicode/IDNS अनुचित है।

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

+0

क्या आप विस्तृत कर सकते हैं कि मैं एक गैर-ASCII ईमेल पते को एन्कोड करने के लिए माइमउटीलिटी क्लास का उपयोग कैसे करूं? साथ ही, मेरे पास ईमेल की गारंटी है कि ईमेल सर्वर द्वारा इस रूट पर अस्वीकार नहीं किया जाएगा? – Adrian

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