在电子邮件中发送图像不起作用
问题描述:
我使用此代码(以下给出)通过电子邮件从我的android应用程序发送图像,收到电子邮件,但它没有图像。请告诉我的代码中有什么问题?在电子邮件中发送图像不起作用
接收邮件: 电子邮件正文
代码:
package com.example.appdeveloper.appname;
import android.content.Context;
import android.net.Uri;
import android.os.AsyncTask;
import java.io.File;
import java.util.Properties;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Environment;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class EmailHandler extends AsyncTask<Void, Void, Boolean> {
private static String to = "[email protected]";
private static String from = "[email protected]";
private static String subject = "Subject";
private static String sender = "Android App";
private static String mail;
private static String username = "sender";
private static String password = "password";
EmailHandler(Context context) {
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+"/test.png";
mail ="<!DOCTYPE html><html><body><img src="+path+"></body></html>";
}
@Override
protected Boolean doInBackground(Void... nothing) {
try {
Authenticator auth = new EmailAutherticator();
Properties properties = new Properties();
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.starttls.enable", "true");
properties.setProperty("mail.smtp.host", "smtp.gmail.com");
properties.setProperty("mail.smtp.port", "587");
properties.setProperty("mail.smtp.user", username);
properties.setProperty("mail.smtp.password", password);
Session session = Session.getDefaultInstance(properties,auth);
MimeMessage message = new MimeMessage(session);
message.setSubject(subject);
message.setContent(mail, "text/html; charset=utf-8");
Address address = new InternetAddress(from,sender);
message.setFrom(address);
InternetAddress ad[] = new InternetAddress[2];
ad[0] = new InternetAddress(to);
ad[1] = new InternetAddress(from);
message.addRecipients(Message.RecipientType.TO, ad);
Transport.send(message);
return true;
}
catch(Exception exp) {
exp.printStackTrace();
return false;
}
}
}
class EmailAutherticator extends Authenticator {
private String username = "sender";
private String password = "password";
public EmailAutherticator() {
super();
}
public EmailAutherticator(String user,String pwd){
super();
username = user;
password = pwd;
}
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(username,password);
}
}
答
所以你的电子邮件遇到与身体像这样的(有点):
<!DOCTYPE html><html><body><img src="\myPhone\DCIM\image.png"></body></html>
除非您在手机上阅读电子邮件,否则您的电子邮件将无法到达该位置。
编辑1
为Android文档中列出您可以使用Intent.EXTRA_STREAM
附加额外的数据到你的意图here
你的HTML将会是这个样子:'
'如果您将该HTML复制到一个文件中,并尝试在桌面Web浏览器中查看该文件,则该文件不起作用。 'src'属性没有方案,因此它将根据您显示HTML文件的位置进行解释,并且您的桌面计算机在该路径中没有图像。 – CommonsWare@CommonsWare那么我应该怎么做才能成功发送图像? – Salu
作为附件发送图像。或者,将图像上传到Web服务器,然后在HTML电子邮件正文中使用来自Web服务器的“https”URL。只需在电子邮件正文中引用文件系统路径就不会传输图像。 – CommonsWare