添付ファイル付きのメールを送信する際に問題があります。私はJavamailライブラリ(mail.jar、activitation.jar、およびadditional.jar)を使用しています。私は正確にメールを送ることができます。しかし、添付ファイル付きのメールを送ることはできません。私は、データソースが私のファイルのパスを取ったとき、私は問題があると思うのギャラリーから画像を選択し、それが私のファイル名としては、Androidに添付ファイル付きのメールを送信できません
File f = new File("file://" + uri.getPath());
をadddedています。あなたは私のコードに多くのより多くの事を見ることができるものは何でも。(私はこの問題を解決してきたし、それは私のコードの最後の状況である)私は私の添付ファイルの閲覧に追加すべての
最初:
Button Add = (Button) findViewById(R.id.btnAdd);
Add.setOnClickListener(new Button.OnClickListener() {
public void onClick(View view) {
onAddAttachment2("image/*");
}
});
ここに私のonAddAttachment2とonActivityResultコード
private void onAddAttachment2(final String mime_type) {
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType(mime_type);
startActivityForResult(Intent.createChooser(i, null),
ACTIVITY_REQUEST_PICK_ATTACHMENT);
}
protected void onActivityResult(int requestCode, int resultCode,
Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
mAttachments = (LinearLayout) findViewById(R.id.attachments);
switch (requestCode) {
case ACTIVITY_REQUEST_PICK_ATTACHMENT:
Uri _uri = imageReturnedIntent.getData();
addAttachment(_uri);
Cursor cursor = getContentResolver()
.query(_uri,
new String[] { android.provider.MediaStore.Images.ImageColumns.DATA },
null, null, null);
cursor.moveToFirst();
String imageFilePath = cursor.getString(0);
uris.add(imageFilePath);
Log.v("imageFilePath", imageFilePath);
break;
}
}
uは私がAddAttachment方法を持っているがあり見ての通りです。ここでは、コードは次のようになります。
private void addAttachment(Uri uri) {
addAttachment(uri, null);
}
private void addAttachment(Uri uri, String contentType) {
long size = -1;
String name = null;
ContentResolver contentResolver = getContentResolver();
Cursor metadataCursor = contentResolver.query(uri, new String[] {
OpenableColumns.DISPLAY_NAME, OpenableColumns.SIZE }, null,
null, null);
if (metadataCursor != null) {
try {
if (metadataCursor.moveToFirst()) {
name = metadataCursor.getString(0);
size = metadataCursor.getInt(1);
}
} finally {
metadataCursor.close();
}
}
if (name == null) {
name = uri.getLastPathSegment();
}
String usableContentType = contentType;
if ((usableContentType == null)
|| (usableContentType.indexOf('*') != -1)) {
usableContentType = contentResolver.getType(uri);
}
if (usableContentType == null) {
usableContentType = getMimeTypeByExtension(name);
}
if (size <= 0) {
String uriString = uri.toString();
if (uriString.startsWith("file://")) {
Log.v(LOG_TAG, uriString.substring("file://".length()));
File f = new File(uriString.substring("file://".length()));
size = f.length();
} else {
Log.v(LOG_TAG, "Not a file: " + uriString);
}
} else {
Log.v(LOG_TAG, "old attachment.size: " + size);
}
Log.v(LOG_TAG, "new attachment.size: " + size);
Attachment attachment = new Attachment();
attachment.uri = uri;
attachment.contentType = usableContentType;
attachment.name = name;
attachment.size = size;
View view = getLayoutInflater().inflate(
R.layout.message_compose_attachment, mAttachments, false);
TextView nameView = (TextView) view.findViewById(R.id.attachment_name);
ImageButton delete = (ImageButton) view
.findViewById(R.id.attachment_delete);
nameView.setText(attachment.name);
delete.setTag(view);
view.setTag(attachment);
mAttachments.addView(view);
delete.setOnClickListener(new Button.OnClickListener() {
public void onClick(View view) {
uris.remove(view.getTag());
mAttachments.removeView((View) view.getTag());
}
});
}
、最終的に私のMail.javaクラスで私は方法AddAttachmentたプロパティ
static class Attachment implements Serializable {
private static final long serialVersionUID = 3642382876618963734L;
public String name;
public String contentType;
public long size;
public Uri uri;
}
持つ添付ファイルクラス:私は送信するためにクリックすると
public void addAttachment(String file) throws Exception {
BodyPart messageBodyPart = new MimeBodyPart();
FileDataSource source = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(file);
_multipart.addBodyPart(messageBodyPart);
}
をボタン、それはアドレスに送信されて書かれています。 私の添付ファイルは表示されません。私はメールを送ったときに何のエラーもありません。 OK最終的に私はが解決してきた問題... は最初私は、
ArrayList<String> uris = new ArrayList<String>();
を定義した私はそれを使用しました:私は
編集...あなたはこれらの問題の解決策を持っていた願っています!
for (int i = 0; i<uris.size(); i++)
{
m.addAttachment(uris.get(i).toString());
}
:m.send
コードブロックの前に、最後にそのuris.add(imageFilePath);
のように私のonActivityResult方法、で私は画像を追加しました私Mail.javaクラスで
、そのように示す変更:
public void addAttachment(String file) throws Exception {
BodyPart messageBodyPart = new MimeBodyPart();
FileDataSource source = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(file);
_multipart.addBodyPart(messageBodyPart);
}
返信ありがとうございます。インテントの使い方では、添付ファイルを追加するときにアプリケーションを選択するように頼まれます。私は添付ファイル付きのメールを送信するための新しいアプリケーションを開発しようとしています。だから私は私のアプリケーションのUIも開発しています。私は意図のない添付ファイルでメールを送信しようとします。 – yiddow