0

我是 android 的初学者。我正在创建一个应用程序,该应用程序具有自动向另一个人发送电子邮件而无需用户干预的功能。所以我将mail.jar、additionnal.jar、activation.jar添加到我的项目中。我正在开发一个应用程序android 2.2或更高版本。我将jar文件添加为1.右键单击项目>导入>浏览并将上述jar添加到名为lib的文件夹中。我的项目没有lib/libs文件夹,所以我创建了一个文件夹lib。2.右键project>properties>java build path>libraries>add jars。我在project中添加了3个jars,现在出现在project中。所以之前写代码的引用错误被清除了。但是当我运行我的应用程序时,每次调用 Mail.java 时应用程序都会崩溃,我在我的应用程序中执行发送邮件。这是我的完整代码

电子邮件活动.java

     class email extends AsyncTask<String, Void, Boolean>
{
    private Exception exception;
    int f=0;
    protected Boolean doInBackground(String...uname) 
    {
        try {
                f=0;
                Mail m = new Mail(fmailadd, password); 

              String[] toArr = {tmailadd, "anishubais@yahoo.co.in"}; 
              //String to="anishubais@gmail.com";
              m.setTo(toArr); 
              m.setFrom(fmailadd);            
              m.setSubject(type);
              m.setBody("This is an email sent by anish from android assistant."); 

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

                if(m.send())
                { 
                  //Toast.makeText(MainActivity.this, "Email was sent successfully.", Toast.LENGTH_LONG).show(); 
                  f=1;
                  Log.e("MailApp", "sucess");
                } else 
                { 
                  //Toast.makeText(MainActivity.this, "Email was not sent.", Toast.LENGTH_LONG).show(); 
                  f=0;
                  Log.e("MailApp", "failed");
                } 
              } 
              catch(Exception e) 
              { 
                //Toast.makeText(MailApp.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show(); 
                Log.e("MailApp", "Could not send email", e); 
                f=0;
              } 
              if(f==1)
                  return true;
              else
                  return false;
        } catch (Exception e) {
            this.exception = e;
            return false;
        }
    }

}

对此 asynctask 的调用在 Emailactivity 中,如下所示

    new email().execute("anish");

Mail.java:-在这里发送我的邮件

     package androassist.mypack;

     import java.util.Date; 
     import java.util.Properties; 
     import javax.activation.CommandMap; 
     import javax.activation.DataHandler; 
     import javax.activation.DataSource; 
     import javax.activation.FileDataSource; 
     import javax.activation.MailcapCommandMap; 
     import javax.mail.BodyPart; 
     import javax.mail.Multipart; 
     import javax.mail.PasswordAuthentication; 
     import javax.mail.Session; 
     import javax.mail.Transport; 
     import javax.mail.internet.InternetAddress; 
      import javax.mail.internet.MimeBodyPart; 
      import javax.mail.internet.MimeMessage; 
      import javax.mail.internet.MimeMultipart; 

      public class Mail 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 Mail() { 
    _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 Mail(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); 

      // 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 String getTo() 
  { 
        return _body; 
  } 

  public void setTo(String[] _to) 
  { 
        this._to = _to; 
  } 
  public String getFrom() 
  { 
        return _from; 
  } 

  public void setFrom(String _from) 
  { 
        this._from = _from; 
  } 
  public String getSubject() 
  { 
        return _subject; 
  } 

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

} 

但是当对 mail.java 的调用执行它时,我的应用程序崩溃了,并被强制关闭

日志错误

    10-12 09:32:46.601: E/email(1779): anishubais13@gmail.com
     10-12 09:32:46.601: E/email(1779): anishubais@gmail.com
     10-12 09:32:46.601: W/dalvikvm(1779): Unable to resolve superclass of Landroassist/mypack/Mail; (186)
      10-12 09:32:46.601: W/dalvikvm(1779): Link of class 'Landroassist/mypack/Mail;' failed
    10-12 09:32:46.601: E/dalvikvm(1779): Could not find class  'androassist.mypack.Mail', referenced from method androassist.mypack.Email_acitivity$email.doInBackground
    10-12 09:32:46.601: W/dalvikvm(1779): VFY: unable to resolve new-instance 16 (Landroassist/mypack/Mail;) in Landroassist/mypack/Email_acitivity$email;
    10-12 09:32:46.601: D/dalvikvm(1779): VFY: replacing opcode 0x22 at 0x0005
    10-12 09:32:46.601: W/dalvikvm(1779): Unable to resolve superclass of Landroassist/mypack/Mail; (186)
    10-12 09:32:46.601: W/dalvikvm(1779): Link of class 'Landroassist/mypack/Mail;' failed
    10-12 09:32:46.601: D/dalvikvm(1779): DexOpt: unable to opt direct call 0x0039 at 0x0f in Landroassist/mypack/Email_acitivity$email;.doInBackground
    10-12 09:32:46.611: W/dalvikvm(1779): threadid=10: thread exiting with uncaught exception (group=0xb4dd3908)
    10-12 09:32:46.611: E/AndroidRuntime(1779): FATAL EXCEPTION: AsyncTask #1
    10-12 09:32:46.611: E/AndroidRuntime(1779): java.lang.RuntimeException: An error occured while executing doInBackground()
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.lang.Thread.run(Thread.java:856)
     10-12 09:32:46.611: E/AndroidRuntime(1779): Caused by: java.lang.NoClassDefFoundError: androassist.mypack.Mail
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at androassist.mypack.Email_acitivity$email.doInBackground(Email_acitivity.java:267)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at androassist.mypack.Email_acitivity$email.doInBackground(Email_acitivity.java:1)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
     10-12 09:32:46.611: E/AndroidRuntime(1779):    ... 3 more

我认为这是与将 jars 添加到我的项目有关的问题。我尝试了与 android 4.2 相同的代码。它没有任何错误。我按照上面提到的相同程序将 jars 添加到项目中。但是我已经有了 libs 文件夹我的项目。当我创建项目时它就在那里。所以我将罐子添加到库中。但我不知道在这里做什么。我尝试了很多解决方案,请帮助我。请不要忽略我的查询?

4

1 回答 1

0

确保您将 jars 添加到的文件夹 islibs和 not lib。您的 jar 文件应该只存在于那里,请仔细检查您是否已将它们从lib文件夹(实际上是删除lib文件夹)和构建路径中删除。

于 2013-10-12T10:09:11.057 回答