2013-01-09 13 views
6

के साथ IMAP/SMTP प्रमाणीकरण मैं उपयोगकर्ता नाम और पासवर्ड का उपयोग करने के बजाय एंड्रॉइड के खाता प्रबंधक से प्राप्त टोकन का उपयोग करके एक साधारण IMAP/SMTP जीमेल क्लाइंट को कार्यान्वित करने का प्रयास कर रहा हूं। मैंAuthToken() प्राप्त करने के लिए "mail" को authTokenType पैरामीटर के रूप में उपयोग करने का प्रयास कर रहा हूं।खातामैनेजर टोकन

गूगल OAuth2 http://code.google.com/p/google-mail-oauth2-tools/source/browse/#svn%2Ftrunk%2Fjava%2Fcom%2Fgoogle%2Fcode%2Fsamples%2Foauth2 http://code.google.com/p/google-mail-oauth2-tools/wiki/JavaSampleCode

साथ एसएमटीपी/IMAP के इस उदाहरण प्रदान करता है, लेकिन यह जावा के लिए है। मेरे एंड्रॉइड प्रोजेक्ट में इसका उपयोग कुछ आयात (एसएएसएल के बारे में) गायब है। उन्हें हल करने के लिए मैं इस पुस्तकालय http://code.google.com/p/asmack/

उदाहरण का उपयोग संकलन लेकिन मैं क्रम में एक समस्या नोटिस

10-04 10:05:44.715: I/System.out(1226): DEBUG: setDebug: JavaMail version 1.4.1 
10-04 10:05:44.750: I/System.out(1226): DEBUG: mail.imap.fetchsize: 16384 
10-04 10:05:44.750: I/System.out(1226): DEBUG: enable SASL 
10-04 10:05:44.750: I/System.out(1226): DEBUG: SASL mechanisms allowed: XOAUTH2 
10-04 10:05:46.137: I/System.out(1226): * OK Gimap ready for requests from 84.221.66.29 o42if871216eef.60 
10-04 10:05:46.137: I/System.out(1226): A0 CAPABILITY 
10-04 10:05:46.805: I/System.out(1226): * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 
10-04 10:05:46.805: I/System.out(1226): A0 OK Thats all she wrote! o42if871216eef.60 
10-04 10:05:46.805: I/System.out(1226): IMAP DEBUG: AUTH: XOAUTH 
10-04 10:05:46.805: I/System.out(1226): IMAP DEBUG: AUTH: XOAUTH2 
10-04 10:05:46.813: I/System.out(1226): DEBUG: protocolConnect login, host=imap.gmail.com, [email protected], password=<non-null> 
10-04 10:05:46.813: I/dalvikvm(1226): Could not find method javax.security.sasl.Sasl.createSaslClient, referenced from method com.sun.mail.imap.protocol.IMAPSaslAuthenticator.authenticate 
10-04 10:05:46.813: W/dalvikvm(1226): VFY: unable to resolve static method 44358: Ljavax/security/sasl/Sasl;.createSaslClient ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljavax/security/auth/callback/CallbackHandler;)Ljavax/security/sasl/SaslClient; 
10-04 10:05:46.813: D/dalvikvm(1226): VFY: replacing opcode 0x77 at 0x0050 
10-04 10:05:46.813: W/dalvikvm(1226): VFY: unable to resolve exception class 5975 (Ljavax/security/sasl/SaslException;) 
10-04 10:05:46.813: W/dalvikvm(1226): VFY: unable to find exception handler at addr 0x83 
10-04 10:05:46.844: W/dalvikvm(1226): VFY: rejected Lcom/sun/mail/imap/protocol/IMAPSaslAuthenticator;.authenticate ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z 
10-04 10:05:46.844: W/dalvikvm(1226): VFY: rejecting opcode 0x0d at 0x0083 
10-04 10:05:46.844: W/dalvikvm(1226): VFY: rejected Lcom/sun/mail/imap/protocol/IMAPSaslAuthenticator;.authenticate ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z 
10-04 10:05:46.844: W/dalvikvm(1226): Verifier rejected class Lcom/sun/mail/imap/protocol/IMAPSaslAuthenticator; 
10-04 10:05:46.844: I/System.out(1226): IMAP DEBUG: Can't load SASL authenticator: java.lang.ClassNotFoundException: com.sun.mail.imap.protocol.IMAPSaslAuthenticator 
10-04 10:05:46.844: I/System.out(1226): A1 LOGIN [email protected] anonymous 
10-04 10:05:48.137: I/System.out(1226): A1 NO [AUTHENTICATIONFAILED] Invalid credentials (Failure) 
10-04 10:05:48.164: W/System.err(1226): javax.mail.AuthenticationFailedException: [AUTHENTICATIONFAILED] Invalid credentials (Failure) 
10-04 10:05:48.176: W/System.err(1226):   at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:566) 
10-04 10:05:48.176: W/System.err(1226):   at javax.mail.Service.connect(Service.java:288) 
10-04 10:05:48.176: W/System.err(1226):   at xxx.xxx.xxx.OAuth2Authenticator.connectToImap(OAuth2Authenticator.java:111) 
10-04 10:05:48.180: W/System.err(1226):   at xxx.xxx.xxx.OAuth2Authenticator.initialize(OAuth2Authenticator.java:60) 
10-04 10:05:48.180: W/System.err(1226):   at xxx.xxx.xxx.TR_Incoming.onTimeout(TR_Incoming.java:106) 
10-04 10:05:48.180: W/System.err(1226):   at xxx.xxx.xxx.AlarmThread$1.handleMessage(AlarmThread.java:80) 
10-04 10:05:48.180: W/System.err(1226):   at android.os.Handler.dispatchMessage(Handler.java:99) 
10-04 10:05:48.180: W/System.err(1226):   at android.os.Looper.loop(Looper.java:137) 
10-04 10:05:48.180: W/System.err(1226):   at xxx.xxx.xxx.AlarmThread.run(AlarmThread.java:94) 

यह है कि asmack org.apache.harmony.javax.security का उपयोग करता है लगता है। * javax.security के बजाय । *

किसी को भी इस समस्या का सामना करना पड़ा है? Google इस उदाहरण को उनके उदाहरण में नहीं मानता है, लेकिन मुझे लगता है कि यह उपयोगकर्ता के लिए एक आम विशेषता होनी चाहिए।

धन्यवाद।

+0

समस्या तथ्य यह है कि 'com.sun.mail.imap.protocol.IMAPSaslAuthenticator' संदर्भ' javax.security.sasl' वर्ग है जो याद कर रहे हैं से उठता है। आपको संभवतः जावामेल के स्रोत मिलना चाहिए, उदाहरण के लिए, [यहां से] (http://repository.springsource.com/ivy/bundles/external/javax.mail/com.springsource.javax.mail/1.4.5/com। springsource.javax.mail-1.4.5.jar), और 'IMAPSaslAuthenticator' में' org.apache.harmony.javax.security.sasl' कक्षाओं में आयात को बदलें, ['asmack'] में उपलब्ध है (http: // code। google.com/p/asmack/), जैसा कि पहले ही उल्लेख किया गया है। – Stan

उत्तर

1

लॉग से, ऐसा लगता है कि आपके पास जावा 6 और जावा 7 फ़ाइलें मिश्रित हैं। क्या आप अपना क्लासपाथ विवरण साझा कर सकते हैं।

दूसरी संभावना यह है कि आपके पास सही प्रमाण-पत्र नहीं हैं, या तो लॉगिन या pwd गलत है।

मैंने आपके पास जो कोशिश की है, मैंने कोशिश की है, और यह काम किया है, सीधे आगे होना चाहिए। http://code.google.com/p/javamail-android/ पर http://www.mannaz.at/codebase/imap-ssl-mail-android/

यह आधारित है लेकिन ASMACK SASSL प्रमाणक का समर्थन करता है:

+0

हम यहां एंड्रॉइड सिस्टम की बात कर रहे हैं। – Mannaz

+0

क्या यह संभव है कि उसने गलत मेल जार फाइलें उठाई हैं और इसे परियोजना में शामिल किया है? वह वर्ग जो "नहीं मिल सका, केवल जावा 7 में है"। वह उदाहरण भी देख रहा है, शायद एंड्रॉइड कामकाजी उदाहरण नहीं है। यह एक जावा कामकाजी उदाहरण है। मुझे संदेह होगा .. – Siddharth

+0

ठीक है, अब मैं https://github.com/ruiaraujo/javamail_android का उपयोग करता हूं यह ठीक है – Pascal

4

आदेश JavaMail साथ ASMACK प्रमाणक का उपयोग करने के लिए मैं पुस्तकालय यहाँ उपलब्ध की एक समझौता संस्करण बनाया।

यह कक्षा JAR फ़ाइल से अनुपलब्ध है। बस अपने स्रोत कोड में जोड़ दें:

package com.falott.ingresss.util; 
public class Log { 
    public static boolean loggingEnabled(){ 
     return false; 
    } 
} 
+0

हाय, मैंने आपकी तरफ से निर्देशों का पालन किया, लेकिन मुझे 'connectToImap': ' 08- 24 22: 22: 51.967: डब्ल्यू/दल्विकविक (31 9 57): वीएफवाई: स्थैतिक विधि 4410 को हल करने में असमर्थ: एलकॉम/फाल्क/इंट्रेस/यूज/लॉग; .loggingEnabled() जेड 08-24 22: 22: 51.967: डब्ल्यू/दल्विकवम (31 9 57): वीएफवाई: स्थैतिक विधि 4410 को हल करने में असमर्थ: एलकॉम/फाल्क/इंट्रेस/यूज/लॉग; .loggingEnabled() Z' कोई विचार? –

+0

हां, मैं उस संदर्भ को हटाना भूल गया था।बस उस पैकेज के तहत कक्षा में एक स्थिर डमी विधि बनाएं और आपको ठीक होना चाहिए। – Mannaz

+0

हाय, मैं पैच किए गए संस्करण को नवीनतम जावा मेल (कुछ जीमेल/आईएमएपी बग को ठीक करने के लिए) के साथ पुनर्निर्माण करना चाहता हूं, क्या आप कृपया मुझे (हमें) बताएं कि कैसे करना है? – Pascal

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