Подтвердить что ты не робот

Как показать изображение в теле письма?

Примечание. Я не хочу прикреплять изображение к электронной почте

Я хочу показать изображение в теле письма,

Я пробовал тег изображения HTML <img src=\"http://url/to/the/image.jpg\">", и я получил вывод, как вы можете видеть в этом моем вопросе о Как добавить изображение в тело электронной почты, поэтому Я устал Html.ImageGetter.

Это не работает для меня, это также дает мне тот же результат, поэтому я сомневаюсь, что это возможно сделать,

Мой код

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

ОБНОВЛЕНИЕ 1: Если я использую код ImageGetter для TextView, я могу получить текст и изображение, но я не могу видеть изображение в теле письма

Вот мой код:

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

ОБНОВЛЕНИЕ 2: Я использовал жирный тег и тег привязки, как показано ниже, эти теги работают нормально, но когда я использовал тег img, я могу увидеть квадратную рамку, которая называется 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));
4b9b3361

Ответ 1

К сожалению, это невозможно сделать с помощью намерений.

Причина, по которой в тексте EditText отображается текст полужирный, а не изображение StyleSplan реализует Parcelable, тогда как ImageSpan нет. Поэтому, когда Intent.EXTRA_TEXT извлекается в новом действии, ImageSpan не сможет распараллелить и не будет частью стиля, добавленного в EditText.

Использование других методов, в которых вы не передаете данные с помощью Intent, к сожалению, невозможно здесь, так как вы не контролируете принимающую активность.

Ответ 2

Два простых предложения:

  • Закройте тэг img (<img src="..." /> вместо <img src="...">)
  • Используйте i.setType("text/html") вместо i.setType("image/png")

Если ни один из них не работает, возможно, вы попытаетесь добавить изображение к электронной почте, а затем ссылаетесь на него, используя "cid:ATTACHED_IMAGE_CONTENT_ID", а не "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");

См. раздел Отправка HTML-форматированного письма со встроенными изображениями в руководство пользователя электронной почты apache

Хотя, тогда вам нужно будет знать идентификатор содержимого прикрепленного изображения, и я не уверен, что это всплыло через стандартный подход Intent. Может быть, вы можете проверить необработанное письмо и определить их соглашения об именах?

Ответ 3

Я знаю, что это не отвечает на исходный вопрос, но, возможно, приемлемой альтернативой для некоторых людей является привязка изображения к электронной почте. Мне удалось добиться этого с помощью следующего кода...

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/

Ответ 4

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