0

電子メールを読み取り、その内容を取得する JavaMail を使用したアプリケーションを作成しました。コンテンツは HTML で取得されます。このコンテンツは分析され、別の電子メール アドレスに転送されます。

Chrome、Mozilla、Outlook、Office 365、Thunderbird、Internet Explorer で電子メールのレイアウトをテストしました。もちろん、IEを除いて、すべてがうまく機能します。

スクリーンショットをいくつか作成しました。1 つは Chrome で、もう 1 つは Internet Explorer で、両方とも同じメール クライアント (Office 365) から作成しました。

Chrome での適切なメール

クロームメール

不正な IE 電子メール

不正な IE 電子メール

multipartメールの本文部分と添付ファイル部分をまとめました。これは私が使用しているコードです:

public void SentTest(String messageContent) throws IOException, ParseException, NoSuchProviderException {

            //Only get text between HTML tags
        Pattern pattern = Pattern.compile(".*?<html.*?>(.*?)</html>.*?");
        Matcher matcher = pattern.matcher(messageContent);
        if (matcher.matches()) {
            messageContent= matcher.group(1);
        }

        messageContent= Jsoup.clean(messageContent, Whitelist.relaxed());

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smpt.host", "pod51010.outlook.com");
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.starttls.enable", "true");

        Session session = Session.getInstance(props, null);
        try {
            transport = session.getTransport("smtp");
            try {
                transport.connect("host", "email", "password");
            } catch (MessagingException ex) {
                ex.printStackTrace();
            }
        } catch (NoSuchProviderException ex) {
            ex.printStackTrace();
        }

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("email"));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("testemail"));
            message.setSubject("Test");
            MimeBodyPart testMessagePart = new MimeBodyPart();
            testMessagePart.setText(inhoudBericht, "ISO-8859-1", "html");

            testMessagePart.setHeader("Content-Type", "text/html; charset=\"iso-8859-1\"");
            testMessagePart.setHeader("Content-Transfer-Encoding", "quoted-printable");
            testMessagePart.setHeader("MIME-Version", "1.0");


            Multipart multipart = new MimeMultipart("multipart");
            multipart.addBodyPart(testMessagePart);

            //Set the content of the Message
            message.setHeader("", "");
            message.setContent(multipart, "html; charset=\"iso-8859-1\"");

            try {
                transport.sendMessage(message, message.getAllRecipients());
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            transport.close();

        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }


    } 

私の質問は、電子メールのレイアウトを柔軟にして、すべてのブラウザで機能するようにするにはどうすればよいですか?

編集

<html>タグを追加し、HTML から属性Doctypeを削除するとwidth、レイアウトは「正しく」表示されますが、もちろん別の問題があります。

青のレイアウト

ご覧のとおり、青色になり、表のアウトラインが表示されています。これを取り除くためのアイデアはありますか?

編集

bgcolorタグを削除して、青い背景を取り除きました。唯一の問題は、表のアウトラインを削除することです。

4

1 に答える 1

0

JsoupとNodeTraverserを使用して解決しました(この回答のクレジット)

Document doc = Jsoup.parse(input);


NodeTraversor traversor  = new NodeTraversor(new NodeVisitor() {

  @Override
  public void tail(Node node, int depth) {
    if (node instanceof Element) {
        Element e = (Element) node;
        e.removeAttr("width");
        e.removeAttr("border");
        e.removeAttr("bgcolor");
    }
  }

  @Override
  public void head(Node node, int depth) {        
  }
});

traversor.traverse(doc.body());
String modifiedHtml = doc.toString();

そして、Doctypeを追加します

modifiedHTML = "<!DOCTYPE html PUBLIC \" //W3C//DTD HTML 4.0.1//en\">"+modifiedHTML;

それはおそらく最善の解決策ではありませんが、それは機能し、私はそれに満足しています:)。助けてくれてありがとう!

于 2013-01-10T11:12:24.847 に答える