23

注:画像をメールに添付したくありません

メール本文に画像を表示したいのですが、

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[] {"abc@gmail.com"}); 
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));
4

4 に答える 4

15

残念ながら、インテントでこれを行うことはできません。

たとえば、太字のテキストが画像ではなくEditTextに表示される理由は、 StyleSplanがParcelableを実装しているのに対し、ImageSpanは実装していないためです。したがって、Intent.EXTRA_TEXTが新しいアクティビティで取得されると、ImageSpanは分割解除に失敗するため、EditTextに追加されたスタイルの一部にはなりません。

インテントを使用してデータを渡さない他の方法を使用することは、受信するアクティビティを制御できないため、残念ながらここでは不可能です。

于 2011-06-25T09:09:59.490 に答える
1

最初に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[] {"abc@gmail.com"}); 
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");

ApacheEメールユーザーガイドの「画像が埋め込まれたHTML形式のEメールの送信」というタイトルのセクションを参照してください。

ただし、添付された画像のコンテンツIDを知る必要があり、それが標準のインテントアプローチで表示されるかどうかはわかりません。たぶん、生の電子メールを調べて、それらの命名規則を決定することができますか?

于 2011-06-20T18:59:01.240 に答える
1

これでは元の質問に答えられないことはわかっていますが、一部の人にとっては、代わりに画像をメールに添付することをお勧めします。私は次のコードでこれを達成することができました...

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[] { "abc@mail.com" });
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/

于 2012-08-08T16:03:35.213 に答える
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 = "abc@gmail.com"; //requires valid gmail id
            final String password = "abc"; // correct password for gmail id
            final String toEmail = "pradeep.bishnoi89@gmail.com"; // 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("no_reply@journaldev.com", "NoReply-JD"));

                msg.setReplyTo(InternetAddress.parse("no_reply@journaldev.com", 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();
            }
        }
    }
于 2014-12-23T09:32:44.290 に答える