2017-08-31 7 views
0

この質問には多くの回答がありますが、まだ私の問題が解決していないので、この質問をしています。Androidでメールを送信するjava.lang.NoClassDefFoundError:javax.activation.DataHandler

この質問の他のバージョンで説明したすべての修正を試みましたが、何も役に立たなかった。

マイコード:

package com.blogspot.ram914.flames; 

import android.accounts.Account; 
import android.accounts.AccountManager; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import javax.mail.Authenticator; 
import java.util.Properties; 

import javax.mail.Message; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class SendMail extends AppCompatActivity { 

private final String MAIL = "my e-mail"; 
private final String PASSWORD = "my password"; 

EditText etSenderMaildId; 
EditText etSenderName; 
EditText etRecipientMailId; 
EditText etRecipientName; 
EditText etMessage; 
Button btnSend; 

ProgressDialog pdialog = null; 
Context context = null; 

String RelationName; 

static Session session = null; 
// First go and Turn on less secure app access to sender mail 
static String receiverMailId = "", subject = "", textMessage = ""; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_send_mail); 

    context = this; 

    String senderName; 
    String senderMailId; 
    String receiverName; 

    Bundle b = getIntent().getExtras(); 
    RelationName = b.getString("relation_name"); 
    senderName = b.getString("sender_name"); 
    receiverName = b.getString("recipient_name"); 

    etSenderMaildId = (EditText) findViewById(R.id.sender_mail_id); 
    etSenderName = (EditText) findViewById(R.id.sender_name); 
    etRecipientMailId = (EditText) findViewById(R.id.recipient_mail_id); 
    etRecipientName = (EditText) findViewById(R.id.recipiend_name); 
    etMessage = (EditText) findViewById(R.id.meassage); 
    btnSend = (Button) findViewById(R.id.send); 

    senderMailId = getSenderMailId(); 
    etSenderMaildId.setText(senderMailId); 
    etSenderMaildId.setEnabled(false); 

    etSenderName.setText(senderName); 
    etSenderName.setEnabled(false); 

    etRecipientName.setText(receiverName); 
    etRecipientName.setEnabled(false); 

} 

@Override 
protected void onPause() { 
    super.onPause(); 
    if(pdialog != null) 
     pdialog.dismiss(); 
    pdialog = null; 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if(pdialog != null) 
     pdialog.dismiss(); 
    pdialog = null; 
} 

public void sendTo(View view) { 
    Properties props = new Properties(); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.socketFactory.port", "465"); 
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.port", "465"); 

    receiverMailId = etRecipientMailId.getText().toString(); 
    subject = "From Flames App"; 
    textMessage = getMessageContent(); 

    session = Session.getDefaultInstance(props, new Authenticator() { 
     @Override 
     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication(SendMail.this.MAIL, SendMail.this.PASSWORD); 
     } 
    }); 

    System.out.println("Ram Prasad"); 
    try{ 
     pdialog = ProgressDialog.show(context, "", "Sending Mail...", true); 

    } catch(Exception e) { 
     Log.d("\n\n\nStatus :","Failed\n\n\n"); 
    } 

    System.out.println("Ram Prasad"); 
    RetreiveFeedTask task = new RetreiveFeedTask(); 
    task.execute(""); 
} 

public void enableEdit(View view) { 
    view.setEnabled(true); 
} 

public String getSenderMailId() { 
    AccountManager manager = AccountManager.get(this); 
    Account[] accounts = manager.getAccounts(); 

    for (Account account : accounts) { 
     if(account.type.equals("com.google")) { 
      return account.name; 
     } 
     System.out.println("\n\n"+account.name+"\n\n"); 
    } 
    return "your mail id"; 
} 

public String getMessageContent() { 
    return "Hi "+etRecipientName.getText().toString()+",\n"+ 
      "Do you know "+etSenderName.getText().toString()+"?\n" 
      +etSenderName.getText().toString()+" played flames with you and got the below relation.\n" 
      +RelationName+"\n\n and \n" 
      +etSenderName.getText().toString()+" sent a message for you :\n" 
      +etMessage.getText().toString()+" \n\n\n" 
      +"Sender : "+etSenderMaildId.getText().toString(); 
} 

private class RetreiveFeedTask extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 

     try{ 
compile   Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress("[email protected]")); 
      message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(SendMail.receiverMailId)); 
      message.setSubject(SendMail.subject); 
      message.setText(SendMail.textMessage); 
      Transport.send(message); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     if(pdialog != null) 
      pdialog.dismiss(); 
     pdialog = null; 
     Toast.makeText(getApplicationContext(), "Message sent", Toast.LENGTH_LONG).show(); 
    } 
} 

} 

と例外は以下のとおりです。

Caused by: java.lang.NoClassDefFoundError:javax.activation.DataHandler 
at javax.mail.internet.MimeMessage.setContent(MimeMessage.java:1566) 
at javax.mail.internet.MimeBodyPart.setText(MimeBodyPart.java:1219) 
at javax.mail.internet.MimeMessage.setText(MimeMessage.java:1607) 
at javax.mail.internet.MimeMessage.setText(MimeMessage.java:1590) 
at com.blogspot.ram914.flames.SendMail$RetreiveFeedTask.doInBackground(SendMail.java:168) 
at com.blogspot.ram914.flames.SendMail$RetreiveFeedTask.doInBackground(SendMail.java:158) 
at android.os.AsyncTask$2.call(AsyncTask.java:264) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
at java.lang.Thread.run(Thread.java:864) 

そして私はmail.jarのやライブラリなど activation.jarのの両方を追加しました。 see here

私のアプリをクラッシュさせずにこのコードを実行するために苦労しています。 誰も私を助けることができますか?

EDIT:

Caused by: java.lang.NoClassDefFoundError: java.nio.charset.StandardCharsets 
at com.sun.mail.smtp.SMTPTransport$LoginAuthenticator.doAuth(SMTPTransport.java:982) 
at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:927) 
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:861) 
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:766) 
at javax.mail.Service.connect(Service.java:388) 
at javax.mail.Service.connect(Service.java:246) 
at javax.mail.Service.connect(Service.java:195) 
at javax.mail.Transport.send0(Transport.java:254) 
at javax.mail.Transport.send(Transport.java:124) 
at com.blogspot.ram914.flames.SendMail$RetreiveFeedTask.doInBackground(SendMail.java:169) 
at com.blogspot.ram914.flames.SendMail$RetreiveFeedTask.doInBackground(SendMail.java:158) 
at android.os.AsyncTask$2.call(AsyncTask.java:264) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
at java.util.concurrent.FutureTask.run(FutureTask.java:137)  
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)  
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)  
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)  
at java.lang.Thread.run(Thread.java:864)  
+0

私の問題は今異なっています。 – ram914

+0

そのエラーだけで質問を開きます。 [StandardCharsets](https://developer.android.com/reference/java/nio/charset/StandardCharsets.html)がAPIレベル19で追加されたため、古いバージョンのAndroidを使用しているようです。JavaMail 1.5にダウングレードしてみてください.6。 – jmehrens

答えて

1

あなたが古いアプローチを使用していることが表示されます。もしそうなら、あなたは瓶がありません。

javamail

は、ここではAndroidのためjavamailを参照してください: https://code.google.com/archive/p/javamail-android/downloads

注:上記のプロジェクトは古く、おそらくもうサポートされていません。

あなたがAndroidのサポートを持つ新しいJavaMailの1.6.0を使用したい場合は、あなたがここにjavax.mail.jarをつかむことができます。 https://github.com/javaee/javamail/releases

を次に、単にあなたのGradleファイルに依存関係を追加します。

dependencies { 
    compile 'com.sun.mail:android-mail:1.6.0' 
    compile 'com.sun.mail:android-activation:1.6.0' 
} 
+0

これは実際に動作します。しかし、私のアプリは、メッセージが送信されたと言うが、私は10分後にもメッセージを受信して​​いない。 – ram914

+0

明らかに、依存関係には「1.5.5」ではなく「1.6.0」を使用します。 –

+0

それでも動作しない場合は、[JavaMail debug output](https://javaee.github.io/javamail/FAQ#debug)を投稿してください。 –

関連する問題