Как отправить электронное письмо с вложением файла в Android
Я хочу прикрепить .VCF файл со своей почты и отправить по почте. Но Почта поступает по адресу без вложения.Я использовал приведенный ниже код, но код для этого, и я не знаю, где я ошибаюсь.
try {
String filelocation="/mnt/sdcard/contacts_sid.vcf";
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "");
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse( "file://"+filelocation));
intent.putExtra(Intent.EXTRA_TEXT, message);
intent.setData(Uri.parse("mailto:"));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(intent);
activity.finish();
} catch(Exception e) {
System.out.println("is exception raises during sending mail"+e);
}
4 ответов
используйте приведенный ниже код для отправки почты
String filename="contacts_sid.vcf";
File filelocation = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), filename);
Uri path = Uri.fromFile(filelocation);
Intent emailIntent = new Intent(Intent.ACTION_SEND);
// set the type to 'email'
emailIntent .setType("vnd.android.cursor.dir/email");
String to[] = {"asd@gmail.com"};
emailIntent .putExtra(Intent.EXTRA_EMAIL, to);
// the attachment
emailIntent .putExtra(Intent.EXTRA_STREAM, path);
// the mail subject
emailIntent .putExtra(Intent.EXTRA_SUBJECT, "Subject");
startActivity(Intent.createChooser(emailIntent , "Send email..."));
Folder_name-это имя файла во внутреннем хранилище вашего телефона. (НА САМОМ ДЕЛЕ EXTERNAL_STORAGE). имя_файла-это имя файла, который вы хотите отправить.
private void ShareViaEmail(String folder_name, String file_name) {
try {
File Root= Environment.getExternalStorageDirectory();
String filelocation=Root.getAbsolutePath() + folder_name + "/" + file_name;
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setType("text/plain");
String message="File to be shared is " + file_name + ".";
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse( "file://"+filelocation));
intent.putExtra(Intent.EXTRA_TEXT, message);
intent.setData(Uri.parse("mailto:xyz@gmail.com"));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} catch(Exception e) {
System.out.println("is exception raises during sending mail"+e);
}
}
пример на официальном Android сайт работал для меня. Все, что нужно, чтобы добавить
startActivity(Intent.createChooser(emailIntent , "Send email..."));
как сделано в ответе Агарвала
SENDTO не поддерживает вложение. Я добавил свой ответ, используя Provider для чтения информации о файле. Это в Котлине.
fun shareFile(context: Context, filePath: File?, fileShareInfo: FileShareInfo) {
val intentFileShare = Intent(Intent.ACTION_SEND)
if (filePath!!.exists()) {
intentFileShare.type = fileShareInfo.fileType
val uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", filePath)
intentFileShare.putExtra(Intent.EXTRA_STREAM, uri)
fileShareInfo.recipients?.let {
intentFileShare.putExtra(Intent.EXTRA_EMAIL, fileShareInfo.recipients)
}
intentFileShare.putExtra(Intent.EXTRA_SUBJECT, fileShareInfo.shareSubjectText)
fileShareInfo.shareExtraText?.let {
intentFileShare.putExtra(Intent.EXTRA_TEXT, AppViewUtil.fromHtml(fileShareInfo.shareExtraText!!))
}
try {
ContextCompat.startActivity(context, Intent.createChooser(intentFileShare, fileShareInfo.shareTitle), null)
} catch (e: ActivityNotFoundException) {
Toast.makeText(context, context.getString(R.string.sharing_no_app_found), Toast.LENGTH_LONG).show()
}
}
}