Java MailJob-Android studio中附加的图像
我实现了一个MailJob类来发送电子邮件,效果很好。我还需要发送附加图像,但它不工作 这是我实现的代码Java MailJob-Android studio中附加的图像,java,android,email,Java,Android,Email,我实现了一个MailJob类来发送电子邮件,效果很好。我还需要发送附加图像,但它不工作 这是我实现的代码 class MailJob extends AsyncTask<MailJob.Mail,Void,Void> { private final String user; private final String pass; public MailJob(String user, String pass) { super(); this.user=user;
class MailJob extends AsyncTask<MailJob.Mail,Void,Void> {
private final String user;
private final String pass;
public MailJob(String user, String pass) {
super();
this.user=user;
this.pass=pass;
}
@Override
protected Void doInBackground(Mail... mails) {
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, pass);
}
});
for (Mail mail:mails) {
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(mail.from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(mail.to));
message.setSubject(mail.subject);
message.setText(mail.content);
// Send message
Transport.send(message);
} catch (MessagingException e) {
Log.d("MailJob", e.getMessage());
}
}
return null;
}
public static class Mail{
private final String subject;
private final String content;
private final String from;
private final String to;
private final Uri camino;
public Mail(String from, String to, String subject, String content, Uri camino){
this.subject=subject;
this.content=content;
this.from=from;
this.to=to;
this.camino=camino;
}
}
我使用以下命令获取路径和文件:
private void openGallery(){
Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(gallery, PICK_IMAGE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
if(resultCode == RESULT_OK && requestCode == PICK_IMAGE){
imageUri = data.getData();
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), imageUri);
} catch (IOException e) {
e.printStackTrace();
}
mg.setImageBitmap(bitmap);
a.add(bitmap);
}
}
因此,Uri.getPath()是路径,数据文件是getFileName(imageUri):
日志:
javax.mail.MessagingException: IOException while sending message;
nested exception is:
java.io.FileNotFoundException: /external/images/media/4176/20200505_103438.jpg (No such file or directory)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1290)
at javax.mail.Transport.send0(Transport.java:255)
at javax.mail.Transport.send(Transport.java:124)
at com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:87)
at com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:24)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.io.FileNotFoundException: /external/images/media/4176/20200505_103438.jpg (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:231)
at java.io.FileInputStream.<init>(FileInputStream.java:165)
at javax.activation.FileDataSource.getInputStream(FileDataSource.java:110)
at javax.activation.DataHandler.writeTo(DataHandler.java:318)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1645)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:961)
at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:553)
at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:81)
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:900)
at javax.activation.DataHandler.writeTo(DataHandler.java:330)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1645)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1850)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1241)
at javax.mail.Transport.send0(Transport.java:255)
at javax.mail.Transport.send(Transport.java:124)
at com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:87)
at com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:24)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
javax.mail.MessaginException:IOException发送消息时;
嵌套异常是:
java.io.FileNotFoundException:/external/images/media/4176/20200505_103438.jpg(无此类文件或目录)
在com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1290)上
位于javax.mail.Transport.send0(Transport.java:255)
在javax.mail.Transport.send(Transport.java:124)
位于com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:87)
位于com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:24)
位于android.os.AsyncTask$2.call(AsyncTask.java:333)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
运行(Thread.java:764)
原因:java.io.FileNotFoundException:/external/images/media/4176/20200505_103438.jpg(无此类文件或目录)
位于java.io.FileInputStream.open0(本机方法)
在java.io.FileInputStream.open(FileInputStream.java:231)
位于java.io.FileInputStream。(FileInputStream.java:165)
位于javax.activation.FileDataSource.getInputStream(FileDataSource.java:110)
在javax.activation.DataHandler.writeTo(DataHandler.java:318)
在javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1645)
在javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:961)
位于javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:553)
位于com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:81)
位于javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:900)
在javax.activation.DataHandler.writeTo(DataHandler.java:330)
在javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1645)
在javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1850)
在com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1241)上
位于javax.mail.Transport.send0(Transport.java:255)
在javax.mail.Transport.send(Transport.java:124)
位于com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:87)
位于com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:24)
位于android.os.AsyncTask$2.call(AsyncTask.java:333)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
运行(Thread.java:764)
如果您在发送messageReplaceLog.D(“MailJob”,e.getMessage())时发布整个堆栈跟踪,而不仅仅是错误行,那么您的运气会更好代码>带有Log.e(“MailJob”,“异常发送邮件”,e)代码>。然后检查整个堆栈跟踪并考虑将其添加到您的问题中。我得到的是:java. Io.FieloToFunExtExcExt:Ext/图像/媒体/ 4176 /202005 513Y1864 5.JPG(没有这样的文件或目录)。如何获取路径和文件名在代码中我们仍然没有完整的堆栈跟踪。我猜您的问题在于DataSource source=newfiledatasource(String.valueOf(mail.camino))
,其中mail.camino
返回错误中显示的值。您需要确定该camino
值的来源。它不是有效的文件系统路径。我的猜测是,您将Uri
视为一个文件。如果您在发送messageReplaceLog.D(“MailJob”,e.getMessage())时发布整个堆栈跟踪,而不仅仅是错误行,那么您的运气会更好代码>带有Log.e(“MailJob”,“异常发送邮件”,e)代码>。然后检查整个堆栈跟踪并考虑将其添加到您的问题中。我得到的是:java. Io.FieloToFunExtExcExt:Ext/图像/媒体/ 4176 /202005 513Y1864 5.JPG(没有这样的文件或目录)。如何获取路径和文件名在代码中我们仍然没有完整的堆栈跟踪。我猜您的问题在于DataSource source=newfiledatasource(String.valueOf(mail.camino))
,其中mail.camino
返回错误中显示的值。您需要确定该camino
值的来源。它不是有效的文件系统路径。我的猜测是,您将Uri
视为一个文件。
Caused by: java.io.FileNotFoundException: external/images/media/4176/20200513_190645.jpg (No such file or directory)
private void openGallery(){
Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(gallery, PICK_IMAGE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
if(resultCode == RESULT_OK && requestCode == PICK_IMAGE){
imageUri = data.getData();
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(getContext().getContentResolver(), imageUri);
} catch (IOException e) {
e.printStackTrace();
}
mg.setImageBitmap(bitmap);
a.add(bitmap);
}
}
public String getFileName(Uri uri) {
String result = null;
if (uri.getScheme().equals("content")) {
Cursor cursor = getContext().getContentResolver().query(uri, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
}
} finally {
cursor.close();
}
}
if (result == null) {
result = uri.getPath();
int cut = result.lastIndexOf('/');
if (cut != -1) {
result = result.substring(cut + 1);
}
}
return result;
}
javax.mail.MessagingException: IOException while sending message;
nested exception is:
java.io.FileNotFoundException: /external/images/media/4176/20200505_103438.jpg (No such file or directory)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1290)
at javax.mail.Transport.send0(Transport.java:255)
at javax.mail.Transport.send(Transport.java:124)
at com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:87)
at com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:24)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.io.FileNotFoundException: /external/images/media/4176/20200505_103438.jpg (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:231)
at java.io.FileInputStream.<init>(FileInputStream.java:165)
at javax.activation.FileDataSource.getInputStream(FileDataSource.java:110)
at javax.activation.DataHandler.writeTo(DataHandler.java:318)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1645)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:961)
at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:553)
at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:81)
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:900)
at javax.activation.DataHandler.writeTo(DataHandler.java:330)
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1645)
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1850)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1241)
at javax.mail.Transport.send0(Transport.java:255)
at javax.mail.Transport.send(Transport.java:124)
at com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:87)
at com.example.operacioneschecklist.MailJob.doInBackground(MailJob.java:24)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)