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