이메일 의도 보내기


588
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "emailaddress@emailaddress.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "I'm email body.");

startActivity(Intent.createChooser(intent, "Send Email"));

위의 코드는 블루투스, Google 문서, Yahoo Mail, Gmail, Orkut, Skype 등의 앱을 보여주는 대화 상자를 엽니 다.

실제로 이러한 목록 옵션을 필터링하고 싶습니다. Gmail, Yahoo Mail과 같은 이메일 관련 앱만 표시하고 싶습니다. 어떻게합니까?

'Android Market'응용 프로그램에서 이러한 예를 보았습니다.

  1. Android 마켓 앱 열기
  2. 개발자가 이메일 주소를 지정한 응용 프로그램을 엽니 다. (당신이 그런 응용 프로그램을 찾을 수없는 경우 내 응용 프로그램을 엽니 다 :-market : // details? id = com.becomputer06.vehicle.diary.free 또는 '차량 일기'로 검색)
  3. 아래로 스크롤하여 '개발자'
  4. '이메일 보내기'를 클릭하십시오

이 대화 상자에는 Gmail, Yahoo Mail 등의 전자 메일 응용 프로그램 만 표시됩니다. Bluetooth, Orkut 등은 표시되지 않습니다. 어떤 대화 상자를 생성합니까?


4
죄송합니다. Intent.ACTION_SEND에서는 불가능합니다. 어쩌면 그것은 gmail-App에 직접 의도를 가지고 작동하지만 이것이 가능한지 모르겠습니다.
Thommy

19
이메일 의도에 대해 여기에서 배우는 사람이있는 경우 EXTRA_MAIL은 (는) 여기에 표시된 것 String[]뿐만 아니라에 해당해야 String합니다.
bigstones



좋은 조언은 여기를 참조하십시오. medium.com/@cketti/…
Felix D.

답변:


218

아래와 같이 intent.setType을 변경하면

intent.setType("text/plain");

android.content.Intent.ACTION_SENDTO페이스 북이나 다른 앱이없는 전자 메일 클라이언트 목록 만 가져 오려면 사용하십시오 . 이메일 클라이언트 만 전의:

new Intent(Intent.ACTION_SENDTO);

이메일 앱으로 직접 이동하는 것은 좋지 않습니다. 사용자가 자신이 좋아하는 이메일 앱을 선택하도록합니다. 그를 구속하지 마십시오.

ACTION_SENDTO를 사용하면 putExtra가 인 텐트에 제목과 텍스트를 추가 할 수 없습니다. Uri를 사용하여 제목과 본문을 추가하십시오.

편집 : 우리는 MIME 유형 message/rfc822대신 사용할 수 있습니다 "text/plain". 그러나 이는 "이메일 클라이언트 만 제공"을 나타내는 것이 아니라 "메시지 / rfc822 데이터를 지원하는 모든 것을 제공합니다"를 나타냅니다. 전자 메일 클라이언트가 아닌 일부 응용 프로그램을 쉽게 포함 할 수 있습니다.

message/rfc822 MIME 유형 지원 .mhtml, .mht, .mime


7
원하는 출력을 생성하는 코드를 제공해 주시겠습니까?
dira

9
@ becomputer06 이것을 참조하십시오 : stackoverflow.com/questions/8284706/send-email-via-gmail
Padma Kumar

76
no apps installed to perform this intent내가 사용할 때 의도 선택기가 말합니다 ACTION_SENDTO. Android 4.1.2를 사용하고 있으며 이메일 앱이 설치되어 있습니다.
ffleandro

4
'올바른'방법은 Magnus의 답변입니다. 수락 된 답변을 변경하려면 원본 포스터를 사용하는 것이 좋습니다.
jhabbott

8
기본적으로 MIME 유형을 사용하여 전송 작업을 수행하는 것은 좋지 않습니다. 기본적으로 Android에서 파일 유형 전송을 지원하는 앱 목록을 제공하도록 지시하기 때문 message/rfc822입니다. 그건 하지 전자 메일을 보내와 같은. mailto:전자 메일 클라이언트가 실제로 이해하기 때문에 프로토콜을 대신 사용하십시오 .
Paul Lammertsma

872

수락 된 답변은 4.1.2에서 작동하지 않습니다. 이것은 모든 플랫폼에서 작동해야합니다.

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","abc@gmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Body");
startActivity(Intent.createChooser(emailIntent, "Send email..."));

도움이 되었기를 바랍니다.

업데이트 : marcwjj 에 따르면 4.3에서는 이메일 주소가 작동하도록 문자열 대신 문자열 배열을 전달해야합니다. 한 줄을 더 추가해야 할 수도 있습니다.

intent.putExtra(Intent.EXTRA_EMAIL, addresses); // String[] addresses

참조 링크


7
당신이 옳고 4.2도 아닙니다. 이것이 실제로 유일한 정답입니다. 감사합니다!
mDroidd

12
이것은 완벽 해요. 아래의 누군가는 "mailto"부분을 지정하는 것이 전자 우편 클라이언트에 사용 가능한 옵션을 좁히는 것이라고 언급했습니다. Uri.fromParts ( "mailto", "", null)를 사용하면 커서를 수신자 필드에 놓을 수 있습니다.
Shaggy

24
이 emailIntent.putExtra (Intent.EXTRA_TEXT, "이메일 본문입니다.");
thanhbinh84

15
특정 수령인이없는 경우에도 다음과 같이 작동합니다.Uri.fromParts("mailto", "", null)
Phil

25
내 안드로이드 4.3에서는 더 이상 작동하지 않습니다. : 완벽하게 작동 의도로 이메일 전송에 공식 안드로이드 문서를 확인하시기 바랍니다 developer.android.com/guide/components/...
marcwjj을

244

세 가지 주요 접근 방식이 있습니다.

String email = /* Your email address here */
String subject = /* Your subject here */
String body = /* Your body here */
String chooserTitle = /* Your chooser title here */

1. 관습 Uri:

Uri uri = Uri.parse("mailto:" + email)
    .buildUpon()
    .appendQueryParameter("subject", subject)
    .appendQueryParameter("body", body)
    .build();

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(Intent.createChooser(emailIntent, chooserTitle));

2. Intent엑스트라 사용하기 :

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
//emailIntent.putExtra(Intent.EXTRA_HTML_TEXT, body); //If you are using HTML in your body text

startActivity(Intent.createChooser(emailIntent, "Chooser Title"));

3. 지원 라이브러리 ShareCompat:

Activity activity = /* Your activity here */

ShareCompat.IntentBuilder.from(activity)
    .setType("message/rfc822")
    .addEmailTo(email)
    .setSubject(subject)
    .setText(body)
    //.setHtmlText(body) //If you are using HTML in your body text
    .setChooserTitle(chooserTitle)
    .startChooser();

1
이것은 나를 위해 훨씬 잘 작동했습니다. 다른 옵션은 가능한 처리기로 몇 가지 직선적 인 것들 (예 : Skype)을 나타 냈습니다.
Chris Rae

1
%버퍼에 심볼 이 있으면 결과 이메일의 일부 문자가 올바르게 인코딩되지 않습니다. Uri.encode@minipif가 제안한 댄스 를 수행해야합니다 .
Giulio Piancastelli

12
이것은 다른 사람을 시도하는 당신의 시간을 낭비하지 말고, 여기에 최고의 답변입니다, 여기에 두 번째는 내가 무엇을 선택하고 그것은 단지 순수한 이메일 응용 프로그램이 아닌 G 드라이브가 아닌 블루투스 등 .. 감사합니다 @ becomputer06 보여, 완벽하게 작동
휴고

1
"&"문자에주의하십시오. 이메일 본문에 & 문자가 있으면 & 다음에 본문이 잘립니다. 예를 들어, "I am & sample body"와 같은 본문을 보내면 "I am"이됩니다
Emre Koç

4
ShareCompat은 이메일 클라이언트뿐만 아니라 거의 모든 앱을 제공합니다!
rpattabi

111

이것은 Android 공식 문서에서 인용되었으며 Android 4.4에서 테스트했으며 완벽하게 작동합니다. https://developer.android.com/guide/components/intents-common.html#Email 에서 더 많은 예제를보십시오

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);
    }
}

6
동의했다! 이와 같은 답변이 목록에 너무 놀랐습니다. Android 문서에서 비교적 최근에 변경된 것 같습니다.
Mikey

큰! 신뢰할 수있는 것은 안드로이드 앱 개발자의 '성경'을 언급했습니다.
dev_android

1
mailto 이후의 결장은 나를 위해 속임수를 썼다! "mailto :"대신 "mailto"를 사용하고있었습니다
Nigel Crasto

1
작업 5.1.1. 다른 옵션은 작동하지 않습니다.
Juanin

1
EXTRA_EMAIL나를 위해 일하지 그래서 내가 사용Uri.parse("mailto: " + myEmail)
Pratik Butani

89

늦은 답변이지만 다른 사람들을 도울 수있는 해결책을 찾았습니다.

자바 버전

Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:abc@xyz.com"));
startActivity(Intent.createChooser(emailIntent, "Send feedback"));


코 틀린 버전

val emailIntent = Intent(Intent.ACTION_SENDTO).apply { 
    data = Uri.parse("mailto:abc@xyz.com")
}
startActivity(Intent.createChooser(emailIntent, "Send feedback"))


이것은 내 출력이었습니다 (Gmail +받은 편지함 만 제 안됨).

내 결과

Android 개발자 사이트 에서이 솔루션을 얻었습니다 .


2
나에게는 사이에 공백이 없다는 것을 중요 mailto:와 이메일mailto:abc@xyz.com
AlvaroSantisteban

정답입니다.
nibbana

36

이것은 나를 위해 작동합니다 :

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_EMAIL  , new String[] { "me@somewhere.com" });
intent.putExtra(Intent.EXTRA_SUBJECT, "My subject");

startActivity(Intent.createChooser(intent, "Email via..."));

즉, ACTION_SENDTO행동보다는 행동을 사용하십시오 ACTION_SEND. 몇 가지 Android 4.4 장치에서 시도했지만 전자 메일 응용 프로그램 (이메일, Gmail, Yahoo Mail 등) 만 표시하도록 선택기 팝업을 제한하고 전자 메일 주소와 제목을 전자 메일에 올바르게 삽입합니다.


35

시험:

intent.setType("message/rfc822");

그는 옳다, 나는 그것을 시도하고 [드라이브, 이메일, Gmail, Skype]를 제공한다. 이것은 "올바른 대답"이어야한다
gurbieta

18
기본적으로 MIME 유형을 사용하여 전송 작업을 수행하는 것은 좋지 않습니다. 기본적으로 Android에서 파일 유형 전송을 지원하는 앱 목록을 제공하도록 지시하기 때문 message/rfc822입니다. 그건 하지 전자 메일을 보내와 같은. mailto:전자 메일 클라이언트가 실제로 이해하기 때문에 프로토콜을 대신 사용하십시오 .
Paul Lammertsma

34

이것은 안드로이드 개발자 공식 문서 에 따라 이메일 의도를 보내는 적절한 방법입니다

다음 코드 줄을 앱에 추가하십시오.

Intent intent = new Intent(Intent.ACTION_SEND);//common intent 
intent.setData(Uri.parse("mailto:")); // only email apps should handle this

선택 사항 : 다음과 같이 본문과 주제를 추가하십시오.

intent.putExtra(Intent.EXTRA_SUBJECT, "Your Subject Here");
intent.putExtra(Intent.EXTRA_TEXT, "E-mail body" );

이미이 줄을 추가했지만 신규 사용자에게는 좋습니다.

intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"youremailaddress@aviparshan.com"});

받는 사람의 주소가됩니다. 즉, 사용자가 귀하 (개발자)에게 전자 메일을 보내 게됩니다.


@ barnacle.m 감사합니다! 또한 더 간단한 방법 중 하나입니다. 문제는 내 대답이 충분한
공감을

1
비슷한 대답이 많기 때문에 문제에 대한 공식 Android 문서를 지적합니다.
barnacle.m

1
이메일 주소를 보내지 못했습니다. 이 intent.data = Uri.parse ( "mailto : somemail@xyz.com")처럼 수정했습니다.
Hitesh Bisht

18

마지막으로 최선의 방법을 생각해보십시오.

String to = "test@gmail.com";
String subject= "Hi I am subject";
String body="Hi I am test body";
String mailTo = "mailto:" + to +
        "?&subject=" + Uri.encode(subject) +
        "&body=" + Uri.encode(body);
Intent emailIntent = new Intent(Intent.ACTION_VIEW);
emailIntent.setData(Uri.parse(mailTo));
startActivity(emailIntent);

넌 정말 대단해
Ashik

문제없는 친구
Ajay Shrestha

2
완벽하게 작동합니다.
Solanki Kamlesh

자세히 설명하는이 기사를 확인하십시오. medium.com/@cketti/…
Bruno Bieri

잘 작동합니다.
Jacks

15

이메일 클라이언트 만 원하는 경우 android.content.Intent.EXTRA_EMAIL어레이와 함께 사용해야합니다 . 다음은 예입니다.

final Intent result = new Intent(android.content.Intent.ACTION_SEND);
result.setType("plain/text");
result.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { recipient });
result.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
result.putExtra(android.content.Intent.EXTRA_TEXT, body);

3
아니, 여전히 많은 다른 앱을 불러옵니다.ACTION_SENDTO
Dori

10

다음 코드는 잘 작동합니다.

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"abc@gmailcom"});
Intent mailer = Intent.createChooser(intent, null);
startActivity(mailer);

8

에서 안드로이드 개발자 문서 :

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);
    }
}

8

수정 : 새 버전의 Gmail에서 더 이상 작동하지 않습니다.

이것은 내가 어떤 캐릭터와도 작동하도록 내가 찾은 유일한 방법이었습니다.

doreamon의 답변은 새로운 버전의 Gmail에서 모든 문자와 작동하므로 올바른 방법입니다.

이전 답변 :


여기 내 꺼야 제목과 메시지 본문을 지원하고 모든 UTF-8 문자를 지원하는 모든 Android 버전에서 작동하는 것 같습니다.

public static void email(Context context, String to, String subject, String body) {
    StringBuilder builder = new StringBuilder("mailto:" + Uri.encode(to));
    if (subject != null) {
        builder.append("?subject=" + Uri.encode(Uri.encode(subject)));
        if (body != null) {
            builder.append("&body=" + Uri.encode(Uri.encode(body)));
        }
    }
    String uri = builder.toString();
    Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri));
    context.startActivity(intent);
}

1
+1 Uri.encode이 올바른 길입니다. 그러나 왜 주제와 몸을 위해 두 번 부르는가?
Giulio Piancastelli

따라서 인코딩을 직접 수행하는 것은 나쁜 생각입니다. 필요한 추가 기능과 함께 적절한 의도를 더 잘 사용하십시오. 예를 들어 stackoverflow.com/a/15022222
Giulio Piancastelli

다른 솔루션은 일부 이메일 앱에서만 제대로 작동하기 때문에 이것이 가장 좋은 대답입니다. 이것은 내가 테스트 한 모든 이메일 앱에서 작동합니다.
Egis

7

이 솔루션들 중 어느 것도 나를 위해 일하지 않았습니다. 다음은 Lollipop에서 작동하는 최소 솔루션입니다. 내 기기에서는 결과 선택기 목록에 Gmail 및 기본 이메일 앱만 나타납니다.

Intent emailIntent = new Intent(Intent.ACTION_SENDTO,
                                Uri.parse("mailto:" + Uri.encode(address)));

emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
startActivity(Intent.createChooser(emailIntent, "Send email via..."));

7

모든 안드로이드 버전에서 작동 :

String[] TO = {"email@server.com"};
    Uri uri = Uri.parse("mailto:email@server.com")
            .buildUpon()
            .appendQueryParameter("subject", "subject")
            .appendQueryParameter("body", "body")
            .build();
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri);
    emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
    startActivity(Intent.createChooser(emailIntent, "Send mail..."));

당신의 대답이 도움이되었습니다. 감사합니다
Adnan Khan

5

다음 코드는 나를 위해 일했습니다!!

import android.support.v4.app.ShareCompat;
    .
    .
    .
    .
final Intent intent = ShareCompat.IntentBuilder
                        .from(activity)
                        .setType("application/txt")
                        .setSubject(subject)
                        .setText("Hii")
                        .setChooserTitle("Select One")
                        .createChooserIntent()
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
                        .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

activity.startActivity(intent);

5

이것은 나를 위해 완벽하게 작동합니다.

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("mailto:" + address));
    startActivity(Intent.createChooser(intent, "E-mail"));

5

인 텐트가 다른 문자 메시지 나 소셜 앱이 아닌 이메일 앱에서만 처리되도록하려면 해당 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);
    }
}

https://developer.android.com/guide/components/intents-common.html#Email 에서 이것을 발견했습니다.


5

누군가 가보고 있다면 Kotlin 에서

val emailArrray:Array<String> = arrayOf("travelagentsupport@kkk.com")
val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, emailArrray)
intent.putExtra(Intent.EXTRA_SUBJECT, "Inquire about travel agent")
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

4

이 답변의 대부분은 첨부 파일을 보내지 않을 때 간단한 경우에만 작동합니다. . 제 경우에는 때때로 첨부 파일 (ACTION_SEND) 또는 두 개의 첨부 파일 (ACTION_SEND_MULTIPLE)을 보내야합니다.

그래서이 스레드에서 가장 좋은 접근 방식을 취해 결합했습니다. 지원 라이브러리를 사용하고 ShareCompat.IntentBuilder있지만 ACTION_SENDTO와 "mailto :"uri가 일치하는 앱만 표시합니다. 이 방법으로 첨부 파일을 지원하는 전자 메일 앱 목록 만 얻습니다.

fun Activity.sendEmail(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null) {
    val originalIntent = createEmailShareIntent(recipients, subject, file, text, secondFile)
    val emailFilterIntent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"))
    val originalIntentResults = packageManager.queryIntentActivities(originalIntent, 0)
    val emailFilterIntentResults = packageManager.queryIntentActivities(emailFilterIntent, 0)
    val targetedIntents = originalIntentResults
            .filter { originalResult -> emailFilterIntentResults.any { originalResult.activityInfo.packageName == it.activityInfo.packageName } }
            .map {
                createEmailShareIntent(recipients, subject, file, text, secondFile).apply { `package` = it.activityInfo.packageName }
            }
            .toMutableList()
    val finalIntent = Intent.createChooser(targetedIntents.removeAt(0), R.string.choose_email_app.toText())
    finalIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toTypedArray())
    startActivity(finalIntent)
}

private fun Activity.createEmailShareIntent(recipients: List<String>, subject: String, file: Uri, text: String? = null, secondFile: Uri? = null): Intent {
    val builder = ShareCompat.IntentBuilder.from(this)
            .setType("message/rfc822")
            .setEmailTo(recipients.toTypedArray())
            .setStream(file)
            .setSubject(subject)
    if (secondFile != null) {
        builder.addStream(secondFile)
    }
    if (text != null) {
        builder.setText(text)
    }
    return builder.intent
}

유용 할 것 같습니다. Java로 가져올 가능성이 있습니까?
Kyle Humfeld

1
Kotlin은 Java와 매우 유사하므로 붙여 넣기를 복사하고 몇 가지만 변경할 수 있습니다.
David Vávra

3

사용 intent.setType("message/rfc822");은 작동하지만 반드시 이메일을 처리하지 않는 추가 앱 (예 : GDrive)을 보여줍니다. Intent.ACTION_SENDTOwith를 사용 하는 setType("text/plain")것이 가장 좋지만 setData(Uri.parse("mailto:"))최상의 결과를 얻으려면 추가 해야합니다 (이메일 앱만 해당). 전체 코드는 다음과 같습니다.

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType("text/plain");
intent.setData(Uri.parse("mailto:IT@RMAsoft.NET"));
intent.putExtra(Intent.EXTRA_SUBJECT, "Email from My app");
intent.putExtra(Intent.EXTRA_TEXT, "Place your email message here ...");
startActivity(Intent.createChooser(intent, "Send Email"));

완벽한
영혼

2

Gmail을 타겟팅하려면 다음을 수행하십시오. 의도는 "ACTION_SEND"가 아니라 "ACTION_SENDTO"이며 Gmail에는 추가 의도 필드가 필요하지 않습니다.

String uriText =
    "mailto:youremail@gmail.com" + 
    "?subject=" + Uri.encode("your subject line here") + 
    "&body=" + Uri.encode("message body here");

Uri uri = Uri.parse(uriText);

Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
sendIntent.setData(uri);
if (sendIntent.resolveActivity(getPackageManager()) != null) {
   startActivity(Intent.createChooser(sendIntent, "Send message")); 
}

2

Kotlin에서 Adil의 답변을 업데이트하고 있습니다.

val intent = Intent(Intent.ACTION_SENDTO)
intent.data = Uri.parse("mailto:") // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, Array(1) { "test@email.com" })
intent.putExtra(Intent.EXTRA_SUBJECT, "subject")
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent)
} else {
    showSnackBar(getString(R.string.no_apps_found_to_send_mail), this)
}

Gmail이 앱에 있어도 실패합니다.
AndroidDev

@AndroidDev 문제가 발생한 기기는 무엇입니까?
Kishan Solanki

2

아래 코드를 사용하십시오 :

                try {

                    String uriText =
                            "mailto:emailid" +
                                    "?subject=" + Uri.encode("Feedback for app") +
                                    "&body=" + Uri.encode(deviceInfo);
                    Uri uri = Uri.parse(uriText);
                    Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
                    emailIntent.setData(uri);
                    startActivity(Intent.createChooser(emailIntent, "Send email using..."));
                } catch (android.content.ActivityNotFoundException ex) {
                    Toast.makeText(ContactUsActivity.this, "No email clients installed.", Toast.LENGTH_SHORT).show();
                }

1

아마도 당신은 이것을 시도해야합니다 : intent.setType("plain/text");

여기 에서 찾았습니다 . 내 앱에서 사용했는데 전자 메일 및 Gmail 옵션 만 표시됩니다.


2
"일반 / 텍스트"는 블루투스, Skype 등을 보여줍니다. Android 마켓 앱에서 원하는 출력을 확인하십시오. 질문에 단계가 나열되어 있습니다.
dira

1
MIME 유형을 사용하여 전송 작업을 수행하는 것은 좋지 않습니다. 기본적으로 Android에 파일 유형의 파일 전송을 지원 plain/text하고 유효한 MIME 유형이 아닌 앱 목록을 제공하도록 지시하기 때문 입니다. 그건 하지 전자 메일을 보내와 같은. mailto:전자 메일 클라이언트가 실제로 이해하기 때문에 프로토콜을 대신 사용하십시오 .
Paul Lammertsma

1

전화 이메일 클라이언트에서 이메일을 작성하십시오.

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("plain/text");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "some@email.address" });
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "mail body");
startActivity(Intent.createChooser(intent, ""));

1

이것을 사용하십시오 :

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

빌드 gradle 사용 :

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

1

이것이 내가 사용하는 것이며 나에게 효과적입니다.

//variables
String subject = "Whatever subject you want";
String body = "Whatever text you want to put in the body";
String intentType = "text/html";
String mailToParse = "mailto:";

//start Intent
Intent variableName = new Intent(Intent.ACTION_SENDTO);
variableName.setType(intentType);
variableName.setData(Uri.parse(mailToParse));
variableName.putExtra(Intent.EXTRA_SUBJECT, subject);
variableName.putExtra(Intent.EXTRA_TEXT, body);

startActivity(variableName);

또한 사용자가 선호하는 이메일 앱을 선택할 수 있습니다. 이것이 허용하지 않는 유일한 방법은 수신자의 이메일 주소를 설정하는 것입니다.


"두 번째 줄에 가 없습니다 .
Tim

1

이 코드는 내 장치에서 작동합니다

Intent mIntent = new Intent(Intent.ACTION_SENDTO);
mIntent.setData(Uri.parse("mailto:"));
mIntent.putExtra(Intent.EXTRA_EMAIL  , new String[] {"mahendrarajdhami@gmail.com"});
mIntent.putExtra(Intent.EXTRA_SUBJECT, "");
startActivity(Intent.createChooser(mIntent, "Send Email Using..."));

기기에서 Gmail 및 이메일 만 열립니다
Mahen

1
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", email, null));
if (emailIntent.resolveActivity(context.getPackageManager()) != null) {
    context.startActivity(Intent.createChooser(emailIntent, "Send Email..."));
} else {
    Toast.makeText(context, "No apps can perform this action.", Toast.LENGTH_SHORT).show();
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.