2010-07-21 15 views
7

मैं एक ऐप लिखने की कोशिश कर रहा हूं जो समय-समय पर जीमेल संदेशों की सामग्री को पार करता है। मैं जावामेल पूछे जाने वाले प्रश्नों के माध्यम से रहा हूं और मैंने जावामेल डाउनलोड पैकेज में कई उदाहरण देखे हैं लेकिन यह काम करने में असमर्थ रहे हैं।क्या कोई अच्छा शॉर्ट कोड उदाहरण है जो बस एक नया जीमेल संदेश पढ़ता है?

Host is unresolved: imaps.gmail.com:993

मैं भी imap.gmail.com:143 कोशिश की, लेकिन मिल गया है::

Host is unresolved: imap.gmail.com:143

कोई मदद या सलाह बहुत सराहना की जाएगी कोड के नीचे वर्तमान में निम्नलिखित जीमेल त्रुटि होती है।

public class GMailReader extends javax.mail.Authenticator { 
    private String mailhost = "imaps.gmail.com"; 
    private String user; 
    private String password; 
    private Session session; 
    public GMailReader(String user, String password) { 
     this.user = user; 
     this.password = password; 
     Properties props = new Properties(); 
     props.setProperty("mail.transport.protocol", "imaps"); 
     props.setProperty("mail.imaps.host", mailhost); 
     props.put("mail.imaps.auth", "true"); 
     props.put("mail.imaps.port", "993"); 
     props.put("mail.imaps.socketFactory.port", "993"); 
     props.put("mail.imaps.socketFactory.class", 
        "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.imaps.socketFactory.fallback", "false"); 
     props.setProperty("mail.imaps.quitwait", "false"); 
     session = Session.getDefaultInstance(props, this); 
    } 
    public synchronized Message[] readMail() throws Exception { 
     try { 
      Store store = session.getStore("imaps"); 
      store.connect("imaps.gmail.com", user, password); 
      Folder folder = store.getFolder("INBOX"); 
      folder.open(Folder.READ_ONLY); 
      Message[] msgs = folder.getMessages(1, 10); 
      FetchProfile fp = new FetchProfile(); 
      fp.add(FetchProfile.Item.ENVELOPE); 
      folder.fetch(msgs, fp); 
      return msgs; 
     } catch (Exception e) { 
      Log.e("readMail", e.getMessage(), e); 
      return null; 
     } 
    } 
} 

उत्तर

5

मैं एक उदाहरण here कि मददगार था पाया: GMailReader वर्ग मैं कोशिश करते हैं और Gmail IMAP संदेशों वापस जाने के लिए उपयोग कर रहा हूँ है। मेरी त्रुटि "mail.store.protocol" के बजाय "mail.transport.protocol" का उपयोग थी।

+0

होस्ट अनसुलझा है: imaps.gmail.com। मैं इस –

+0

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

2

मुझे लगता है कि GmailReader अवधारणा बहुत उपयोगी और GmailSender उदाहरण whith अनुसार अच्छी तरह से डिजाइन यहाँ दिखाया: Sending Email in Android using JavaMail API without using the default/built-in app

लेकिन कोई भी समाचार, त्रुटि पर नीचे से पूछा? और जैकन के प्रस्ताव के कार्यान्वयन?

बेस्ट सादर एसकेएन

+0

स्पष्ट रूप से javamail दस्तावेज़ के अनुसार: http://www.oracle.com/technetwork/java/faq-135477.html#gmail पीओपी 3 प्रोटोकॉल के बजाय IMAP प्रोटोकॉल का उपयोग करके जीमेल से कनेक्ट करने के लिए, बस होस्ट का नाम बदलें " pop.gmail.com "से" imap.gmail.com "और उपरोक्त निर्देशों में प्रोटोकॉल नाम" pop3s "को" imaps "में बदलें। – snakeman

4

इसके बाद

public class GMailReader extends javax.mail.Authenticator { 
    private static final String TAG = "GMailReader"; 

    private String mailhost = "imap.gmail.com"; 
    private Session session; 
    private Store store; 

    public GMailReader(String user, String password) { 

     Properties props = System.getProperties(); 
     if (props == null){ 
     Log.e(TAG, "Properties are null !!"); 
     }else{ 
     props.setProperty("mail.store.protocol", "imaps");    

     Log.d(TAG, "Transport: "+props.getProperty("mail.transport.protocol")); 
     Log.d(TAG, "Store: "+props.getProperty("mail.store.protocol")); 
     Log.d(TAG, "Host: "+props.getProperty("mail.imap.host")); 
     Log.d(TAG, "Authentication: "+props.getProperty("mail.imap.auth")); 
     Log.d(TAG, "Port: "+props.getProperty("mail.imap.port")); 
     } 
    try { 
     session = Session.getDefaultInstance(props, null); 
     store = session.getStore("imaps"); 
     store.connect(mailhost, user, password); 
     Log.i(TAG, "Store: "+store.toString()); 
    } catch (NoSuchProviderException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (MessagingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public synchronized Message[] readMail() throws Exception { 
    try { 
     Folder folder = store.getFolder("Inbox"); 
     folder.open(Folder.READ_ONLY); 

     /* TODO to rework 
     Message[] msgs = folder.getMessages(1, 10); 
     FetchProfile fp = new FetchProfile(); 
     fp.add(FetchProfile.Item.ENVELOPE); 
     folder.fetch(msgs, fp); 
     */ 
     Message[] msgs = folder.getMessages(); 
     return msgs; 
    } catch (Exception e) { 
     Log.e("readMail", e.getMessage(), e); 
     return null; 
    } 
} 
} 

अलविदा

2

के सही संस्करण परीक्षण, त्रुटि की एक बड़ी राशि के बाद और googling, इस उत्तर के Snakeman के संस्करण व्यावहारिक उदाहरण प्रदान की मैं एक जीमेल पाठक के लिए आवश्यक;

हालांकि अन्य लोगों को अवगत होना चाहिए (यदि एंड्रॉइड एसडीके के बाद के संस्करणों का उपयोग करना है) मेनिफेस्ट अनुमति आवश्यकताओं और मुख्य UI थ्रेड से संभावित रूप से लंबे समय तक चलने वाले कार्यों को स्थानांतरित करने के लिए asyncTask का उपयोग करने की आवश्यकता), जिनमें से दोनों का उल्लेख है this SMTP example

मुझे यह भी उल्लेख करना चाहिए कि यदि मेरे जैसे, आप एक एसएमटीपी भेजने वाले वर्ग को भी लागू करना चाहते हैं, तो मैंने सत्र.getDefaultInstance के स्थान पर सत्र.getInstance का उपयोग किया जाना चाहिए।

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