在电子邮件中发送图像不起作用

问题描述:

我使用此代码(以下给出)通过电子邮件从我的android应用程序发送图像,收到电子邮件,但它没有图像。请告诉我的代码中有什么问题?在电子邮件中发送图像不起作用

接收邮件: 电子邮件正文

enter image description here

代码:

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); 
    } 

} 
+0

你的HTML将会是这个样子:'

'如果您将该HTML复制到一个文件中,并尝试在桌面Web浏览器中查看该文件,则该文件不起作用。 'src'属性没有方案,因此它将根据您显示HTML文件的位置进行解释,并且您的桌面计算机在该路径中没有图像。 – CommonsWare
+0

@CommonsWare那么我应该怎么做才能成功发送图像? – Salu

+0

作为附件发送图像。或者,将图像上传到Web服务器,然后在HTML电子邮件正文中使用来自Web服务器的“https”URL。只需在电子邮件正文中引用文件系统路径就不会传输图像。 – CommonsWare

所以你的电子邮件遇到与身体像这样的(有点):

<!DOCTYPE html><html><body><img src="\myPhone\DCIM\image.png"></body></html> 

除非您在手机上阅读电子邮件,否则您的电子邮件将无法到达该位置。

编辑1

为Android文档中列出您可以使用Intent.EXTRA_STREAM附加额外的数据到你的意图here

+0

那么我应该怎么做才能成功发送图像? – Salu

+0

请参阅[this](http://*.com/questions/14457457/android-intent-send-an-email-with-image-attachment) – bc004346

+0

我想在没有用户交互的情况下发送电子邮件。 – Salu