JavaMail - 引用可打印删除。 (点)在新线上

时间:2015-04-23 14:42:10

标签: java javamail

我正在使用Java Mail创建电子邮件,它几乎正常工作,但我遇到了一个问题,我不知道如何解决它。

Content-Transfer-Encoding quoted-printable在很多行中打破了我的身体,每行有77个字符,当下一行开始且第一个字符是a时,就会出现问题。 (点)。

这方面的一个例子:

  <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" align=3D"center">
   <tbody>
    <tr>
     <td><br /><font color=3D"#666666" face=3D"Arial, Helvetica, sans-serif=
" size=3D"1">Lala n&atilde;o leleler lala lalalaa, <a href=3D"http://t.laiu=
com.ar/TestsTrackings/op.aspx?Osa8Br5zxNpqrv0AtVqBIiGIGG0CPNrUoxbqY7WYcGhP7=
LrlPvlBijtUAlN+b07u4cgghR7erUuf
P9PWGu7YtTkb51txcLYb9+6jzjBtWhf/L8Ai/gdZjrXfmIamviwsffMsjXa8mtnQm8n/XXkWuDw=
8
gW6EpcofAgSMsqpqmqxv85MRVG2vIFuD9v6lFD1H+dMk0RtR/cMhg/zgtjdIym6pig8sSTDT">c=
lalal lala</a>.</font><br /></td>
    </tr>
   </tbody>
  </table>

在线我有一个以 http://t.laiu .... 开头的链接,在下一行它只删除了我的点。当用户收到电子邮件时,他会输入 t.laiucom.ar ... 这样的链接,而不是 t.laui.com.ar

任何人都知道如何避免它?

提前感谢。

1 个答案:

答案 0 :(得分:1)

在评论中,您确认使用Message.writeTo创建了一个文件,并且该文件中有句点。

所以问题不在于javamail或引用的可打印编码。

根据rfc5321(或rfc2821 / rfc821),拾取文件的取件服务似乎已经预期它适合SMTP传输,这意味着行开头的句点必须加倍。 Message.writeTo不会直接执行此操作,因为它不关心已使用的传输,只是将消息写入流中。

通常,当通过javax.mail.Transport发送到SMTP时,javamail通过将输出流包装在SMTPOutputStream中来处理此问题,因此一切正常。但是直接使用Message.writeTo,您需要在较低级别操作,并且需要正确处理格式化输出,以便拾取服务自己接受它。

这意味着你需要自己用两个点替换一行开头的点。为此,您可以使用上面提到的SMTPOutputStream包装器类(但它不是公共/文档化的API),或者编写自己的流包装器来执行相同操作。或者修改您喜欢的生成数据的任何其他方式......