0

My Code

 EmailSendActivity m = new EmailSendActivity("userName", "password"); 

        String[] toArr = { "Recipients"};
        m.setTo(toArr);
        m.setFrom("abc@gmail.com"); //Same as user email
        m.setSubject("Party Booked"); 
        m.setBody("Successsssssssssssssssssssssssss"); 

        try { 
          //m.addAttachment("/sdcard/filelocation"); 

          if(m.send()) { 
            Toast.makeText(this, "Sent Email.", Toast.LENGTH_LONG).show(); 
          } else { 
            Toast.makeText(this, "Email was not sent.", Toast.LENGTH_LONG).show(); 
          } 
        } catch(Exception e) { 
          //Toast.makeText(MailApp.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show(); 
          Log.e("ClaimRegister", "Could not send email.", e); 
        } 

EmailSendActivity

public class EmailSendActivity 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 EmailSendActivity() { 
        _host = "smtp.gmail.com"; // default smtp server 
        _port = "465"; // default smtp port 
        _sport = "465"; // default socketfactory port 

        _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 EmailSendActivity(String user, String pass) { 
        this(); 

        _user = user; 
        _pass = pass; 
      } 

      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); 
          Log.d("Msg !!!!","msg =" +msg.toString());
          // 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; 
      }
      public void setTo(String[] toArr) {
          this._to = toArr;
      }

      public void setFrom(String string) {
          this._from = string;
      }

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


    } 

Error

05-23 03:22:28.494: E/ClaimRegister(2107): Could not send email.

05-23 03:22:28.494: E/ClaimRegister(2107): android.os.NetworkOnMainThreadException

05-23 03:22:28.494: E/ClaimRegister(2107):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)

05-23 03:22:28.494: E/ClaimRegister(2107):  at java.net.InetAddress.lookupHostByName(InetAddress.java:385)

05-23 03:22:28.494: E/ClaimRegister(2107):  at java.net.InetAddress.getLocalHost(InetAddress.java:365)

05-23 03:22:28.494: E/ClaimRegister(2107):  at javax.mail.internet.InternetAddress.getLocalHostName(InternetAddress.java:568)

05-23 03:22:28.494: E/ClaimRegister(2107):  at javax.mail.internet.InternetAddress._getLocalAddress(InternetAddress.java:547)

05-23 03:22:28.494: E/ClaimRegister(2107):  at javax.mail.internet.InternetAddress.getLocalAddress(InternetAddress.java:518)

05-23 03:22:28.494: E/ClaimRegister(2107):  at javax.mail.internet.UniqueValue.getUniqueMessageIDValue(UniqueValue.java:99)

05-23 03:22:28.494: E/ClaimRegister(2107):  at javax.mail.internet.MimeMessage.updateMessageID(MimeMessage.java:2163)

05-23 03:22:28.494: E/ClaimRegister(2107):  at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2192)

05-23 03:22:28.494: E/ClaimRegister(2107):  at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2151)

05-23 03:22:28.494: E/ClaimRegister(2107):  at javax.mail.Transport.send(Transport.java:123)

05-23 03:22:28.494: E/ClaimRegister(2107):  at com.clip.android.EmailSendActivity.send(EmailSendActivity.java:112)

05-23 03:22:28.494: E/ClaimRegister(2107):  at com.clip.android.ClaimRegister.submit(ClaimRegister.java:257)

05-23 03:22:28.494: E/ClaimRegister(2107):  at java.lang.reflect.Method.invokeNative(Native Method)

05-23 03:22:28.494: E/ClaimRegister(2107):  at java.lang.reflect.Method.invoke(Method.java:515)

05-23 03:22:28.494: E/ClaimRegister(2107):  at android.view.View$1.onClick(View.java:3818)

05-23 03:22:28.494: E/ClaimRegister(2107):  at android.view.View.performClick(View.java:4438)

05-23 03:22:28.494: E/ClaimRegister(2107):  at android.view.View$PerformClick.run(View.java:18422)

05-23 03:22:28.494: E/ClaimRegister(2107):  at android.os.Handler.handleCallback(Handler.java:733)

05-23 03:22:28.494: E/ClaimRegister(2107):  at android.os.Handler.dispatchMessage(Handler.java:95)

05-23 03:22:28.494: E/ClaimRegister(2107):  at android.os.Looper.loop(Looper.java:136)

05-23 03:22:28.494: E/ClaimRegister(2107):  at android.app.ActivityThread.main(ActivityThread.java:5001)

05-23 03:22:28.494: E/ClaimRegister(2107):  at java.lang.reflect.Method.invokeNative(Native Method)

05-23 03:22:28.494: E/ClaimRegister(2107):  at java.lang.reflect.Method.invoke(Method.java:515)

05-23 03:22:28.494: E/ClaimRegister(2107):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)

05-23 03:22:28.494: E/ClaimRegister(2107):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)

05-23 03:22:28.494: E/ClaimRegister(2107):  at dalvik.system.NativeStart.main(Native Method)

I cannot send email, it always enters the catch block..... I have javax.mail.jar,activation.jar,joda-time.jar
Please help me to resolve this issue... I need to send email through my app programatically Thank you in advance

Sharad Chauhan
  • 4,821
  • 2
  • 25
  • 50
Abhishek
  • 79
  • 2
  • 15

1 Answers1

1

Local address contains control or whitespace in string ``Sender Email''

Look at this line. Your email contains whitespace. Try to put validation on email. This is built in validation. You can search for other ways too.

public final static boolean isValidEmail(CharSequence target) {
    if (target == null) {
        return false;
    } else {
        return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
    }
}

and for your code try to do this :

m.setFrom("senderEmail");

This is how you send email in android :

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"recipient@example.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_TEXT   , "body of email");
try {
    startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(MyActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
Sharad Chauhan
  • 4,821
  • 2
  • 25
  • 50