Android - Gmail API'/system/framework/WfdCommon.jar':发送电子邮件时出现I / O错误

时间:2015-07-02 11:04:53

标签: android email gmail-api

我正在尝试使用Gmail API通过我的Google帐户发送电子邮件。

我在这里查看了主要指南:Api Android Quickstart

并在此处使用了方法:Sending Email example

在授权Api并在我的活动中使用它时,一切似乎都很好。我可以成功从我的帐户中获取信息。

不幸的是,我在发送电子邮件时遇到错误。我需要帮助解决这个问题。

以下是我正在处理的代码:

 public class SEND_EMAIL extends AsyncTask<MimeMessage, MimeMessage, MimeMessage>
 {

    @Override
    protected MimeMessage doInBackground(MimeMessage... mime_messages) {


        try {
            mService.users().messages().send(PREF_ACCOUNT_NAME, createMessageWithEmail(createEmail(PREF_ACCOUNT_NAME, PREF_ACCOUNT_NAME, "Subject", "Hello Gmail.")));
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        Log.i("AATS", "Trying to send email.");
        return null;
    }
 }

示例中使用的方法:

public static MimeMessage createEmail(String to, String from, String subject,
                                      String bodyText) throws MessagingException {
    Properties props = new Properties();
    Session session = Session.getDefaultInstance(props, null);

    MimeMessage email = new MimeMessage(session);
    InternetAddress tAddress = new InternetAddress(to);
    InternetAddress fAddress = new InternetAddress(from);

    email.setFrom(new InternetAddress(from));
    email.addRecipient(javax.mail.Message.RecipientType.TO,
            new InternetAddress(to));
    email.setSubject(subject);
    email.setText(bodyText);
    return email;
}

public static Message createMessageWithEmail(MimeMessage email)
        throws MessagingException, IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    email.writeTo(baos);
    String encodedEmail = Base64.encodeBase64URLSafeString(baos.toByteArray());
    Message message = new Message();
    message.setRaw(encodedEmail);
    return message;
}

库:

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.client.util.Base64;
import com.google.api.client.util.ExponentialBackOff;


import com.google.api.services.gmail.Gmail;
import com.google.api.services.gmail.GmailScopes;
import com.google.api.services.gmail.model.ListMessagesResponse;
import com.google.api.services.gmail.model.Message;


import android.accounts.AccountManager;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

函数调用:

private void refreshResults() {
        if (credential.getSelectedAccountName() == null) {
            chooseAccount();
        } else {
            if (isDeviceOnline()) {
                new ApiAsyncTask(this).execute();
            } else {
                mStatusText.setText("No network connection available.");
            }
        }
        SEND_ASNYCTASK_EMAIL();
}

public void SEND_ASNYCTASK_EMAIL ()
{
   Log.i("AATS", "Sending email.");
   new SEND_EMAIL().execute();
}

@Override
protected void onResume() {
    super.onResume();
    if (isGooglePlayServicesAvailable()) {
        refreshResults();
    } else {
        mStatusText.setText("Google Play Services required: " +
                "after installing, close and relaunch this app.");
    }
}

--- [编辑1] ---

根据ND003的建议应用 gmail.compose 范围后,我收到了新的警告。

更新了跟踪:

07-02 15:28:36.252  20997-21201/com.adak.aats.send_email W/﹕ Unable to open '/system/framework/WfdCommon.jar': No such file or directory
07-02 15:28:36.252  20997-21201/com.adak.aats.send_email W/art﹕ Failed to open zip archive '/system/framework/WfdCommon.jar': I/O Error

--- [编辑2] --- [工作]

我仍然收到相同的警告,但API按预期工作,并且可以使用我的Google帐户发送邮件。

Okey所以,我唯一要做的就是添加一行:

compile files('libs/mail.jar', 'libs/activation.jar', 'libs/additional.jar')

在Android Studio中的build.gradle(Module:app)文件中。这对我来说绝对不可理解,因为我也有:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
}

默认情况下在我的build.gradle文件中。所以它应该已经编译了app / libs文件夹中的所有.jar文件。使用javax库时我没有收到任何错误。对我来说似乎有点奇怪,但仍然张贴,所以也许有人可以澄清发生了什么。

感谢。

-----------------------注-------------------- -----

Gmail API使用 javax.mail javax.activation 库,在上引用发送电子邮件示例(无法共享)由于声誉低而链接。

这就是你需要在项目app / libs文件夹中导入这三个文件的原因: mail.jar activation.jar additional.jar < /强>

推荐回答: this

0 个答案:

没有答案