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

JavaMail - Quoted printable remove . (dot) on new line

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

Content-Transfer-Encoding quoted-printable 打破了我的 body 很多行,每行 77 个字符,当下一行开始并且第一个字符是 . (点).

这方面的一个例子:

  <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>

在线我有一个 link 以 http://t.laiu... 开头,在下一行它只是删除了我的点.当用户收到电子邮件时,他得到一个 link 像 t.laiucom.ar... 而不是 t.laui.com.ar.

有人知道我该如何避免它吗?

提前致谢。

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

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

根据 rfc5321(或 rfc2821/rfc821),拾取文件的拾取服务似乎已经期望它适合 SMTP 传输,这意味着线必须加倍。 Message.writeTo 不会直接这样做,因为它不关心使用的传输,它只是将消息写入流。

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

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