안드로이드 이메일 첨부파일 보내기 - andeuloideu imeil cheombupail bonaegi


글을 올린 블로거를 생각해서 광고 한번만 클릭해주시면 감사하겠습니다

Intent intent = new Intent(Intent.ACTION_SEND);

intent.setType("plain/text");

String[] address = {""}; //주소를 넣어두면 미리 주소가 들어가 있다.

intent.putExtra(Intent.EXTRA_EMAIL, address);

intent.putExtra(Intent.EXTRA_SUBJECT, "제목");

intent.putExtra(Intent.EXTRA_TEXT, "보낼 내용");

intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:/mnt/sdcard/test.jpg")); //파일 첨부

startActivity(intent);

공유하기

게시글 관리

구독하기PurpleCowD

'안드로이드' 카테고리의 다른 글

[android] dp 값을 px, px 값을 dp 값으로 변환  (0)2013.03.25[android] 힙 메모리 늘리기 (3.0)이하 사용 가능  (0)2013.03.20[android] 사진, 동영상 파일 갤러리에 저장  (0)2013.02.28[android] webView 띄우기  (0)2013.02.28[android] view,button등 동적 생성  (0)2013.02.28

728x90

안드로이드에선 Intent를 사용해 다른 앱으로 데이터를 전달하며 앱을 실행한다. 구글에서 필수적인 Intent의 구조는 미리 정의를 해뒀는데, 메일 보내는 것도 그 중 하나이다. 

 

developer.android.com/reference/android/content/Intent

 

Intent  |  Android 개발자  |  Android Developers

 

developer.android.com

 

첨부파일 없이 메일을 보낼 땐 아래와 같이 보내면 된다. 메일 앱이 실행된다. 

val uri = Uri.parse("mailto:[email protected]")
val intent = Intent(Intent.ACTION_SENDTO, uri)
intent.putExtra(Intent.EXTRA_SUBJECT, "안녕하세요 메일 제목입니다")
intent.putExtra(Intent.EXTRA_TEXT, "안녕하세요, 메일 내용 입니다.")

 

파일을 첨부할 땐 위의 intent에 EXTRA_STREAM를 추가하면 될 것 같았는데 안된다.

 

파일을 첨부하려면 

Intent의 action을 ACTION_SEND로 변경하고 

메일 주소는 extra_email로 넘기는데 array여야 한다

파일 접근에 권한이 필요한 경우 읽기 권한을 부여하고 

extra_stream으로 첨부 파일의 URI를 넘긴다

 

val intent = Intent(Intent.ACTION_SEND)
intent.putExtra(Intent.EXTRA_SUBJECT, "메일 제목")
intent.putExtra(Intent.EXTRA_EMAIL, arrayOf("[email protected]"))
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(Intent.EXTRA_STREAM, fileUri)

 

아무리 생각해도 ACTION_SENDTO에 파일 첨부가 안되는게 이상하다....

728x90

공유하기

게시글 관리

구독하기Snippets Save Us

'개발 > 안드로이드' 카테고리의 다른 글

코틀린에서 const val 과 val 차이  (0)2021.02.21앱 설치/업데이트 시간 가져오기  (0)2021.02.03안드로이드 fingerprint 확인  (0)2020.12.03나이트 모드의 현재 상태 확인하는 방법 두가지  (0)2020.11.24안드로이드 위젯 크기 결정 로직의 문제들  (2)2020.02.02

나는 안드로이드 응용 프로그램에서 txt 첨부 이메일 (의도)를 보내고 있습니다. Txt 파일은 응용 프로그램 이전에 만들어졌습니다. gmail 클라이언트의 genymotion에서이 첨부 파일 (약 1KB의 파일)이 표시되지만 실제 메일은 첨부 파일없이 전송됩니다.

코드 스 니펫 :

    // file creating 

    ...

        final String FILENAME = "file";

    ...

    try {

            // отрываем поток для записи

            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(openFileOutput(FILENAME, MODE_PRIVATE)));

            // writing any data

            bw.write ("\n");

...

            Log.d(LOG_TAG, "file is created");

            bw.close();

}

// sending email with intent 

    public void sendEmailwithMailClient (){

        Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 

// sending email

        emailIntent.setType("plain/text"); 

        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"[email protected]"}); 

        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(R.string.app_name)); 

        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Hello!");

        File file = new File(getFilesDir(), FILENAME);

 //       if (!file.exists() || !file.canRead()) {

 //           return;}

        Uri uri = Uri.fromFile(file);

        emailIntent.putExtra(Intent.EXTRA_STREAM, uri);

        startActivity(Intent.createChooser(emailIntent, "Pick an Email provider"));

    }

getFilesDir () 및 FILENAME을 통해 첨부 파일에 대해 Uri를 올바르게 정의합니까? 이메일을 보내는 동안 첨부 파일을 잃어 버리는 이유는 무엇입니까? 그것은 Genymotion의 문제이거나 실제로 나는 우편물에 아무 것도 붙이지 않고 Genymotion에 표시하는 것은 단지 가짜 일뿐입니다.

미리 감사드립니다.

# 자답 : 

앱 개인 저장소에서 파일을 첨부 할 수 없습니다. 외부 저장소에 저장 한 다음 첨부해야합니다.

File file = new File(getFilesDir(), FILENAME);

/data/data/package_name/files디렉토리에 파일을 만들고 있습니다 . 다른 앱에서는 액세스 할 수 없습니다. 여전히 앱 개인 저장소에서 파일을 공유하려면 파일을 만들어야합니다 ContentProvider.