2017-09-06 2 views
0

Je suis coincé dans un projet essayant d'envoyer une image dans le corps du mail que j'envoie dans mon application, quelqu'un sait comment puis-je faire cela?Android envoyer une image depuis javamail api

est ici la partie du code que j'envoie le courrier:

try { 
        String[] recipients = {editText.getText().toString()}; 
        SendEmailAsyncTask email = new SendEmailAsyncTask(); 
        email.m = new Mail(Base64Decoder.decoderBase64(ajudaquimail), Base64Decoder.decoderBase64(ajudaquipass)); 
        email.m.set_from("[email protected]"); 
        email.m.setBody("Seu amigo " + userName + " Te convida para participar do Aplicativo Ajudaqui, verifique também o grupo " + groupName + " para que possam compartilhar de suas ajudas: \n\n LINK PARA O APP:\n " + link); 
        email.m.get_multipart(); 
        email.m.set_to(recipients); 
        email.m.set_subject("AJUDAQUI - CONVITE"); 
        email.execute(); 
        Toast.makeText(getApplicationContext(), "Mensagem enviada", Toast.LENGTH_SHORT).show(); 
       } catch (Exception e) { 
        Toast.makeText(getApplicationContext(), "Falha ao enviar mensagem, Verifique o email digitado", Toast.LENGTH_SHORT).show(); 
       } 

ici est mon objet Mail:

package studio.brunocasamassa.ajudaquioficial.helper; 

/** 
* Created by bruno on 31/07/2017. 
*/ 

import android.content.res.AssetManager; 
import android.view.View; 

import java.io.InputStream; 
import java.util.Date; 
import java.util.Properties; 

import javax.activation.CommandMap; 
import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.activation.MailcapCommandMap; 
import javax.mail.BodyPart; 
import javax.mail.Multipart; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 

import static com.facebook.FacebookSdk.getApplicationContext; 

/** 
* Created by brandonjenniges on 11/6/15. 
*/ 
public class Mail extends javax.mail.Authenticator { 
    private String _user; 
    private String _pass; 

    private String[] _to; 
    private String _from; 


    private String _port; 
    private String _sport; 

    private String _host; 
    private View _view; 

    private String _subject; 
    private String _body; 

    private boolean _auth; 

    private boolean _debuggable; 

    private Multipart _multipart; 

    public Mail() { 
     _host = "smtp.gmail.com"; // default smtp server 
     _port = "465"; // default smtp port 
     _sport = "465"; // default socketfactory port 

     _user = ""; // username 
     _pass = ""; // password 
     _from = ""; // email sent from 
     _subject = ""; // email subject 
     _body = ""; // email body 
     _view = null; 
     _debuggable = false; // debug mode on or off - default off 
     _auth = true; // smtp authentication - default on 

     _multipart = new MimeMultipart(); 

     // There is something wrong with MailCap, javamail can not find a 
     // handler for the multipart/mixed part, so this bit needs to be added. 
     MailcapCommandMap mc = (MailcapCommandMap) CommandMap 
       .getDefaultCommandMap(); 
     mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
     mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
     mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
     mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
     mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
     CommandMap.setDefaultCommandMap(mc); 
    } 

    public Mail(String user, String pass) { 
     this(); 

     _user = user; 
     _pass = pass; 
    } 

    public boolean send() throws Exception { 
     Properties props = _setProperties(); 

     if (!_user.equals("") && !_pass.equals("") && _to.length > 0 
       && !_from.equals("") && !_subject.equals("") 
       && !_body.equals("")) { 
      Session session = Session.getInstance(props, this); 

      MimeMessage msg = new MimeMessage(session); 

      msg.setFrom(new InternetAddress(_from)); 

      InternetAddress[] addressTo = new InternetAddress[_to.length]; 
      for (int i = 0; i < _to.length; i++) { 
       addressTo[i] = new InternetAddress(_to[i]); 
      } 
      msg.setRecipients(MimeMessage.RecipientType.TO, addressTo); 

      msg.setSubject(_subject); 
      msg.setSentDate(new Date()); 

      // setup message body 
      BodyPart messageBodyPart = new MimeBodyPart(); 
      messageBodyPart.setText(_body); 
      AssetManager am = getApplicationContext().getAssets(); 
      InputStream is = null; 

// ICI Je suis en train d'obtenir mon IMAGE DE L'ACTIF ET MISE AU POINT dE lA SOURCE dE DONNÉES // MAIS NE VA PAS ET VOICI MON DOUTE

  DataSource source = new FileDataSource("invite.jpg"); 
      messageBodyPart.setDataHandler(new DataHandler(source)); 
      messageBodyPart.setFileName("invite.jpg"); 
      _multipart.addBodyPart(messageBodyPart); 

      msg.setHeader("X-Priority", "1"); 
      // Put parts in message 
      msg.setContent(_multipart); 

      // send email 
      Transport.send(msg); 

      return true; 
     } else { 
      return false; 
     } 
    } 

    public void addAttachment(String filename) throws Exception { 
     BodyPart messageBodyPart = new MimeBodyPart(); 
     DataSource source = new FileDataSource(filename); 
     messageBodyPart.setDataHandler(new DataHandler(source)); 
     messageBodyPart.setFileName(filename); 

     _multipart.addBodyPart(messageBodyPart); 
    } 

    @Override 
    public PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(_user, _pass); 
    } 


    private Properties _setProperties() { 
     Properties props = new Properties(); 

     props.put("mail.smtp.host", _host); 

     if (_debuggable) { 
      props.put("mail.debug", "true"); 
     } 

     if (_auth) { 
      props.put("mail.smtp.auth", "true"); 
     } 

     props.put("mail.smtp.port", _port); 
     props.put("mail.smtp.socketFactory.port", _sport); 
     props.put("mail.smtp.socketFactory.class", 
       "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.smtp.socketFactory.fallback", "false"); 

     return props; 
    } 

    // the getters and setters 
    public String getBody() { 
     return _body; 
    } 

    public void setBody(String _body) { 
     this._body = _body; 
    } 

    public String get_user() { 
     return _user; 
    } 

    public void set_user(String _user) { 
     this._user = _user; 
    } 

    public String get_pass() { 
     return _pass; 
    } 

    public void set_pass(String _pass) { 
     this._pass = _pass; 
    } 

    public String[] get_to() { 
     return _to; 
    } 

    public void set_to(String[] _to) { 
     this._to = _to; 
    } 

    public String get_from() { 
     return _from; 
    } 

    public void set_from(String _from) { 
     this._from = _from; 
    } 

    public String get_port() { 
     return _port; 
    } 

    public void set_port(String _port) { 
     this._port = _port; 
    } 

    public String get_sport() { 
     return _sport; 
    } 

    public void set_sport(String _sport) { 
     this._sport = _sport; 
    } 

    public String get_host() { 
     return _host; 
    } 

    public void set_host(String _host) { 
     this._host = _host; 
    } 

    public String get_subject() { 
     return _subject; 
    } 

    public void set_subject(String _subject) { 
     this._subject = _subject; 
    } 

    public boolean is_auth() { 
     return _auth; 
    } 

    public void set_auth(boolean _auth) { 
     this._auth = _auth; 
    } 

    public boolean is_debuggable() { 
     return _debuggable; 
    } 

    public void set_debuggable(boolean _debuggable) { 
     this._debuggable = _debuggable; 
    } 

    public Multipart get_multipart() { 
     return _multipart; 
    } 

    public void set_multipart(Multipart _multipart) { 
     this._multipart = _multipart; 
    } 

    public View get_view() { 
     return _view; 
    } 

    public void set_view(View _view) { 
     this._view = _view; 
    } 
} 

si quelqu'un sait comment pour résoudre cela, il sera très reconnaissant tks

Répondre

0

D'abord, corrigez tous ces common JavaMail mistakes, puis mettez à jour votre publication originale avec le nouveau code.

Vous disposez d'une méthode addAttachment, mais vous ne l'appelez jamais. Avez-vous copié ce code de quelqu'un d'autre sans comprendre comment cela fonctionne?

Le code que vous utilisez utilise la même MimeBodyPart (messageBodyPart) pour le texte principal et la pièce jointe d'image; vous en avez besoin pour chacun. Et si vous voulez vraiment que l'image soit "dans le corps" du message, vous devez créer un message multipart/apparenté avec une partie de corps principal text/html et une partie image/jpeg associée contenant l'image qui est référencé depuis la partie html en utilisant cid: références URL.