【问题标题】:Sending HTML text message to a phone in java在java中向手机发送HTML文本消息
【发布时间】:2014-04-09 11:25:42
【问题描述】:

我目前有一个程序可以根据用户在我的数据库中的信息向他们发送电子邮件。电子邮件以 html 构建,并作为内容类型 text/html 发送给用户电子邮件。我想试试看是否可以使用电子邮件格式##########@domain.com 以某种方式将此消息发送到他们的手机。

显然手机无法接收 HTML 消息,所以我尝试了这个:

-删除了 html 并发送了纯文本,这确实有效,但是对于 Verizon(我测试过的唯一服务提供商),文本被截断并且完整的消息从未发送。我只收到了消息的第一部分。

然后我想知道是否有可能以某种方式“截屏”html 消息,然后简单地将 html 显示的图片发送到手机。

这是我当前发送电子邮件的代码:

public static void email(String content, String address) {

    final String username = "email";
    final String password = "password";

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

    Session session = Session.getInstance(props,
      new javax.mail.Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
      });

    try {


            Message message = new MimeMessage(session);
            Address[] a = InternetAddress.parse("myemail");
            message.setReplyTo(a);
            message.setHeader("From: ", "Movie Alert");
            message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(address));

            if (ShowFinder.showsFound > 1) message.setSubject("Movie Alert: " + ShowFinder.showsFound + " New Shows Found!");
            else if (ShowFinder.showsFound == 1) message.setSubject("Movie Alert: " + ShowFinder.showsFound + " New Show Found!");
            else message.setSubject("Unsubscribed");

            StringBuilder sb = new StringBuilder();
            sb.append(content);
            message.setContent(sb.toString(), "text/html");

            Transport.send(message);


        System.out.println("Sent Email");

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

总之,我有以下问题:

-文字被截断的原因是我没有正确发送电子邮件,还是因为服务提供商?

-是否可以通过短信发送基于html代码的html显示截图?

谢谢!

【问题讨论】:

  • 只是猜测,但您是否尝试过 text/plain 而不是 text/html?或者只使用setText(sb.toString())
  • 我尝试使用 setText 和 text/plain 得到相同的结果

标签: java html email jakarta-mail


【解决方案1】:

我找到了向手机发送 html 消息的解决方案!有一个名为 HTML2Image 的 jar 可以将您的 html 代码转换为图像:https://code.google.com/p/java-html2image/

要制作 html 的图像,您可以执行以下操作:

    HtmlImageGenerator imageGenerator = new HtmlImageGenerator();
    imageGenerator.loadHtml("<b>Hello World!</b> Please goto <a title=\"Goto Google\" href=\"http://www.google.com\">Google</a>.");
    imageGenerator.saveAsImage("hello-world.png");

然后你可以像这样发送这个新图像:

                    Multipart mp = new MimeMultipart();
            Message message = new MimeMessage(session);
            MimeBodyPart mbp1 = new MimeBodyPart();
            MimeBodyPart mbp2 = new MimeBodyPart();
            message.setFrom(new InternetAddress("email"));
            message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse(toEmail));
            mbp1.setText(text);
                    mp.addBodyPart(mbp1);

            DataSource source = new FileDataSource(new File("screenshot location/hello-world.png"));
                mbp2.setDataHandler(new DataHandler(source));
                mbp2.setFileName("Screenshot.png");
                mbp2.setHeader("Content-ID", "<image_cid>");
            mp.addBodyPart(mbp2);

            message.setContent(mp);
            Transport.send(message);

【讨论】:

    【解决方案2】:

    我强烈怀疑文本被截断是因为服务提供商。单条短信的大小可能有限制。

    如果您无法将所需的所有文本放入短消息中,您可能需要发送指向包含所有信息的网页的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多