por muestra incrustadas incrustada imagenes imagen enviar embebidas ejemplos correo con java android image email inline-images

java - muestra - imagenes embebidas en email



¿Cómo mostrar una imagen en el cuerpo del correo electrónico? (4)

Desafortunadamente, no es posible hacer esto con Intents.

La razón por la que, por ejemplo, se muestra texto en negrita en EditText y no en una Imagen, es que StyleSplan está implementando Parcelable mientras que ImageSpan no lo está. 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.

Por desgracia, 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 receptora.

Nota: no quiero adjuntar la imagen al correo electrónico

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

<img src=/"http://url/to/the/image.jpg/">" etiqueta de imagen HTML <img src=/"http://url/to/the/image.jpg/">" y obtuve resultados, como puede ver en esta mi pregunta sobre Cómo agregar una imagen en el correo electrónico cuerpo , así que cansé Html.ImageGetter .

No funciona para mí, también me da el mismo resultado, así que tengo una 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 utilizo el código de TextView para TextView puedo obtener el texto y la imagen, pero no puedo 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: He usado una etiqueta en negrita y una etiqueta de anclaje, como se muestra a continuación, estas etiquetas funcionan bien, pero cuando utilicé la etiqueta img, puedo ver una caja cuadrada que dice 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));


Dos sugerencias simples primero:

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

Si ninguno de los dos funciona, tal vez intente adjuntar la imagen al correo electrónico y luego hacer referencia a ella usando "cid:ATTACHED_IMAGE_CONTENT_ID" lugar de "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 Enviar correo electrónico con formato HTML con imágenes incrustadas en la guía de usuario de correo electrónico de apache

Sin embargo, entonces necesitaría conocer el id. De contenido de la imagen adjunta, y no estoy seguro de 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?


Sé que esto no responde a la pregunta original, pero tal vez una alternativa aceptable para algunas personas sea adjuntar la imagen al correo electrónico. Logré lograr 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/


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