I have the following code that is trying to send an email in the background. I used a text view to see the exception. However, although nothing is displayed in the text view, I also cannot receive mail. So I'm not sure if the mail was delivered successfully or not. Can anybody help me?
Based on the suggestions, I changed my program as follows:
new 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(" me@gmail.com ", "password"); String[] toAddress = {" me@gmail.com "}; sender.setTo(toAddress); sender.setFrom(" me@gmail.com "); 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(); } } } }
new 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; } }
After I changed the program, when I press the button, it stops in the pre-execution state, showing "Downloading logs. Wait." Mail cannot be sent.
And in the 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.
Since it does not work, so I try to hide the onpreexecute function, but nothing changes, mail cannot be sent, here are the messages in the error 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
I am already performing a send operation in AsyncTask, may I ask why it still does not work?