Javamail不会发送带有以字母'n'或'N'开头的主题的邮件

时间:2014-01-09 09:32:08

标签: java smtp javamail

我对javamail有一个奇怪的问题。 当我尝试发送带有以字母'n'开头的主题的邮件时,邮件不会被发送。我正在连接到smtp邮件服务器。

Session session = Session.getInstance(properties);

    try {
        MimeMessage msg = new MimeMessage(session);

        msg.setFrom(new InternetAddress(sender));
        msg.addRecipients(Message.RecipientType.TO, mail_list_addresses);

        //These work!
        msg.setSubject(MimeUtility.encodeText("Pode Has Fallen Down", "utf-8", "B"));
        msg.setSubject(MimeUtility.encodeText("Fallen Down It Has", "utf-8", "B"));
        msg.setSubject(MimeUtility.encodeText("It Has Fallen Down", "utf-8", "B"));

        //These doesn't work
        msg.setSubject(MimeUtility.encodeText("Node Has Fallen Down", "utf-8", "B"));
        msg.setSubject(MimeUtility.encodeText("node Has Fallen Down", "utf-8", "B"));
        msg.setSubject(MimeUtility.encodeText("N", "utf-8", "B"));



        msg.setText(standard_msg + mqttMessage + standard_msg_end);

        SMTPTransport t = (SMTPTransport) session.getTransport("smtp");

        t.connect();
        t.sendMessage(msg, msg.getAllRecipients());
        t.close();
    } catch (MessagingException mex) {
        mex.printStackTrace();
    }catch (Exception e){
        e.printStackTrace();
    }

这些是我的SMTP设置

sender = "sender@test.com";
host = "server.adress.com";
properties = System.getProperties();

properties.setProperty("mail.smtp.host", host);
properties.setProperty("mail.smtp.port", "25");

properties.setProperty("mail.smtp.auth", "false");
properties.put("mail.smtp.ssl.enable", "false");
properties.setProperty("mail.smtp.starttls.enable", "false");

properties.setProperty("mail.debug", "true");  

properties.setProperty("mail.smtp.quitwait", "true");

为什么会这样?

或者仅仅是因为我的邮件服务器不接受以字母'n'开头的主题?我尝试过不同的编码,只使用setSubject(“whatever”)而没有任何结果。

修改

邮件已发送但已到达垃圾邮件文件夹(已隐藏,因此我没有注意到它们)。

1 个答案:

答案 0 :(得分:0)

  

公共类MimeUtility   *这是一个提供各种MIME相关功能的实用程序类。*

     

根据RFC 2047,有一组方法可以对MIME标头进行编码和解码。请注意,通常情况下,这些方法不需要   使用 setSubject 和setRecipients等方法; JavaMail会   使用这些“更高级别”时自动编码和解码数据   方法

我不确定完全发生了什么,但它可能是某种“双重编码”的副作用。尝试删除对MimeUtility.encodeText()

的不必要的调用