首页 > 解决方案 > 以编程方式从电子邮件客户端发送电子邮件后未收到回调

问题描述

我正在尝试使用安装在我的 android 设备中的 gmail 客户端发送电子邮件。但不幸的是,在 android 中以编程方式使用电子邮件客户端发送电子邮件后,我无法获得成功或失败回调。

请检查以下代码:

1)

public void getPermissions() {
        int hasPermission = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.GET_ACCOUNTS);
        if (hasPermission == PackageManager.PERMISSION_GRANTED) {
            Account[] accounts = AccountManager.get(getActivity()).getAccounts();
            if(accounts.length==0){
                appController.showCustomToastWithMessage(context.getResources().getString(R.string.no_email_accounts), Constants.SNACKBAR_CANCEL_BUTTON_NAME, Constants.SNACKBAR_SUCCES_DISMISS_TIME);
            }else {
                getEmail(accounts);
            }
        } else {
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.GET_ACCOUNTS}, 1);
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
        }
    }

2)

public void getEmail(Account[] Accounts) {
        Pattern emailPattern = Patterns.EMAIL_ADDRESS;
        for (Account account : Accounts) {
            if (emailPattern.matcher(account.name).matches()) {
                String possibleEmail = account.name;
                if (!emailaccList.contains(possibleEmail)) {
                    emailaccList.add(possibleEmail);
                }
            }
        }
        if (emailaccList.size() != 0) {
            String emailId [] = {emailaccList.get(0)};
            shareToGMail(emailId, getString(R.string.contact_us), "");
        }
    }

3)

public void shareToGMail(String[] email, String subject, String content) {
        Intent emailIntent = new Intent(Intent.ACTION_SEND);
        emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{storeUserDataDatabase.getCcEmailType(context)});
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
        emailIntent.setType("text/plain");
        emailIntent.putExtra(Intent.EXTRA_TEXT, content);
        final PackageManager pm = getActivity().getPackageManager();
        final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
        ResolveInfo best = null;
        for(final ResolveInfo info : matches)
            if (info.activityInfo.packageName.endsWith(".gm") || info.activityInfo.name.toLowerCase().contains("gmail"))
                best = info;
        if (best != null)
            emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
        try {
            startActivityForResult(emailIntent, 111);
        }catch (android.content.ActivityNotFoundException ex){
            appController.showCustomToastWithMessage("There is no email clients installed.", Constants.SNACKBAR_CANCEL_BUTTON_NAME, Constants.SNACKBAR_SUCCES_DISMISS_TIME);
        }
    }

标签: androidemail

解决方案


在 Gmail 上使用 Intent 发送的电子邮件没有回调。为此,您必须使用 Gmail API。


推荐阅读