2017-02-27 10 views
0

私はこのコードを使用して、私のアンドロイドアプリケーションから電子メールで画像を送信していますが、画像はありません。私のコードで何が問題なのか教えてください。電子メールで画像を送信すると動作しません

受信メール: 電子メールの本文

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

を余分にデータを添付することができます:<!DOCTYPE HTML> ' 'そのHTMLをファイルにコピーし、それをデスクトップのWebブラウザで表示しようとすると、機能しません。 'src'属性はスキームを持たないので、HTMLファイルを表示している場所に関係なく解釈され、デスクトップマシンはそのパスにイメージを持ちません。 – CommonsWare

+0

@CommonsWareそれでは、画像を正常に送信するにはどうすればよいですか? – Salu

+0

画像を添付ファイルとして送信します。または、イメージをWebサーバーにアップロードしてから、HTML電子メール本文のWebサーバーから「https」URLを使用します。電子メール本文のファイルシステムパスを参照するだけではイメージは転送されません。 – CommonsWare

答えて

0

だからあなたのメールは次のように身体に出くわす(ちょっと):

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

あなたの電話で電子メールを読まない限り、あなたの電子メールはその場所に到達することができません。

EDIT 1

概説として、あなたはあなたのHTMLは、このような何かを見に行くされたAndroidのドキュメントでIntent.EXTRA_STREAMを使用して、あなたの意思にhere

+0

イメージを正常に送信するにはどうすればよいですか? – Salu

+0

[こちら](http://stackoverflow.com/questions/14457457/android-intent-send-an-email-with-image-attachment) – bc004346

+0

私はユーザーとのやり取りなしで電子メールを送信したいと思います。 – Salu

関連する問題