Scheitern senden Sie E-mail mit JavaMail API

Habe ich den folgenden code versucht, eine E-Mail senden im hintergrund. Ich habe einen textview zu sehen, die Ausnahme. Jedoch, obwohl nichts angezeigt wird, ist in der textview, ich kann auch nicht die E-mail empfangen. Also ich bin mir nicht sicher, ob die E-mail wurde erfolgreich zugestellt wird oder nicht. Kann jemand eine Hilfe für mich?

Basiert auf den Vorschlägen, die ich geändert haben, dass mein Programm wie folgt:

neuen Sender.java

public class Sender extends Activity {
    Button Send;
    TextView text;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sender);

        Send = (Button) findViewById(R.id.mail);
        text = (TextView) findViewById(R.id.textView1);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
        .permitAll().build();
        StrictMode.setThreadPolicy(policy); 

        Send.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                //TODO Auto-generated method stub
                new SendMail().execute();
            }
        });

    }

    private class SendMail extends AsyncTask<String, Void, String> 
    { 
        ProgressDialog pd = null;
        String error = null;
        Integer result;

        @Override
        protected void onPreExecute() {
            //TODO Auto-generated method stub
            super.onPreExecute();
            pd = new ProgressDialog(Sender.this);
            pd.setTitle("Uploading");
            pd.setMessage("Uploading logs. Please wait");
            pd.setCancelable(false);
            pd.show();
        }

        @Override 
        protected String doInBackground(String... params) { 
            //TODO Auto-generated method stub 

            MailSender sender = new MailSender("[email protected]", "password"); 

            String[] toAddress = {"[email protected]"};
            sender.setTo(toAddress);
            sender.setFrom("[email protected]");
            sender.setSubject("Test mail");
            sender.setBody("This is the mail body");
            try {
                if(sender.send()) {
                    System.out.println("Message sent");
                    result = 1;
                } else {
                    result = 2;
                }
            } catch (Exception e) {   
                error = e.getMessage();
                Log.e("SendMail", e.getMessage(), e);    
            }

            result = 3; 
            return null;
        } 

        protected void onPostExecute() {
            pd.dismiss();
            if(error!=null) {
                text.setText(error);
            }
            if(result==1) {
                Toast.makeText(Sender.this,
                    "Email was sent successfully.", Toast.LENGTH_LONG)
                    .show();
            } else if(result==2) {
                Toast.makeText(Sender.this,
                        "Email was not sent.", Toast.LENGTH_LONG).show();
            } else if(result==3) {
                Toast.makeText(Sender.this,
                        "There was a problem sending the email.",
                        Toast.LENGTH_LONG).show();
            }
        }
    }   
}

neuen MailSender.java

public class MailSender extends Authenticator {
    private String user;
    private String password;

    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 multi;

    public MailSender(){
        host = "smtp.gmail.com";
        port = "465";
        sport = "465";

        user = "";
        password = "";
        from = "";
        subject = "";
        body = "";

        debuggable = false;
        auth = true;

        multi = 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/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 MailSender(String user, String password){
        this();      
        user = user;
        password = password;   
    }

    public boolean send() throws Exception {
        Properties props = setProperties();

        try{
            Session session = Session.getInstance(props, this);
            session.setDebug(true);

            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());

            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText(body);
            multi.addBodyPart(messageBodyPart);

            msg.setContent(multi);

            Transport transport = session.getTransport("smtps");
            transport.connect(host, 465, user, password);
            transport.sendMessage(msg, msg.getAllRecipients());
            transport.close();
            return true;
        } catch (Exception e) {
            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);

        multi.addBodyPart(messageBodyPart);
    }

    @Override 
      public PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(user, password); 
      }

    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;
    }

    public void setTo(String[] toAddress) {
        this.to = toAddress;
    }

    public void setFrom(String fromAddress) {
        this.from = fromAddress;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

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

Nach änderte ich das programm, wenn ich auf die Schaltfläche klicke, Stoppt es bei pre-execution Zustand, die Anzeige der "Upload logs. Bitte warten". E-Mail kann nicht gesendet werden.

Und in der error log:

08-14 16:26:29.872: I/System.out(22439): DEBUG: setDebug: JavaMail version 1.4.1
08-14 16:26:29.888: I/System.out(22439): DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc.,1.4.1]
08-14 16:26:29.896: I/System.out(22439): DEBUG SMTP: useEhlo true, useAuth false
08-14 16:26:29.896: I/System.out(22439): DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
08-14 16:26:30.568: I/System.out(22439): 220 mx.google.com ESMTP nq6sm593334pbc.56
08-14 16:26:30.568: I/System.out(22439): DEBUG SMTP: connected to host "smtp.gmail.com", port: 465
08-14 16:26:30.568: I/System.out(22439): EHLO localhost
08-14 16:26:30.716: I/System.out(22439): 250-mx.google.com at your service, [202.155.209.250]
08-14 16:26:30.716: I/System.out(22439): 250-SIZE 35882577
08-14 16:26:30.716: I/System.out(22439): 250-8BITMIME
08-14 16:26:30.716: I/System.out(22439): 250-AUTH LOGIN PLAIN XOAUTH
08-14 16:26:30.716: I/System.out(22439): 250 ENHANCEDSTATUSCODES
08-14 16:26:30.716: I/System.out(22439): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-14 16:26:30.716: I/System.out(22439): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-14 16:26:30.716: I/System.out(22439): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH"
08-14 16:26:30.716: I/System.out(22439): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-14 16:26:30.716: I/System.out(22439): DEBUG SMTP: Attempt to authenticate
08-14 16:26:30.724: I/System.out(22439): AUTH LOGIN
08-14 16:26:30.872: I/System.out(22439): 334 VXNlcm5hbWU6
08-14 16:26:30.872: I/System.out(22439): 
08-14 16:26:31.021: I/System.out(22439): 334 UGFzc3dvcmQ6
08-14 16:26:31.021: I/System.out(22439): 
08-14 16:26:31.169: I/System.out(22439): 334 UGFzc3dvcmQ6
08-14 16:26:31.177: I/System.out(22439): DEBUG SMTP: useEhlo true, useAuth false
08-14 16:26:31.177: I/System.out(22439): DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
08-14 16:26:31.552: D/dalvikvm(22439): GC_CONCURRENT freed 341K, 4% free 11097K/11527K, paused 13ms+3ms, total 37ms
08-14 16:26:31.794: I/System.out(22439): 220 mx.google.com ESMTP st6sm593199pbc.58
08-14 16:26:31.794: I/System.out(22439): DEBUG SMTP: connected to host "smtp.gmail.com", port: 465
08-14 16:26:31.794: I/System.out(22439): EHLO localhost
08-14 16:26:31.943: I/System.out(22439): 250-mx.google.com at your service, [202.155.209.250]
08-14 16:26:31.943: I/System.out(22439): 250-SIZE 35882577
08-14 16:26:31.943: I/System.out(22439): 250-8BITMIME
08-14 16:26:31.943: I/System.out(22439): 250-AUTH LOGIN PLAIN XOAUTH
08-14 16:26:31.943: I/System.out(22439): 250 ENHANCEDSTATUSCODES
08-14 16:26:31.950: I/System.out(22439): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-14 16:26:31.950: I/System.out(22439): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-14 16:26:31.950: I/System.out(22439): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH"
08-14 16:26:31.950: I/System.out(22439): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-14 16:26:31.950: I/System.out(22439): DEBUG SMTP: Attempt to authenticate
08-14 16:26:31.950: I/System.out(22439): AUTH LOGIN
08-14 16:26:32.099: I/System.out(22439): 334 VXNlcm5hbWU6
08-14 16:26:32.099: I/System.out(22439): 
08-14 16:26:32.247: I/System.out(22439): 334 UGFzc3dvcmQ6
08-14 16:26:32.247: I/System.out(22439): 
08-14 16:26:32.403: I/System.out(22439): 334 UGFzc3dvcmQ6
08-14 16:27:00.200: I/Choreographer(22439): Skipped 35 frames!  The application may be doing too much work on its main thread.

Da es nicht funktioniert, so dass ich versuchen zu verbergen die Funktion onpreexecute, aber es ändert sich nichts, E-mail kann nicht gesendet werden, hier sind die Nachrichten in der Fehler-log:

08-14 16:31:18.958: I/System.out(22759): DEBUG: setDebug: JavaMail version 1.4.1
08-14 16:31:18.974: I/System.out(22759): DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc.,1.4.1]
08-14 16:31:18.974: I/System.out(22759): DEBUG SMTP: useEhlo true, useAuth false
08-14 16:31:18.974: I/System.out(22759): DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
08-14 16:31:19.739: I/System.out(22759): 220 mx.google.com ESMTP og7sm597805pbb.62
08-14 16:31:19.739: I/System.out(22759): DEBUG SMTP: connected to host "smtp.gmail.com", port: 465
08-14 16:31:19.739: I/System.out(22759): EHLO localhost
08-14 16:31:19.888: I/System.out(22759): 250-mx.google.com at your service, [202.155.209.250]
08-14 16:31:19.888: I/System.out(22759): 250-SIZE 35882577
08-14 16:31:19.888: I/System.out(22759): 250-8BITMIME
08-14 16:31:19.888: I/System.out(22759): 250-AUTH LOGIN PLAIN XOAUTH
08-14 16:31:19.888: I/System.out(22759): 250 ENHANCEDSTATUSCODES
08-14 16:31:19.888: I/System.out(22759): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-14 16:31:19.888: I/System.out(22759): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-14 16:31:19.888: I/System.out(22759): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH"
08-14 16:31:19.888: I/System.out(22759): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-14 16:31:19.888: I/System.out(22759): DEBUG SMTP: Attempt to authenticate
08-14 16:31:19.896: I/System.out(22759): AUTH LOGIN
08-14 16:31:20.044: I/System.out(22759): 334 VXNlcm5hbWU6
08-14 16:31:20.044: I/System.out(22759): 
08-14 16:31:20.185: I/System.out(22759): 334 UGFzc3dvcmQ6
08-14 16:31:20.185: I/System.out(22759): 
08-14 16:31:20.341: I/System.out(22759): 334 UGFzc3dvcmQ6
08-14 16:31:20.341: I/System.out(22759): DEBUG SMTP: useEhlo true, useAuth false
08-14 16:31:20.341: I/System.out(22759): DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
08-14 16:31:20.786: I/System.out(22759): 220 mx.google.com ESMTP og7sm597845pbb.62
08-14 16:31:20.786: I/System.out(22759): DEBUG SMTP: connected to host "smtp.gmail.com", port: 465
08-14 16:31:20.786: I/System.out(22759): EHLO localhost
08-14 16:31:20.935: I/System.out(22759): 250-mx.google.com at your service, [202.155.209.250]
08-14 16:31:20.935: I/System.out(22759): 250-SIZE 35882577
08-14 16:31:20.935: I/System.out(22759): 250-8BITMIME
08-14 16:31:20.935: I/System.out(22759): 250-AUTH LOGIN PLAIN XOAUTH
08-14 16:31:20.935: I/System.out(22759): 250 ENHANCEDSTATUSCODES
08-14 16:31:20.943: I/System.out(22759): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-14 16:31:20.943: I/System.out(22759): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-14 16:31:20.943: I/System.out(22759): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH"
08-14 16:31:20.943: I/System.out(22759): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-14 16:31:20.943: I/System.out(22759): DEBUG SMTP: Attempt to authenticate
08-14 16:31:20.943: I/System.out(22759): AUTH LOGIN
08-14 16:31:21.091: I/System.out(22759): 334 VXNlcm5hbWU6
08-14 16:31:21.091: I/System.out(22759): 
08-14 16:31:21.239: I/System.out(22759): 334 UGFzc3dvcmQ6
08-14 16:31:21.239: I/System.out(22759): 
08-14 16:31:21.380: I/System.out(22759): 334 UGFzc3dvcmQ6
08-14 16:31:49.357: W/IInputConnectionWrapper(22759): clearMetaKeyStates on inactive InputConnection

Habe ich bereits die Durchführung der send-operation in AsyncTask, darf ich Fragen, warum es immer noch nicht funktioniert?

InformationsquelleAutor Conrad | 2012-08-14
Schreibe einen Kommentar