SD 카드의 파일을 이메일에 첨부합니다.
이메일을 보내기 위해 의도를 시작합니다. 모두 작동하지만 실제로 이메일을 보내려고하면 '이상한'일이 발생합니다.
여기에 코드가 있습니다.
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("image/jpeg");
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Photo");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://sdcard/dcim/Camera/filename.jpg"));
sendIntent.putExtra(Intent.EXTRA_TEXT, "Enjoy the photo");
startActivity(Intent.createChooser(sendIntent, "Email:"));
Gmail은 Gmail 메뉴를 사용하여 시작하면 첨부 파일이 표시되고 이메일에 입력하고 본문과 제목을 편집 할 수 있습니다. 별거 아니야. 나는 보내기를 눌렀다가 보냅니다. 유일한 것은 첨부 파일이 전송되지 않는다는 것입니다.
그래서. 이메일 메뉴에서 시도해 보는 것이 어떻겠습니까? (전화의 백업 이메일 계정) 첨부 파일은 표시되지 않습니다. 보낼 때 첨부 파일이 전송됩니다. 그것은 내가 뭔가 아주 잘못 믿게 만들 것입니다. 매니페스트에서 첨부 파일이있는 이메일을 보내려면 새로운 권한이 필요합니까? 내가 도대체 뭘 잘못하고있는 겁니까?
또한 같은 문제가 발생합니다.
암호 :
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("image/jpeg");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]
{"me@gmail.com"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"Test Subject");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
"go on read the emails");
Log.v(getClass().getSimpleName(), "sPhotoUri=" + Uri.parse("file:/"+ sPhotoFileName));
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:/"+ sPhotoFileName));
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
adb logcat에서 :
V/DumbDumpersMain( 3972): sPhotoUri=file://sdcard/DumbDumpers/DumbDumper.jpg
I/ActivityManager( 56): Starting activity: Intent { action=android.intent.action.CHOOSER comp={android/com.android.internal.app.ChooserActivity} (has extras) }
I/ActivityManager( 56): Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x3000000 comp={com.google.android.gm/com.google.android.gm.ComposeActivityGmail} (has extras) }
I/ActivityManager( 56): Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x2800000 comp={com.google.android.gm/com.google.android.gm.ComposeActivity} (has extras) }
D/gmail-ls( 120): MailProvider.query: content://gmail-ls/labels/me@gmail.com(null, null)
D/Gmail ( 2507): URI FOUND:file://sdcard/DumbDumpers/DumbDumper.jpg
이메일 제공 업체가 길이가 0 인 파일을 첨부하는 것입니다. 파일 시스템을 확인하면 파일이 수정됩니다. 이미지 파일을 전에 만드는 코드는 이메일을 보내기 전에 잘 완성되었습니다.
누구든지 매직 없이이 문제를 해결 했습니까? (이미 시도했습니다)?
감사합니다,
Fin
최신 정보
나를위한 길은
file:///sdcard/DumbDumpers/DumbDumper.jpg
/
루트 디렉토리를 이것이 가리 키기 때문에 여분 이 필요합니다 .
file://
+ /sdcard/DumbDumpers/DumbDumper.jpg
다음과 같이 결합
file:///sdcard/DumbDumpers/DumbDumper.jpg
위의 스 니펫에는 다음이 필요합니다.
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ sPhotoFileName));
이게 도움이 되길 계속. 평범한 데 시간이 많이 걸렸습니다.
감사합니다,
Finlay
내 쪽에서 약간의 발언. GMail에서 동일한 문제가 발생했지만 문제의 파일을 먼저 SD 카드에 저장하고 자산이 아닌 거기에서 검색하면 작동하는 것입니다. 그래서 내 코드는 다음과 가변적입니다.
Intent i = new Intent(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_SUBJECT, "Title");
i.putExtra(Intent.EXTRA_TEXT, "Content");
i.putExtra(Intent.EXTRA_STREAM, uri);
i.setType("text/plain");
startActivity(Intent.createChooser(i, "Send mail"));
그리고 여기,
uri = Uri.fromFile(new File(context.getFilesDir(), FILENAME));
작동하지 않는 반면
uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), FILENAME));
그렇습니다.
감사합니다, Michael
"Uri.parse"대신 "Uri.fromFile (new File (Environment.getExternalStorageDirectory (),"file name "))"사용
Environment.getExternalStorageDirectory ()-SD 카드 또는 기타 외부 저장소 경로
이것이 실제로 올바른 것으로 보이며 무슨 일이 일어 났는지 확실하지 않지만 재부팅 후 작동하기 시작했습니다.
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"example@mail.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "Data from app");
i.putExtra(Intent.EXTRA_TEXT , "experience number x");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "filename.txt"));
i.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(i, "Send email..."));
나는 같은 문제가 있었고 모든 곳에서 해결책을 찾았습니다. 마지막으로 나는 즉시 작동하는 오픈 소스 앱을 찾아서 해결 방법을 살펴 보았습니다. 코드가 길기 때문에 여기에 인용하지 않고 링크를 게시하겠습니다. 449 행의 sendEmail 함수를보십시오.
내 코드를 비슷하게 리팩토링했는데 이제 작동합니다. 나는 이것이 같은 상황에있는 다른 사람들에게 도움이되기를 바랍니다.
에서 RFC 1738 섹션 3.10 :
파일 URL은 다음과 같은 형식을 취합니다.
file://<host>/<path>
여기서 host 는 경로에 액세스 할 수있는 시스템의 정규화 된 도메인 이름이고 path 는 directory / directory /.../ name 형식의 계층 적 디렉토리 경로입니다 .
두 번째와 세 번째 슬래시 사이에 암시 적 'localhost'가 있기 때문에 http : // host / path / from / root 와 마찬가지로 file : /// path / from / root 입니다. 그러나 위에서 언급했듯이 Uri.FromFile ()을 사용하여 빌드하십시오.
저도 같은 증상을 보였습니다. 제 경우에는 처음에 권한과 함께 첨부 파일을 저장했기 때문 MODE_PRIVATE
입니다. 내가 그것을 변경하자마자 MODE_WORLD_READABLE
Gmail이 파일에 액세스하여 첨부 파일을 제대로 보낼 수 있었던 것 같습니다.
그것은 나를 위해 완벽하게 작동합니다.이 솔루션에서 Nicolas는 Cache 폴더 안에 하나의 사본을 만들고 여기에 Gmail 의도가 액세스 할 수 있습니다! http://stephendnicholas.com/archives/974
public void sendMail(String path) {
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
new String[] {AppConstant.server_mail});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"IBPS ERROR Mail");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
"This is an autogenerated mail from IBPS app");
emailIntent.setType("image/png");
Uri myUri = Uri.parse("file://" + path);
emailIntent.putExtra(Intent.EXTRA_STREAM, myUri);
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
}
또한 Intent.addFlags (Intent.FLAG_GRANT_READ_URI_PERMISSION); 이것은 내 문제에 도움이되었습니다.
4 일 후에 해결책을 찾았습니다. Android (Java)에서 File 클래스에 대한 경로를 제공하는 동안 다음 사항에 유의하십시오.
1) 내부 저장 경로 사용 String path = "/ storage / sdcard0 / myfile.txt";
2) path = "/ storage / sdcard1 / myfile.txt";
3) 매니페스트 파일에서 권한을 언급합니다.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
4) 먼저 파일 길이를 확인하여 확인하십시오.
5) sdcard0 및 sdcard1에 관한 ES 파일 탐색기의 경로가 같거나 다른지 확인하십시오.
예 :
File file=new File(path);
long=file.length();//in Bytes
첨부 파일이있는 이메일 보내기 : (문서로)
Intent emailIntent = new Intent (Intent.ACTION_SEND); emailIntent.setType (HTTP.PLAIN_TEXT_TYPE);
emailIntent.putExtra (Intent.EXTRA_EMAIL, new String [] { "jon@example.com"});
emailIntent.putExtra (Intent.EXTRA_SUBJECT, "이메일 제목"); emailIntent.putExtra (Intent.EXTRA_TEXT, "이메일 메시지 텍스트"); emailIntent.putExtra (Intent.EXTRA_STREAM, Uri.parse ( "content : // path / to / email / attachment"));
// Uris의 ArrayList를 전달하여 여러 항목을 첨부 할 수도 있습니다.
참고 URL : https://stackoverflow.com/questions/587917/trying-to-attach-a-file-from-sd-card-to-email
'ProgramingTip' 카테고리의 다른 글
Swift에서 typedef를 어떻게 뻗으십니까? (0) | 2020.11.04 |
---|---|
Jaro-Winkler와 Levenshtein 거리의 차이점은 무엇입니까? (0) | 2020.11.04 |
요소에 어떤가있는 목록에서 k 개의 임의의 요소를 선택합니다. (0) | 2020.11.04 |
Java에서 대문자와 소문자로 변환 (0) | 2020.11.04 |
"SDK 플랫폼 도구 구성 요소가 없습니다!" (0) | 2020.11.04 |