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ã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),或者编写您自己的流包装器来执行相同的操作。或者任何其他方式来修改您喜欢的生成数据...
我正在使用 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ã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),或者编写您自己的流包装器来执行相同的操作。或者任何其他方式来修改您喜欢的生成数据...