在Android中,电子邮件通知无效

时间:2016-05-23 05:42:29

标签: android

我的代码

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


    } 

错误

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)

我无法发送电子邮件,它总是进入catch块..... 我有javax.mail.jar,activation.jar,joda-time.jar
请帮我解决这个问题......我需要以编程方式通过我的应用程序发送电子邮件,谢谢你提前

1 个答案:

答案 0 :(得分:1)

本地地址包含字符串中的控件或空格``发件人电子邮件&#39;&#39;

看看这一行。您的电子邮件包含空格。尝试在电子邮件上进行验证。 这是内置验证。您也可以搜索其他方式。

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

并为您的代码尝试执行此操作:

m.setFrom("senderEmail");

这是你在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();
}