আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশন থেকে ইমেলগুলি কীভাবে প্রেরণ করবেন?


উত্তর:


978

সর্বোত্তম (এবং সবচেয়ে সহজ) উপায়টি হ'ল Intent:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"recipient@example.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_TEXT   , "body of email");
try {
    startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
    Toast.makeText(MyActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}

অন্যথায় আপনাকে নিজের ক্লায়েন্ট লিখতে হবে।


6
উপরের কোডে কোনও প্রেরকের ইমেল আইডি নেই henতখন বার্তাটি কীভাবে প্রেরণ করা যায়?
কিরান কেজে

38
কিরান: আপনার কী তা জানতে ইন্টেন্টস কীভাবে কাজ করে তা আপনাকে খতিয়ে দেখার দরকার। এটি মূলত প্রাপক, বিষয় এবং ইতিমধ্যে পূরণ করা বডি সহ একটি ইমেল অ্যাপ্লিকেশন খুলবে। এটি প্রেরণটি ইমেল অ্যাপের উপর নির্ভর করে।
জেরেমি লোগান

8
ক্রিয়াকলাপ শুরু করে ইমেলটি "TO" ক্ষেত্রে প্রদর্শিত হচ্ছে না। কেউ জানে?
হামজা ওয়াকাস

11
এই মন্তব্যের দুর্দান্ত অবদান হ'ল বার্তা / আরএফসি 822
অলিভিরা

22
এগুলি নিশ্চিত করতে নিশ্চিত করুন যে চয়নকারী কেবল ইমেল অ্যাপ্লিকেশন প্রদর্শন করে:Intent i = new Intent(Intent.ACTION_SENDTO); i.setType("message/rfc822"); i.setData(Uri.parse("mailto:"));
এড্রিস

194

ব্যবহার .setType("message/rfc822")বা চয়নকারী আপনাকে প্রেরণের উদ্দেশ্যে সমর্থনকারী (অনেক) অ্যাপ্লিকেশনগুলির সমস্ত দেখায়।


5
ভাল লাগছে, এতে আরও বেশি ভোটের টিবিএইচ হওয়া উচিত। আপনি এমুলেটরটিতে পরীক্ষা করার বিষয়টি লক্ষ্য করবেন না, কিন্তু আপনি যখন সত্যিকারের ডিভাইসে "পাঠ্য / প্লেইন" প্রেরণ করতে যান এটি আপনাকে 15+ অ্যাপের একটি তালিকা দেবে !! সুতরাং "বার্তা / rfc822" অবশ্যই প্রস্তাবিত (ইমেল মান)।
ব্লুন্ডেল

7
@ ব্লুন্ডেল হাই, তবে পরিবর্তনের পরে আমি কোনও পার্থক্য দেখতে পাই নাmessage/rfc822
আঁকুন draw

2
আপনি তালিকা থেকে ব্লুটুথ অপসারণ করতে পারেন? এটি এই ধরণের সাথে প্রদর্শিত হয়। +1 যদিও, ঝরঝরে কৌশল!
ingh.am

4
আমাদের বেকন সংরক্ষণ করা। ক্লায়েন্টকে ব্যাখ্যা করে ভাবতে পারবেন না যে ব্যবহারকারী তাদের ইমেল না করে সমর্থন অনুরোধগুলি টুইট করতে পারে।
কেভিন গ্যালিগান

1
+1111111 এটি অন্তহীন +1 এর প্রাপ্য তাই অন্যরা এটি দেখতে পারে। আমি এই অংশটি মিস করেছি এবং কিছুক্ষণের জন্য এই সমস্যাটি মোকাবিলা করতে হয়েছিল!
চ্যালেঞ্জএগ্রহিত

89

আমি এটি অনেক আগে থেকেই ব্যবহার করে আসছি এবং এটি বেশ ভাল বলে মনে হচ্ছে, কোনও নন-ইমেল অ্যাপ্লিকেশন প্রদর্শিত হচ্ছে না। ইমেল প্রেরণ প্রেরণ করার অন্য একটি উপায়:

Intent intent = new Intent(Intent.ACTION_SENDTO); // it's not ACTION_SEND
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject of email");
intent.putExtra(Intent.EXTRA_TEXT, "Body of email");
intent.setData(Uri.parse("mailto:default@recipient.com")); // or just "mailto:" for blank
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this will make such that when user returns to your app, your app is displayed, instead of the email app.
startActivity(intent);

1
অসমর্থিত কর্ম: এই ক্রিয়াটি বর্তমানে সমর্থিত নয়
এরডোমিস্টার

4
lgor জি> Plz setType থেকে "(সাধারণ / পাঠ্য") setType পরিবর্তন ( "টেক্সট / প্লেইন")
sachit

2
.setType ("বার্তা / আরএফসি 822") পাঠ্য / প্লেইন নয়
হাঙ্গরি অ্যান্ড্রয়েডার

1
এই কোড ইমেইল ইন্টেন্ট খুলবে? আমি @ ইউকুকে ব্যবহারকারীর উদ্দেশ্য না দেখিয়ে কীভাবে ইমেল প্রেরণ করতে পারি আমি ইমেলটিতে পাসওয়ার্ডটি প্রেরণ করতে চাই
এরম


54

সংযুক্ত বাইনারি ত্রুটি লগ ফাইলের সাথে ইমেল প্রেরণের জন্য আমি বর্তমানে গৃহীত উত্তরের লাইনের সাথে কিছু ব্যবহার করছিলাম। GMail এবং K-9 এটিকে কেবল সূক্ষ্ম প্রেরণ করে এবং এটি আমার মেল সার্ভারেও সূক্ষ্মভাবে আসে। একমাত্র সমস্যাটি ছিল আমার পছন্দের থান্ডারবার্ডের মেল ক্লায়েন্ট যা সংযুক্ত লগ ফাইলটি খোলার / সংরক্ষণ করতে সমস্যা হয়েছিল। আসলে এটি অভিযোগ না করে কেবল ফাইলটি সংরক্ষণ করেনি।

আমি এই মেইলের উত্স কোডগুলির একটিতে একবার দেখেছি এবং লক্ষ্য করেছি যে লগ ফাইল সংযুক্তিতে মাইম টাইপ রয়েছে (বোধগম্য) message/rfc822। অবশ্যই যে সংযুক্তি কোনও সংযুক্ত ইমেল নয়। তবে থান্ডারবার্ড এই ক্ষুদ্র ত্রুটিটি গ্রেপ্তার সাথে মোকাবেলা করতে পারে না। সুতরাং যে এক ধরণের বোমার মত ছিল।

কিছুটা গবেষণা এবং পরীক্ষার পরে আমি নিম্নলিখিত সমাধান নিয়ে এসেছি:

public Intent createEmailOnlyChooserIntent(Intent source,
    CharSequence chooserTitle) {
    Stack<Intent> intents = new Stack<Intent>();
    Intent i = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto",
            "info@domain.com", null));
    List<ResolveInfo> activities = getPackageManager()
            .queryIntentActivities(i, 0);

    for(ResolveInfo ri : activities) {
        Intent target = new Intent(source);
        target.setPackage(ri.activityInfo.packageName);
        intents.add(target);
    }

    if(!intents.isEmpty()) {
        Intent chooserIntent = Intent.createChooser(intents.remove(0),
                chooserTitle);
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,
                intents.toArray(new Parcelable[intents.size()]));

        return chooserIntent;
    } else {
        return Intent.createChooser(source, chooserTitle);
    }
}

এটি নিম্নলিখিত হিসাবে ব্যবহার করা যেতে পারে:

Intent i = new Intent(Intent.ACTION_SEND);
i.setType("*/*");
i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(crashLogFile));
i.putExtra(Intent.EXTRA_EMAIL, new String[] {
    ANDROID_SUPPORT_EMAIL
});
i.putExtra(Intent.EXTRA_SUBJECT, "Crash report");
i.putExtra(Intent.EXTRA_TEXT, "Some crash report details");

startActivity(createEmailOnlyChooserIntent(i, "Send via email"));

আপনি দেখতে পাচ্ছেন, createEmailOnlyChooserInttent পদ্ধতিটি সহজেই সঠিক অভিপ্রায় এবং সঠিক মাইম টাইপ দিয়ে খাওয়ানো যেতে পারে।

এরপরে এটি উপলব্ধ ক্রিয়াকলাপগুলির তালিকার মধ্য দিয়ে যায় mailtoযা কোনও ACTION_SENDTO প্রোটোকল অভিপ্রায় (যা কেবল ইমেল অ্যাপ্লিকেশনগুলি হয়) প্রতিক্রিয়া জানায় এবং ক্রিয়াকলাপের সেই তালিকার উপর ভিত্তি করে একটি চয়নকারী এবং সঠিক মাইম প্রকারের সাথে মূল ACTION_SEND অভিপ্রায় তৈরি করে।

আরেকটি সুবিধা হ'ল স্কাইপ আর তালিকাভুক্ত নয় (যা rfc822 মাইম টাইপের প্রতিক্রিয়া দেখাবে)।


1
আমি আপনাকে কোড স্নিপেট সন্নিবেশ করিয়েছি এবং এটি দুর্দান্ত কাজ করে। গুগল ড্রাইভ, স্কাইপ ইত্যাদির মতো তালিকাভুক্ত অ্যাপ্লিকেশনগুলি থাকার আগে কিন্তু অন্য কোনও অ্যাপ্লিকেশন না বলে অ্যাপ্লিকেশনটির বাইরে কোনও মেল পাঠানোর উপায় নেই? আমি কেবল ইমেল ক্লায়েন্ট সম্পর্কে নিবন্ধটি পড়েছি যে উপরে @ রিন পোস্ট করেছে তবে কেবল একটি সাধারণ ইমেল প্রেরণের জন্য খুব জটিল বলে মনে হচ্ছে
অ্যালেক্স সিও

দুর্দান্ত উত্তর। আমার সাথে স্কাইপ এবং গুগল ড্রাইভও এসেছিল এবং ACTION_SENDএটি এটিকে সুন্দরভাবে সাজিয়ে তোলে।
darrenp

1
উপরের সর্বাধিক জনপ্রিয় সমাধানটি স্কাইপ এবং ভকন্টাক্টেকেও প্রদান করে। এই সমাধান আরও ভাল।
ডেনিস কুতলুবায়েভ

ক্র্যাশলগফাইল কী? কোথা থেকে এটি শুরু হয়েছিল? পিজ সেপসিফাই
নুফাল

@ নফল, এটি আমার নিজের কোড বেস থেকে কিছুটা বাকি। এটি একটি Fileউদাহরণ যা আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির ব্যাকগ্রাউন্ডে তৈরি হওয়া কোনও ক্র্যাশ লগ ফাইলের দিকে ইঙ্গিত করে যদি কোনও অপ্রকাশিত ব্যতিক্রম ঘটে। এই উদাহরণটিতে কেবল একটি ইমেল সংযুক্তি কীভাবে যুক্ত করা যায় তা চিত্রিত করা উচিত। আপনি বাহ্যিক স্টোরেজ (উদাহরণস্বরূপ একটি চিত্র) থেকে অন্য কোনও ফাইল সংযুক্ত করতে পারেন। crashLogFileকাজের উদাহরণ পেতে আপনি সেই লাইনটিও সরাতে পারেন ।
টিগুচি

37

আপনার অভিপ্রায়টি সমাধান করার জন্য আপনাকে ইমেইল এপিএস জাস্ট করতে আপনার ক্রিয়া হিসাবে ACTION_SENDTO এবং ডেটা হিসাবে মেলটো নির্দিষ্ট করতে হবে।

private void sendEmail(){

    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
    emailIntent.setData(Uri.parse("mailto:" + "recipient@example.com")); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "My email's subject");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "My email's body");

    try {
        startActivity(Intent.createChooser(emailIntent, "Send email using..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(Activity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
    }

}

23

অ্যান্ড্রয়েড ডকুমেন্টেশন ব্যাখ্যা করার সাথে সাথে আমি এই সমস্যাটিকে সহজ কোডের লাইন দিয়ে সমাধান করেছি।

( https://developer.android.com/guide/components/intents-common.html# ইমেল )

সর্বাধিক গুরুত্বপূর্ণ পতাকাটি: এটি হ'ল ACTION_SENDTO, নাওACTION_SEND

অন্যান্য গুরুত্বপূর্ণ লাইন হয়

intent.setData(Uri.parse("mailto:")); ***// only email apps should handle this***

যাইহোক, যদি আপনি একটি খালি পাঠাতে Extra, if()শেষে কাজ করবে না এবং অ্যাপ্লিকেশান ইমেইল ক্লায়েন্ট চালু করা হবে না।

অ্যান্ড্রয়েড ডকুমেন্টেশন অনুযায়ী। আপনি যদি নিশ্চিত করতে চান যে কেবল আপনার ইমেলটি কোনও ইমেল অ্যাপ্লিকেশন (এবং অন্য পাঠ্য বার্তাপ্রেরণ বা সামাজিক অ্যাপ্লিকেশন নয়) দ্বারা পরিচালিত হয়, তবে ACTION_SENDTOক্রিয়াটি ব্যবহার করুন এবং " mailto:" ডেটা স্কিম অন্তর্ভুক্ত করুন । উদাহরণ স্বরূপ:

public void composeEmail(String[] addresses, String subject) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:")); // only email apps should handle this
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

21

ব্যবহারের কৌশল .setType("message/rfc822")বা ACTION_SENDমনে হয় আরো অ্যাপ্লিকেশনগুলির যেমন ক্লায়েন্ট, ইমেইল নেই মেলে Android বীম এবং ব্লুটুথ

ব্যবহার ACTION_SENDTOএবং mailto:কোনো URI পুরোপুরি কাজ মনে হয়, এবং ডেভেলপার ডকুমেন্টেশনে বাঞ্ছনীয় । তবে, আপনি যদি অফিশিয়াল এমুলেটরগুলিতে এটি করেন এবং কোনও ইমেল অ্যাকাউন্ট সেট আপ করা হয়নি (বা কোনও মেল ক্লায়েন্ট নেই) তবে আপনি নিম্নলিখিত ত্রুটিটি পান:

অসমর্থিত ক্রিয়া

এই ক্রিয়াটি বর্তমানে সমর্থিত নয়।

নিচে দেখানো হয়েছে:

অসমর্থিত ক্রিয়া: সেই ক্রিয়াটি বর্তমানে সমর্থিত নয়।

দেখা যাচ্ছে যে অনুকরণকারীরা একটি ক্রিয়াকলাপের উদ্দেশ্যে অভিপ্রায়টি সমাধান করে com.android.fallback.Fallbackযা উপরের বার্তাটি প্রদর্শন করে। স্পষ্টতই এটি নকশা দ্বারা।

আপনি যদি নিজের অ্যাপ্লিকেশনটিকে এড়াতে চান তবে এটি সরকারী এমুলেটরগুলিতেও সঠিকভাবে কাজ করে, আপনি ইমেলটি প্রেরণের চেষ্টা করার আগে এটি পরীক্ষা করতে পারেন:

private void sendEmail() {
    Intent intent = new Intent(Intent.ACTION_SENDTO)
        .setData(new Uri.Builder().scheme("mailto").build())
        .putExtra(Intent.EXTRA_EMAIL, new String[]{ "John Smith <johnsmith@yourdomain.com>" })
        .putExtra(Intent.EXTRA_SUBJECT, "Email subject")
        .putExtra(Intent.EXTRA_TEXT, "Email body")
    ;

    ComponentName emailApp = intent.resolveActivity(getPackageManager());
    ComponentName unsupportedAction = ComponentName.unflattenFromString("com.android.fallback/.Fallback");
    if (emailApp != null && !emailApp.equals(unsupportedAction))
        try {
            // Needed to customise the chooser dialog title since it might default to "Share with"
            // Note that the chooser will still be skipped if only one app is matched
            Intent chooser = Intent.createChooser(intent, "Send email with");
            startActivity(chooser);
            return;
        }
        catch (ActivityNotFoundException ignored) {
        }

    Toast
        .makeText(this, "Couldn't find an email app and account", Toast.LENGTH_LONG)
        .show();
}

বিকাশকারী ডকুমেন্টেশনে আরও তথ্য সন্ধান করুন


13

ইমেল প্রেরণ ইন্টেন্টের সাহায্যে করা যেতে পারে যার জন্য কোনও কনফিগারেশন প্রয়োজন হবে না। তবে তারপরে এটি ব্যবহারকারীর ইন্টারঅ্যাকশন প্রয়োজন এবং লেআউটটি কিছুটা সীমাবদ্ধ থাকবে।

ব্যবহারকারীর মিথস্ক্রিয়া ছাড়াই আরও জটিল ইমেল তৈরি এবং প্রেরণ আপনার নিজস্ব ক্লায়েন্টকে তৈরি করে ails প্রথম জিনিসটি হ'ল ইমেলের জন্য সান জাভা এপিআই অনুপলব্ধ। ইমেল তৈরি করতে আমার অ্যাপাচি মাইম 4 জ লাইব্রেরিটি কাজে লাগিয়ে সাফল্য পেয়েছি। সমস্ত নীলভেকের ডক্সের উপর ভিত্তি করে ।


6

এখানে নমুনা কার্যকারী কোড যা অ্যান্ড্রয়েড ডিভাইসে মেল অ্যাপ্লিকেশনটি খুলবে এবং কমপোজিং মেলটিতে ঠিকানা এবং বিষয় সহ স্বয়ংক্রিয়ভাবে পূর্ণ ।

protected void sendEmail() {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:feedback@gmail.com"));
    intent.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

ধন্যবাদ। @ অবি দর্শনের সমাধানের সাথে তুলনা করে আপনি একটি ইমেল setData()সেট করেছেন এবং আভি সেট করে putExtra()। উভয় বৈকল্পিক একটি কাজ। তবে যদি অপসারণ setDataএবং শুধুমাত্র ব্যবহার করে intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"hi@example.com"});তবে একটি হবে ActivityNotFoundException
কুলমাইন্ড

5

আমি আমার অ্যাপ্লিকেশনগুলিতে নীচের কোডটি ব্যবহার করি। এটি জিমেইলের মতো ঠিক ইমেল ক্লায়েন্ট অ্যাপ্লিকেশনগুলি দেখায়।

    Intent contactIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", getString(R.string.email_to), null));
    contactIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.email_subject));
    startActivity(Intent.createChooser(contactIntent, getString(R.string.email_chooser)));

5

এটি আপনাকে কেবল ইমেল ক্লায়েন্টকে দেখায় (পাশাপাশি কোনও অজানা কারণে পেপাল)

 public void composeEmail() {

    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:"));
    intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"hi@example.com"});
    intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    intent.putExtra(Intent.EXTRA_TEXT, "Body");
    try {
        startActivity(Intent.createChooser(intent, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(MainActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }
}

1
চমৎকার সমাধান! এটি অনেকগুলি অনুপযুক্ত অ্যাপ্লিকেশন এড়িয়ে চলে (বেশিরভাগ ক্ষেত্রে "শেয়ার" হিসাবে ব্যবহৃত হয়)। intent.type = "message/rfc822"; intent.type = "text/html";এখানে যুক্ত করবেন না কারণ এটি ব্যতিক্রম হতে পারে।
কুলমাইন্ড

3

এইভাবে আমি এটি করেছি। সুন্দর এবং সহজ।

String emailUrl = "mailto:email@example.com?subject=Subject Text&body=Body Text";
        Intent request = new Intent(Intent.ACTION_VIEW);
        request.setData(Uri.parse(emailUrl));
        startActivity(request);

3

ইমেল প্রেরণের জন্য এই ফাংশনটি প্রথম প্রত্যক্ষ অভিপ্রায় জিমেইল, যদি জিমেইল পাওয়া না যায় তবে অভিপ্রায়কারী চয়নকারীকে প্রচার করুন। আমি অনেক বাণিজ্যিক অ্যাপ্লিকেশনে এই ফাংশনটি ব্যবহার করেছি এবং এটি ঠিকঠাক কাজ করছে। আশা করি এটা তোমাকে সাহায্য করবে:

public static void sentEmail(Context mContext, String[] addresses, String subject, String body) {

    try {
        Intent sendIntentGmail = new Intent(Intent.ACTION_VIEW);
        sendIntentGmail.setType("plain/text");
        sendIntentGmail.setData(Uri.parse(TextUtils.join(",", addresses)));
        sendIntentGmail.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
        sendIntentGmail.putExtra(Intent.EXTRA_EMAIL, addresses);
        if (subject != null) sendIntentGmail.putExtra(Intent.EXTRA_SUBJECT, subject);
        if (body != null) sendIntentGmail.putExtra(Intent.EXTRA_TEXT, body);
        mContext.startActivity(sendIntentGmail);
    } catch (Exception e) {
        //When Gmail App is not installed or disable
        Intent sendIntentIfGmailFail = new Intent(Intent.ACTION_SEND);
        sendIntentIfGmailFail.setType("*/*");
        sendIntentIfGmailFail.putExtra(Intent.EXTRA_EMAIL, addresses);
        if (subject != null) sendIntentIfGmailFail.putExtra(Intent.EXTRA_SUBJECT, subject);
        if (body != null) sendIntentIfGmailFail.putExtra(Intent.EXTRA_TEXT, body);
        if (sendIntentIfGmailFail.resolveActivity(mContext.getPackageManager()) != null) {
            mContext.startActivity(sendIntentIfGmailFail);
        }
    }
}

1
অনেক ধন্যবাদ. আমার জীবন বাঁচান
androCoder-BD

2

সহজ এটি চেষ্টা করুন

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    buttonSend = (Button) findViewById(R.id.buttonSend);
    textTo = (EditText) findViewById(R.id.editTextTo);
    textSubject = (EditText) findViewById(R.id.editTextSubject);
    textMessage = (EditText) findViewById(R.id.editTextMessage);

    buttonSend.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            String to = textTo.getText().toString();
            String subject = textSubject.getText().toString();
            String message = textMessage.getText().toString();

            Intent email = new Intent(Intent.ACTION_SEND);
            email.putExtra(Intent.EXTRA_EMAIL, new String[] { to });
            // email.putExtra(Intent.EXTRA_CC, new String[]{ to});
            // email.putExtra(Intent.EXTRA_BCC, new String[]{to});
            email.putExtra(Intent.EXTRA_SUBJECT, subject);
            email.putExtra(Intent.EXTRA_TEXT, message);

            // need this to prompts email client only
            email.setType("message/rfc822");

            startActivity(Intent.createChooser(email, "Choose an Email client :"));

        }
    });
}

3
আপনি এটি পোস্ট করার সময় ইতিমধ্যে বিদ্যমান উত্তরগুলির চেয়ে এটি কীভাবে ভাল? দেখে মনে হচ্ছে এটি কোনও ক্রিয়াকলাপে আবৃত স্বীকৃত উত্তরের অনুলিপিটির মতো।
স্যাম

2

অন্যান্য সমাধান হতে পারে

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
emailIntent.setType("plain/text");
emailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"someone@gmail.com"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Yo");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Hi");
startActivity(emailIntent);

ধরে নিই যে বেশিরভাগ অ্যান্ড্রয়েড ডিভাইসে ইতিমধ্যে জিমেইল অ্যাপ ইনস্টলড রয়েছে।


@ পেড্রোভেরেলা আমরা সর্বদা ক্রিয়াকলাপ পরীক্ষা করতে পারি যে ব্যতিক্রম পাওয়া যায় নি।
সিলেন্টসুডো

1
হ্যাঁ আমরা পারি. তবে আপনার সমাধানটি সঠিক নয়। অ্যান্ড্রয়েড ডকুমেন্টেশন স্পষ্টভাবে জানিয়েছে যে অভিপ্রায় চয়নকারীতে কেবল মেল অ্যাপ্লিকেশনগুলি দেখানোর জন্য আপনাকে কী করতে হবে। আপনি লিখেছেন "ধরে নিচ্ছেন বেশিরভাগ অ্যান্ড্রয়েড ডিভাইসে ইতিমধ্যে জিমেইল অ্যাপ ইনস্টলড রয়েছে"; এটি যদি কোনও মূলযুক্ত ডিভাইস হয় এবং ব্যবহারকারী জিমেইল ক্লায়েন্টকে মুছে ফেলে? মনে করুন আপনি নিজের ইমেইল অ্যাপ তৈরি করছেন ?, যদি কোনও ব্যবহারকারী কোনও ইমেল প্রেরণ করতে চলেছে তবে আপনার অ্যাপ্লিকেশন সেই তালিকায় থাকবে না। জিমেইল প্যাকেজের নাম পরিবর্তন করলে কী হবে? আপনি কি আপনার অ্যাপ্লিকেশন আপডেট করতে যাচ্ছেন?
পেড্রো ভেরেলা

2

ইমেল প্রেরণের জন্য এটি ব্যবহার করুন ...

boolean success = EmailIntentBuilder.from(activity)
    .to("support@example.org")
    .cc("developer@example.org")
    .subject("Error report")
    .body(buildErrorReport())
    .start();

বিল্ড গ্রেড ব্যবহার করুন:

compile 'de.cketti.mailto:email-intent-builder:1.0.0'

2

আমি এই কোডটি সরাসরি ডিফল্ট মেল অ্যাপ্লিকেশন রচনা বিভাগ চালু করে মেল প্রেরণের জন্য ব্যবহার করেছি।

    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setType("message/rfc822"); 
    i.setData(Uri.parse("mailto:"));
    i.putExtra(Intent.EXTRA_EMAIL  , new String[]{"test@gmail.com"});
    i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
    i.putExtra(Intent.EXTRA_TEXT   , "body of email");
    try {
        startActivity(Intent.createChooser(i, "Send mail..."));
    } catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
    }

1

এই পদ্ধতিটি আমার পক্ষে কাজ করে। এটি Gmail অ্যাপ্লিকেশনটি (ইনস্টল থাকলে) খুলবে এবং মেলটো সেট করবে।

public void openGmail(Activity activity) {
    Intent emailIntent = new Intent(Intent.ACTION_VIEW);
    emailIntent.setType("text/plain");
    emailIntent.setType("message/rfc822");
    emailIntent.setData(Uri.parse("mailto:"+activity.getString(R.string.mail_to)));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, activity.getString(R.string.app_name) + " - info ");
    final PackageManager pm = activity.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);
    activity.startActivity(emailIntent);
}

1
/**
 * Will start the chosen Email app
 *
 * @param context    current component context.
 * @param emails     Emails you would like to send to.
 * @param subject    The subject that will be used in the Email app.
 * @param forceGmail True - if you want to open Gmail app, False otherwise. If the Gmail
 *                   app is not installed on this device a chooser will be shown.
 */
public static void sendEmail(Context context, String[] emails, String subject, boolean forceGmail) {

    Intent i = new Intent(Intent.ACTION_SENDTO);
    i.setData(Uri.parse("mailto:"));
    i.putExtra(Intent.EXTRA_EMAIL, emails);
    i.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (forceGmail && isPackageInstalled(context, "com.google.android.gm")) {
        i.setPackage("com.google.android.gm");
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    } else {
        try {
            context.startActivity(Intent.createChooser(i, "Send mail..."));
        } catch (ActivityNotFoundException e) {
            Toast.makeText(context, "No email app is installed on your device...", Toast.LENGTH_SHORT).show();
        }
    }
}

/**
 * Check if the given app is installed on this devuice.
 *
 * @param context     current component context.
 * @param packageName The package name you would like to check.
 * @return True if this package exist, otherwise False.
 */
public static boolean isPackageInstalled(@NonNull Context context, @NonNull String packageName) {
    PackageManager pm = context.getPackageManager();
    if (pm != null) {
        try {
            pm.getPackageInfo(packageName, 0);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
    return false;
}

1
 Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","ebgsoldier@gmail.com", null));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Forgot Password");
    emailIntent.putExtra(Intent.EXTRA_TEXT, "Write your Pubg user name or Phone Number");
    startActivity(Intent.createChooser(emailIntent, "Send email..."));**strong text**

1

এটা চেষ্টা কর:

String mailto = "mailto:bob@example.org" +
    "?cc=" + "alice@example.com" +
    "&subject=" + Uri.encode(subject) +
    "&body=" + Uri.encode(bodyText);

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse(mailto));

try {
    startActivity(emailIntent);
} catch (ActivityNotFoundException e) {
    //TODO: Handle case where no email app is available
}

উপরের কোডটি ব্যবহারকারীদের পছন্দের ইমেল ক্লায়েন্টকে প্রেরিত ইমেলটি প্রেরণের জন্য প্রস্তুত খুলবে।

সূত্র

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.