0

次のコードを使用して、アプリでメールを送信しています

デフォルト/組み込みアプリを使用せずにJavaMailAPIを使用してAndroidでメールを送信する

これは以前は機能していましたが、NetworkOnMainThreadExceoptionで停止しました。解決策はAsyncTaskを使用することですが、AsyncTaskを使用するために現在必要なクラスを変換する方法がわかりません。以前は使用していません。

以下は、失敗しているクラスの送信部分です。

public class EmailProvider extends Authenticator { 
    private static String emailUsername  = ""; 
    private static String emailPassword = "";
    private static String emailFrom  = ""; 
    private static String emailDefaultSMTPport = 
    private static String emailDefaultSocketFactoryPort = 
    private static String emailHost = ""; 

    private boolean emailAuth; 
    private boolean emailDebuggable; 

    private Multipart emailMultipart; 

    public EmailProvider(Context context) { 
        //this.context = context;

        emailDebuggable = false; // debug mode on or off - default off 
        emailAuth = true; // smtp authentication - default on 

        emailMultipart = new MimeMultipart(); 

    } 

    public boolean send(String emailAddress, String pEmailSubject, String pEmailBody) throws Exception { 

        Properties props = setProperties(); 

        Session session = Session.getInstance(props, this); 

        MimeMessage msg = new MimeMessage(session); 

        msg.setFrom(new InternetAddress(emailFrom)); 

        msg.setRecipients(MimeMessage.RecipientType.TO, emailAddress); 

        msg.setSubject(pEmailSubject); 
        msg.setSentDate(new Date()); 

        // setup message body 
        BodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setText(pEmailBody);

        emailMultipart.addBodyPart(messageBodyPart); 

        // Put parts in message 
        msg.setContent(emailMultipart); 

        // send email 
        Transport.send(msg); 

        return true; 
    } 

}

御時間ありがとうございます

4

1 に答える 1

0

メソッドを呼び出しているところからこれasyncTaskを宣言します。activitysend()

private class SendEmailTask extends AsyncTask<Object, Object, Object> {        
        @Override
        protected Object doInBackground(Object... arg0) {
            yourEmailProviderObj.send(emailAddress, pEmailSubject, pEmailBody);
            return "executed";
        }
}

そして、send()メソッド呼び出しの代わりにこの呼び出しを行います。

new SendEmailTask().execute();

ありがとう。

于 2013-01-21T22:43:15.527 に答える