Я хочу прочитать свои электронные письма из ms exchange, я использую java mail api отсюда http://code.google.com/p/javamail-android/, и я успешно извлек сообщения из моего аккаунта Google ... Проблема с обменом заключается в том, что он у меня естьлокально и у меня нет общедоступного сертификата, и Android дает мне 03-07 13:12:25.708: WARN/System.err(3886): javax.mail.MessagingException: Not trusted server certificate;
Как я могу пройти проверку сертификата?
Я видел пример Vynayak отсюда: Отправка электронной почты в Android с использованием JavaMail API без использования встроенного в приложение по умолчанию
, что он использует некоторый класс TrustManagerи я тоже пытался это сделать, но я не знаю, как связать класс trustFactory со свойствами imap.
Пока у меня есть это в моей деятельности:
Properties props = new Properties();
props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.store.socketFactory.class",
"com.imap.DummySSLSocketFactory");
// Prevents to fall into NOT-secure connection
props.setProperty("mail.pop3.socketFactory.fallback", "false");
try {
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("mail.domain.com", "user", "pass");
System.out.println(store);
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
Message messages[] = inbox.getMessages();
for (Message message : messages) {
System.out.println(message);
}
} catch (NoSuchProviderException e) {
e.printStackTrace();
System.exit(1);
} catch (MessagingException e) {
e.printStackTrace();
System.exit(2);
}
ЗдесьЯ знаю, что строка props.setProperty("mail.store.socketFactory.class",
"com.imap.DummySSLSocketFactory");
не реализована должным образом, потому что я не знаю, как я могу использовать ее с imaps ..
И DummyTrustManager:
package com.imap;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class DummyTrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] cert, String authType) throws CertificateException {
// everything is trusted
}
public void checkServerTrusted(X509Certificate[] cert, String authType) throws CertificateException {
// everything is trusted
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
И DummySoketSSLFactory:
package com.imap;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import javax.net.SocketFactory;
import javax.net.ssl.*;
public class DummySSLSocketFactory extends SSLSocketFactory {
private SSLSocketFactory factory;
public DummySSLSocketFactory() {
try {
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null,
new TrustManager[] { new DummyTrustManager() },
null);
factory = (SSLSocketFactory)sslcontext.getSocketFactory();
} catch(Exception ex) {
}
}
public static SocketFactory getDefault() {
return new DummySSLSocketFactory();
}
public Socket createSocket() throws IOException {
return factory.createSocket();
}
public Socket createSocket(Socket socket, String s, int i, boolean flag)
throws IOException {
return factory.createSocket(socket, s, i, flag);
}
public Socket createSocket(InetAddress inaddr, int i,
InetAddress inaddr1, int j) throws IOException {
return factory.createSocket(inaddr, i, inaddr1, j);
}
public Socket createSocket(InetAddress inaddr, int i)
throws IOException {
return factory.createSocket(inaddr, i);
}
public Socket createSocket(String s, int i, InetAddress inaddr, int j)
throws IOException {
return factory.createSocket(s, i, inaddr, j);
}
public Socket createSocket(String s, int i) throws IOException {
return factory.createSocket(s, i);
}
public String[] getDefaultCipherSuites() {
return factory.getDefaultCipherSuites();
}
public String[] getSupportedCipherSuites() {
return factory.getSupportedCipherSuites();
}
}
Фиктивные классы с http://www.anddev.org/advanced-tutorials-f21/javamail-and-android-little-excursus-t3093.html
Пожалуйста, помогите мне получить эту работу