【问题标题】:Plain text email sent via JavaMail arrives as an attachment通过 JavaMail 发送的纯文本电子邮件作为附件到达
【发布时间】:2016-04-18 22:28:55
【问题描述】:

我已经编写了一个通过 java 邮件 API 发送的代码。一切正常,但是我发送的纯文本被收件人以可下载附件而不是纯文本消息的形式接收。

我不知道为什么会这样。 下面给出的是我运行它时的代码及其输出。

        String toEmail=request.getParameter("email");
        String subject=request.getParameter("subject");
        String message=request.getParameter("message");

        String fromEmail="suyash.tilhari12@gmail.com";
        String username="suyash.tilhari12";
        String password="********";

        mailSender.sendEmail(fromEmail, username, password, toEmail, subject, message);

   public void sendEmail(String fromEmail,String username,String password,
            String toEmail,String subject,String  message) 
    {
        try
        {
        Properties props= System.getProperties();
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.fallback", "false");

        Session mailSession = Session.getDefaultInstance(props, null);
        mailSession.setDebug(true);

        Message mailMessage=new MimeMessage(mailSession);
        mailMessage.setFrom(new InternetAddress(fromEmail));
        mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
        mailMessage.setContent(message, "html/text");
        mailMessage.setSubject(subject);

        Transport transport=mailSession.getTransport("smtp");
        transport.connect("smtp.gmail.com",username,password);
        transport.sendMessage(mailMessage, mailMessage.getAllRecipients());
        }
        catch (Exception ex) {
            Logger.getLogger(MailSenderBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

我使用过 Java Mail API、NetBeans IDE、Glassfish Server、Enterprise JAVA Bean。

结果如下:

邮件收件人- 看,简单的短信是附件的形式。

邮件在此附件中,现在已下载并打开-

这是怎么引起的,我该如何解决?

【问题讨论】:

    标签: java jakarta-mail plaintext


    【解决方案1】:

    尝试将内容设置为"text/html" 而不是"html/text"

    所以它应该看起来像:

     setContent(message, "text/html" );
    

    【讨论】:

      【解决方案2】:

      您的问题与 MIME 内容有关。一切都是正确的,但不是那部分。

      在那一行

      mailMessage.setContent(message, "html/text");
      

      您使用“html/text”作为 mime 类型,这是无效的。

      您可以在此处找到 MIME 类型的列表: http://www.sitepoint.com/web-foundations/mime-types-complete-list/

      代码应该是

      mailMessage.setContent(message, "text/plain");
      

      mailMessage.setContent(message, "text/plain; charset=UTF-8");
      

      包括字符集信息(ISO-8859-1、UTF-8 等)。

      这是只发送一个内容的情况。如果你需要发送不同格式的内容(例如html和纯文本)或者你需要发送附件,你必须使用MimeMultipart

      【讨论】:

      • 或者使用setText方法。并修复这些common mistakes
      • 你是对的,使用 setText 解决了这个问题,而且在这种情况下更容易。我只是想解释为什么它不起作用。
      【解决方案3】:

      @Suyash:尝试在此http://www.tutorialspoint.com/java/java_sending_email.htm 链接上按照说明进行操作。

      【讨论】:

      • 感谢浏览了这个教程,发现需要写mailMessage.setText(message);而不是 --> mailMessage.setContent(message, "html/text");这非常有效。
      猜你喜欢
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 2012-06-14
      • 2013-06-10
      • 1970-01-01
      • 2012-04-19
      相关资源
      最近更新 更多