简体   繁体   English

在Android中,电子邮件通知无法正常工作

[英]In Android,Email Notification is not working

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 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 我无法发送电子邮件,它总是进入catch块.....我有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 请帮助我解决此问题...我需要以编程方式通过我的应用发送电子邮件预先感谢您

Local address contains control or whitespace in string ``Sender Email'' 本地地址在字符串``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 : 这是您在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();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM