Autore Topic: [ERRORE] protocollo di posta SMTP  (Letto 1182 volte)

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
[ERRORE] protocollo di posta SMTP
« il: 09 Febbraio 2013, 09:50:57 CET »
0
Buongiorno a tutti =)
Avevo in mente di fare un app che utilizza il protocollo SMTP (protocollo di posta per l'e-mail in uscita) per inviare e-mail...
Ho trovato le classi adeguate per fare questo...innoltre java permette tramite delle sue librerie di configurare un client mail
UNICA PECCA..non riesco a configurare il mio client con altri client di posta (es hotmail virgilio alice....) funziona esclusivamente con gmail...
Nel logCat noto che avviene un errore di protocollo all'autenticazione...
JSSEProvider.java è la classe per eseguire l'autenticazione al server di posta
Codice (Java): [Seleziona]
/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */


/**
 * @author Alexander Y. Kleymenov
 * @version $Revision$
 */



import java.security.AccessController;
import java.security.Provider;

@SuppressWarnings("serial")
public final class JSSEProvider extends Provider {

    /**
         * SERVE PER ESEGUIRE L'AUTENTICAZIONE AL SERVER DI POSTA CON I VARI CERTIFICATI SSL
         */

        //private static final long serialVersionUID = 1L;

        public JSSEProvider() {
        super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
        AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {
            public Void run() {
                put("SSLContext.TLS",
                        "org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
                put("Alg.Alias.SSLContext.TLSv1", "TLS");
                put("KeyManagerFactory.X509",
                        "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
                put("TrustManagerFactory.X509",
                        "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
                return null;
            }
        });
    }
}
/////////////////////////////////////////////////////////////////////////////
MAIL è la classe che contiene le configurazioni del client di posta
Codice (Java): [Seleziona]
import java.util.Date;
import java.util.Properties;
import javax.activation.CommandMap;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.activation.MailcapCommandMap;
import javax.mail.BodyPart;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
 
 
public class Mail extends javax.mail.Authenticator {
        private String _user;
        private String _pass;

        private String[] _to;
        private String _from;

        private String _port;
        private String _sport;

        private String _host;

        private String _subject;
        private String _body;

        private boolean _auth;

        private boolean _debuggable;

        private Multipart _multipart;

       
        public Mail() {
                //_host = "smtp.gmail.com"; // default smtp server
                _host = "out.virgilio.it";
                //_port = "465"; // default smtp port
                //_sport = "465"; // default socketfactory port
                _port = "25"; // default smtp port
                _sport = "25";         

                _user = ""; // username
                _pass = ""; // password
                _from = ""; // email sent from
                _subject = ""; // email subject
                _body = ""; // email body

                _debuggable = false; // debug mode on or off - default off
                _auth = true; // smtp authentication - default on

                _multipart = new MimeMultipart();

                // There is something wrong with MailCap, javamail can not find a
                // handler for the multipart/mixed part, so this bit needs to be added.
                MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
                mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
                mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
                mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
                mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
                mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
                CommandMap.setDefaultCommandMap(mc);
        }

       
        public Mail(String user, String pass) {
                this();
                _user = user;
                _pass = pass;
        }
       
         public void setTo(String[] toArr){
                 _to = toArr;
         }
         
     public void setFrom(String from){
         _from = from;
     }
     public void setSubject(String subject){
         _subject = subject;
     }

        public boolean send() throws Exception {
                Properties props = _setProperties();
                if (!_user.equals("") && !_pass.equals("") && _to.length > 0
                                && !_from.equals("") && !_subject.equals("")
                                && !_body.equals("")) {
                        Session session = Session.getInstance(props, this);
                        MimeMessage msg = new MimeMessage(session);
                        msg.setFrom(new InternetAddress(_from));
                        InternetAddress[] addressTo = new InternetAddress[_to.length];
                        for (int i = 0; i < _to.length; i++) {
                                addressTo[i] = new InternetAddress(_to[i]);
                        }
                        msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);
                        msg.setSubject(_subject);
                        msg.setSentDate(new Date());
                        // setup message body
                        BodyPart messageBodyPart = new MimeBodyPart();
                        messageBodyPart.setText(_body);
                        _multipart.addBodyPart(messageBodyPart);
                        // Put parts in message
                        msg.setContent(_multipart);
                        // send email
                        Transport.send(msg);
                        return true;
                } else {
                        return false;
                }
        }

        public void addAttachment(String filename) throws Exception {
                BodyPart messageBodyPart = new MimeBodyPart();
                DataSource source = new FileDataSource(filename);
                messageBodyPart.setDataHandler(new DataHandler(source));
                messageBodyPart.setFileName(filename);

                _multipart.addBodyPart(messageBodyPart);
        }

        @Override
        public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(_user, _pass);
        }

        private Properties _setProperties() {
                Properties props = new Properties();

                props.put("mail.smtp.host", _host);

                if (_debuggable) {
                        props.put("mail.debug", "true");
                }

                if (_auth) {
                        props.put("mail.smtp.auth", "true");
                }

                props.put("mail.smtp.port", _port);
                props.put("mail.smtp.socketFactory.port", _sport);
                props.put("mail.smtp.socketFactory.class",
                                "javax.net.ssl.SSLSocketFactory");
                props.put("mail.smtp.socketFactory.fallback", "false");

                return props;
        }

        // the getters and setters
        public String getBody() {
                return _body;
        }

        public void setBody(String _body) {
                this._body = _body;
        }

}

INFINE POSTO IL LOGCAT
Codice: [Seleziona]
02-09 09:37:56.170: W/System.err(4575): javax.mail.MessagingException: Could not connect to SMTP host: out.virgilio.it, port: 587;
02-09 09:37:56.170: W/System.err(4575):   nested exception is:
02-09 09:37:56.180: W/System.err(4575):         javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x2a27e8: Failure in SSL library, usually a protocol error
02-09 09:37:56.180: W/System.err(4575): error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:683 0x4026ccc3:0x00000000)
02-09 09:37:56.180: W/System.err(4575):         at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391)
02-09 09:37:56.180: W/System.err(4575):         at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
02-09 09:37:56.180: W/System.err(4575):         at javax.mail.Service.connect(Service.java:310)
02-09 09:37:56.180: W/System.err(4575):         at javax.mail.Service.connect(Service.java:169)
02-09 09:37:56.180: W/System.err(4575):         at javax.mail.Service.connect(Service.java:118)
02-09 09:37:56.180: W/System.err(4575):         at javax.mail.Transport.send0(Transport.java:188)
02-09 09:37:56.180: W/System.err(4575):         at javax.mail.Transport.send(Transport.java:118)
02-09 09:37:56.180: W/System.err(4575):         at com.gestione.email.servizio.Mail.send(Mail.java:113)
02-09 09:37:56.180: W/System.err(4575):         at com.gestione.email.servizio.MainActivity$ApplicationSimpleAsyncTask.doInBackground(MainActivity.java:280)
02-09 09:37:56.190: W/System.err(4575):         at com.gestione.email.servizio.MainActivity$ApplicationSimpleAsyncTask.doInBackground(MainActivity.java:1)
02-09 09:37:56.190: W/System.err(4575):         at android.os.AsyncTask$2.call(AsyncTask.java:264)
02-09 09:37:56.190: W/System.err(4575):         at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-09 09:37:56.190: W/System.err(4575):         at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-09 09:37:56.190: W/System.err(4575):         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
02-09 09:37:56.190: W/System.err(4575):         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-09 09:37:56.190: W/System.err(4575):         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-09 09:37:56.190: W/System.err(4575):         at java.lang.Thread.run(Thread.java:856)
02-09 09:37:56.190: W/System.err(4575): Caused by: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x2a27e8: Failure in SSL library, usually a protocol error
02-09 09:37:56.200: W/System.err(4575): error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:683 0x4026ccc3:0x00000000)
02-09 09:37:56.200: W/System.err(4575):         at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:460)
02-09 09:37:56.200: W/System.err(4575):         at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.<init>(OpenSSLSocketImpl.java:643)
02-09 09:37:56.200: W/System.err(4575):         at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:614)
02-09 09:37:56.200: W/System.err(4575):         at com.sun.mail.smtp.SMTPTransport.initStreams(SMTPTransport.java:1449)
02-09 09:37:56.200: W/System.err(4575):         at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1366)
02-09 09:37:56.200: W/System.err(4575):         ... 16 more
02-09 09:37:56.200: W/System.err(4575): Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x2a27e8: Failure in SSL library, usually a protocol error
02-09 09:37:56.200: W/System.err(4575): error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:683 0x4026ccc3:0x00000000)
02-09 09:37:56.200: W/System.err(4575):         at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
02-09 09:37:56.210: W/System.err(4575):         at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:410)
02-09 09:37:56.210: W/System.err(4575):         ... 20 more

ALLEGATI LIBRERIE(devono essere copiate nella cartella libs)
https://www.dropbox.com/s/y5zd0oy3il4n77b/activation.jar
https://www.dropbox.com/s/byqqjljwk9anxov/additionnal.jar
https://www.dropbox.com/s/65qkwkn7wlkwmqj/mail.jar
« Ultima modifica: 09 Febbraio 2013, 09:57:05 CET da MisterAnt »
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:[ERRORE] protocollo di posta SMTP
« Risposta #1 il: 09 Febbraio 2013, 10:13:37 CET »
0
mi sembra un problema un po tanto specifico a cui forse pochi qui abbiano mai lavorato..
per intanto, una rapida ricerca sul web mi ha portato qui:
java - SSLException in using JavaMail API - Stack Overflow

vedi se ti aiuta
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Re:[ERRORE] protocollo di posta SMTP
« Risposta #2 il: 09 Febbraio 2013, 11:51:19 CET »
0
Grazie...ma purtroppo ancora non sono riuscito a risolvere il problema
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Re:[ERRORE] protocollo di posta SMTP
« Risposta #3 il: 11 Febbraio 2013, 09:17:35 CET »
0
Qualcuno è riuscito a configurare JavaMail con un account DIVERSO da gmail ?????????????????
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?