2011-06-01 24 views
22

Nota: no quiero adjuntar la imagen al correo electrónico¿Cómo mostrar una imagen en el cuerpo del correo electrónico?

quiero mostrar una imagen en el cuerpo del correo electrónico,

Había probado la etiqueta de imagen HTML <img src=\"http://url/to/the/image.jpg\">" y tengo salida como se puede ver en esta mi pregunta en How to add an image in email body, así que cansé Html.ImageGetter.

No funciona para mí, también me da la misma salida, así que no tengo duda es posible hacer esto,

Mi código

Intent i = new Intent(Intent.ACTION_SEND); 
i.putExtra(Intent.EXTRA_EMAIL,new String[] {"[email protected]"}); 
i.putExtra(Intent.EXTRA_TEXT, 
    Html.fromHtml("Hi <img src='http://url/to/the/image.jpg'>", 
    imgGetter, 
    null)); 

i.setType("image/png"); 
startActivity(Intent.createChooser(i,"Email:")); 


private ImageGetter imgGetter = new ImageGetter() { 

    public Drawable getDrawable(String source) { 
     Drawable drawable = null; 
      try { 
       drawable = getResources().getDrawable(R.drawable.icon); 
       drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), 
        drawable.getIntrinsicHeight()); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       Log.d("Exception thrown",e.getMessage()); 
      } 
      return drawable; 
    } 
}; 

ACTUALIZACIÓN 1: Si yo uso el código de ImageGetterTextView soy capaz de obtener el texto y la imagen, pero no soy capaz de ver la imagen en el cuerpo del correo electrónico

Aquí está mi código:

TextView t = null; 
t = (TextView)findViewById(R.id.textviewdemo); 
t.setText(Html.fromHtml("Hi <img src='http://url/to/the/image.jpg'>", 
    imgGetter, 
    null)); 

ACTUALIZACIÓN 2: que había utilizado la etiqueta audaz y etiqueta de anclaje como se muestra a continuación estas etiquetas están trabajando bien, pero cuando yo solía etiqueta img puedo capaz de ver una caja cuadrada que dicen como OBJ

i.putExtra(Intent.EXTRA_TEXT,Html.fromHtml("<b>Hi</b><a href='http://www.google.com/'>Link</a> <img src='http://url/to/the/image.jpg'>", 
     imgGetter, 
     null)); 
+0

Did se trató con otra etiqueta? Quizás se desinfecte cuando proviene de un intento. – Macarse

+0

@Macarse: qué etiqueta, ¿pueden ustedes elaborar –

+0

@Sankar: por ejemplo, una etiqueta en negrita. Solo para probar si funciona. – Macarse

Respuesta

15

Desafortunadamente, no es posible hacer esto con Intents.

La razón por la cual, por ejemplo, se muestra en negrita texto en el EditarTexto y no una imagen es que StyleSplan está implementando ParcelableImageSpan mientras que no lo hace. Por lo tanto, cuando Intent.EXTRA_TEXT se recupera en la nueva actividad, ImageSpan no se podrá separar y, por lo tanto, no será parte del estilo adjunto a EditText.

Desafortunadamente, no es posible utilizar otros métodos en los que no se pasan los datos con la intención, ya que no se tiene el control de la actividad de recepción.

+0

Si esa es la única diferencia, podría implementar su propio ImageSpan (copiar el código) y simplemente transferir el mapa de bits (si es pequeño) a través de un paquete en el intento. Ergo, se separaría y podría mostrarse en el otro lado? – George

+11

¿En serio sobre qué? ¿Sabía que la publicación a la que está enlazando es una copia/pega de mi respuesta y no al revés? – rochdev

+0

¿Hay alguna solución para este problema? – HRM

1

dos primeras sugerencias simples:

  • cerrar su etiqueta img (<img src="..." /> en lugar de <img src="...">)
  • uso i.setType("text/html") en lugar de i.setType("image/png")

Si ninguno de los trabajos, tal vez intenta adjuntar la imagen al correo electrónico y, a continuación referencia a ella usando "cid:ATTACHED_IMAGE_CONTENT_ID" en lugar de un "http:URL_TO_IMAGE"?

Intent i = new Intent(Intent.ACTION_SEND); 
i.putExtra(Intent.EXTRA_EMAIL,new String[] {"[email protected]"}); 
i.putExtra(Intent.EXTRA_STREAM, Uri.parse("http://url/to/the/image.jpg"); 
i.putExtra(Intent.EXTRA_TEXT, 
     Html.fromHtml("Hi <img src='cid:image.jpg' />", //completely guessing on 'image.jpg' here 
     imgGetter, 
     null)); 
i.setType("image/png"); 

consulte la sección titulada Envío de correo electrónico con formato HTML con imágenes incrustadas en elapache email user guide

Aunque, entonces usted tendría que conocer el contenido-id de la imagen adjunta, y no estoy seguro si eso sale a la superficie a través del enfoque de intención estándar. ¿Tal vez podría inspeccionar el correo electrónico sin procesar y determinar sus convenciones de nomenclatura?

+0

Gracias por su reproducción, pero sus sugerencias no están funcionando, lo he usado, puede haber alguna restricción en el enfoque de intención. –

1

Sé que esto no responde a la pregunta original, pero tal vez una alternativa aceptable para algunas personas es adjuntar la imagen al correo electrónico en su lugar. Me las arreglé para conseguir esto con el siguiente código ...

String urlOfImageToDownload = "https://ssl.gstatic.com/s2/oz/images/google-logo-plus-0fbe8f0119f4a902429a5991af5db563.png"; 

// Start to build up the email intent 
Intent i = new Intent(Intent.ACTION_SEND); 
i.setType("message/rfc822"); 
i.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); 
i.putExtra(Intent.EXTRA_SUBJECT, "Check Out This Image"); 
i.putExtra(Intent.EXTRA_TEXT, "There should be an image attached"); 

// Do we need to download and attach an icon and is the SD Card available? 
if (urlOfImageToDownload != null && Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { 
    // Download the icon... 
    URL iconUrl = new URL(urlOfImageToDownload); 
    HttpURLConnection connection = (HttpURLConnection) iconUrl.openConnection(); 
    connection.setDoInput(true); 
    connection.connect(); 
    InputStream input = connection.getInputStream(); 
    Bitmap immutableBpm = BitmapFactory.decodeStream(input); 

    // Save the downloaded icon to the pictures folder on the SD Card 
    File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
    directory.mkdirs(); // Make sure the Pictures directory exists. 
    File destinationFile = new File(directory, attachmentFileName); 
    FileOutputStream out = new FileOutputStream(destinationFile); 
    immutableBpm.compress(Bitmap.CompressFormat.PNG, 90, out); 
    out.flush(); 
    out.close(); 
    Uri mediaStoreImageUri = Uri.fromFile(destinationFile);  

    // Add the attachment to the intent 
    i.putExtra(Intent.EXTRA_STREAM, mediaStoreImageUri); 
}      

// Fire the intent 
startActivity(i); 

http://www.oliverpearmain.com/blog/android-how-to-launch-an-email-intent-attaching-a-resource-via-a-url/

0
i resolve problem send image as a body mail in android 

    you have need three lib of java mail 

    1.activation.jar 
    2.additionnal.jar 
    3.mail.jar 




    public class AutomaticEmailActivity extends Activity { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      if (android.os.Build.VERSION.SDK_INT > 9) { 
       StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
       StrictMode.setThreadPolicy(policy); 
      } 



      final String fromEmail = "[email protected]"; //requires valid gmail id 
      final String password = "abc"; // correct password for gmail id 
      final String toEmail = "[email protected]"; // can be any email id 

      System.out.println("SSLEmail Start"); 
      Properties props = new Properties(); 
      props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host 
      props.put("mail.smtp.socketFactory.port", "465"); //SSL Port 
      props.put("mail.smtp.socketFactory.class", 
        "javax.net.ssl.SSLSocketFactory"); //SSL Factory Class 
      props.put("mail.smtp.auth", "true"); //Enabling SMTP Authentication 
      props.put("mail.smtp.port", "465"); //SMTP Port 

      Authenticator auth = new Authenticator() { 
       //override the getPasswordAuthentication method 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(fromEmail, password); 
       } 
      }; 

      final Session session = Session.getDefaultInstance(props, auth); 
      Button send_email=(Button) findViewById(R.id.send_email); 
      send_email.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        sendImageEmail(session, toEmail,"SSLEmail Testing Subject with Image", "SSLEmail Testing Body with Image"); 

       } 
      }); 

     } 




     public static void sendImageEmail(Session session, String toEmail, String subject, String body){ 
      try{ 
       MimeMessage msg = new MimeMessage(session); 
       msg.addHeader("Content-type", "text/HTML; charset=UTF-8"); 
       msg.addHeader("format", "flowed"); 
       msg.addHeader("Content-Transfer-Encoding", "8bit"); 

       msg.setFrom(new InternetAddress("[email protected]", "NoReply-JD")); 

       msg.setReplyTo(InternetAddress.parse("[email protected]", false)); 

       msg.setSubject(subject, "UTF-8"); 

       msg.setSentDate(new Date()); 

       msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false)); 

       MimeMultipart multipart = new MimeMultipart("related"); 

       BodyPart messageBodyPart = new MimeBodyPart(); 
       String htmlText = "<H1>Hello</H1><img src=\"cid:image\">"; 
       messageBodyPart.setContent(htmlText, "text/html"); 
       // add it 
       multipart.addBodyPart(messageBodyPart); 


       String base = Environment.getExternalStorageDirectory().getAbsolutePath().toString(); 
       String filename = base + "/photo.jpg"; 

       messageBodyPart = new MimeBodyPart(); 
       DataSource fds = new FileDataSource(filename); 

       messageBodyPart.setDataHandler(new DataHandler(fds)); 
       messageBodyPart.setHeader("Content-ID", "<image>"); 
       multipart.addBodyPart(messageBodyPart); 
       msg.setContent(multipart); 


       // Send message 
       Transport.send(msg); 
       System.out.println("EMail Sent Successfully with image!!"); 
      }catch (MessagingException e) { 
       e.printStackTrace(); 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

esto funciona bien desde mi lado y puede enviar correos sin ninguna intención ... –

+0

Bishno Esto no resuelve el problema de la pregunta para que el usuario de la aplicación envíe un correo electrónico con contenido 'html'. –

Cuestiones relacionadas