通过JavaMail发送的纯文本电子邮件作为附件到达

时间:2016-01-13 19:24:02

标签: java javamail plaintext

我编写了一个代码,通过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。

结果如下:

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

enter image description here

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

enter image description here

这是如何引起的?如何解决?

3 个答案:

答案 0 :(得分:1)

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

所以看起来应该是这样的:

 setContent(message, "text/html" );

答案 1 :(得分:1)

您的案例中的问题与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

答案 2 :(得分:0)

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