`
melland
  • 浏览: 73143 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

邮件发送时的乱码问题

    博客分类:
  • JAVA
阅读更多
前不久在我所在的项目中做了一个发送html邮件模板的升级包,选一个人群,选一个模板,然后发送。
很简单的一个小功能,可是在coding的时候还是遇到了一些小问题。其中最主要的一个问题,就是模板文件本身的字符集的问题。
       
Properties props = System.getProperties();
        Session session;

        props.put("mail.smtp.host", strSMTPAdress);
        props.put("mail.smtp.port", strSMTPPort);

        if (strSenderPassword == null) {
            props.put("mail.smtp.auth", "false");
            session = Session.getDefaultInstance(props);
        } else {
            props.put("mail.smtp.auth", "true");
            MyAuthenticator myauth = new MyAuthenticator(strSenderEmail, strSenderPassword);
            session = Session.getDefaultInstance(props, myauth);
        }

        MimeMessage message = new MimeMessage(session);

上面的代码创建一个MimeMessage,再简单不过的事情了。
然后根据模板名称获取html文件内容,接着我做了这样一件事情,把模板内容转成gb2312编码。
try{
            temp = IOUtils.toString(IOUtils.toInputStream(temp, "gb2312"));
            // temp = new String(temp.getBytes("gb2312"),"ISO-8859-1");
        } catch (IOException e){
            logger.error("模板读取后,string格式转换时出错.", e);
            return null;
        }设置邮件正文:
   message.setText(temp, "gb2312");
message.setDataHandler(new DataHandler(temp, "text/html;charset=gb2312"));

在邮件正文中,查找<title>XXX</title>,title的value就作为邮件的主题。这时候,就出问题了。
我是这么写的:
message.setSubject("=?GB2312?B?" + enc.encode(title.getBytes()) + "?=");

选了几个邮件模板也测试过,当时也没发现问题。可是上线后,用户使用的时候说主题出现乱码。让用户把模板发过来,本地再进行测试,居然发送后的邮件正文格式,都变成了纯文本。
使用下面的设置主题的方式后,就正常了:
message.setSubject(title);

暂时还没有深入的去查找原因,直觉上是认为和html文件本身的编码有关。
分享到:
评论

相关推荐

    KETTLE 发送邮件乱码修正

    我当前调试的是kettle 5.4.0.1版本,修复job中发送邮件时候中文乱码问题: 替换 data-integration\lib\kettle-engine-5.4.0.1-130.jar 这个jar包下 data-integration\lib\kettle-engine-5.4.0.1-130.jar\org\...

    javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码

    在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将详细探讨这些问题的原因及相应的解决方案。 ##...

    TD发邮件乱码问题

    - **使用第三方插件:** 如果TD内置功能无法满足需求,可以考虑使用第三方插件来增强TD的邮件发送能力。 #### 总结 通过以上分析与操作,我们可以有效地解决TD 7.6版本在发送邮件时出现的乱码问题。这对于提高测试...

    C#邮件收发,收件有点乱码

    System.Net.Mail命名空间提供了SmtpClient和MailMessage类来处理SMTP协议的邮件发送。在创建MailMessage对象时,我们可以设置Subject(主题)和Body(正文)的编码,例如使用Unicode(UTF-8)编码,以确保支持大多数...

    基于python发送邮件的乱码问题的解决办法

    在Python中发送带有中文内容的邮件时,可能会遇到乱码问题。这主要是因为编码不一致导致的。在本文中,我们将探讨如何解决Python发送邮件时出现的乱码问题。 首先,我们要了解邮件编码的基本概念。电子邮件标准规定...

    perl读取excel内容,并发送html邮件!中文不乱码

    perl读取excel内容,并发送html邮件!中文不乱码,直接下载可用,只需要改一下文件路径,这是已经上生产的脚本

    解决邮件乱码问题

    PHPMailer是一个流行的PHP邮件发送类库,它允许开发者通过SMTP协议发送邮件,支持HTML内容和附件。当涉及到字符编码问题时,PHPMailer提供了设置邮件内容编码的方法,以确保不同邮件客户端能正确解析非ASCII字符,...

    javamail发送邮件 主题乱码解决

    第90行,setSubject("")

    邮件乱码处理

    以Outlook为例,当遇到邮件乱码时,可以尝试以下步骤解决问题: 1. **检查邮件头信息**:首先查看邮件头信息中的`Content-Type`和`Content-Transfer-Encoding`字段是否正确。 2. **调整编码设置**:根据邮件头信息...

    QT5 实现TCP通信 客户端与服务端,互相发送字符串;解决乱码问题

    本教程将详细介绍如何在QT5中建立TCP客户端和服务端,并解决中文乱码问题。 **一、QT5中的TCP通信** QT5提供了QNetworkAccessManager和QTcpSocket等类来处理TCP通信。QTcpSocket类是用于进行TCP连接的基础,它可以...

    邮件乱码解决办法

    1. **检查邮件编码**: 邮件发送时,应确保正确设置邮件的字符编码。大多数现代邮件客户端默认使用UTF-8编码,因为它能支持更多的语言和特殊字符。如果发送方的邮件客户端设置为其他编码,可能会导致接收方收到乱码。...

    Navicat for MySql 导入EXCEL中文乱码问题解决

    在使用Navicat for MySQL工具进行数据导入时,经常会出现中文乱码的问题,尤其是在处理Excel文件时更为常见。这种现象不仅影响数据的正确性,还可能导致后续的数据分析和处理出现错误。因此,有效地解决Navicat for ...

    字体-用于处理发送邮件时,缺少字体导致乱码的问题。

    在电子邮件的日常使用中,有时会遇到一个常见问题:当收件人打开一封邮件时,如果他们的设备上缺少用于渲染邮件中的某些特定字体,邮件内容可能会显示为乱码或者无法正常阅读。这个问题主要源于字体的不兼容性和可用...

    Java自带的Java-mail框架 163 邮件发送,支持多附件,没中文乱码

    `Transport`用于实际的邮件发送。 2. **配置SMTP服务器**: 发送邮件时,需要设置SMTP服务器地址和端口号,例如对于163邮箱,SMTP服务器通常是smtp.163.com,端口可能是465或587,使用SSL/TLS加密。此外,还需要...

    ASP.NET MVC 发送邮件,支持多个邮箱格式。

    - **编码问题**:邮件中的文本部分应使用合适的编码方式,如 UTF-8,以避免乱码问题。 - **邮件格式**:可以通过设置 `IsBodyHtml` 为 `true` 来发送 HTML 格式的邮件,使得邮件更美观。 - **异步处理**:发送邮件时...

    C++ Linux 邮件发送库 jwSMTP

    2. **解决中文乱码问题**:在处理非ASCII字符,如中文字符时,SMTP库可能会遇到编码问题导致乱码。jwSMTP通过正确处理字符编码,如UTF-8,确保邮件中的中文字符能够正确显示,避免了乱码问题,这对于国际化的邮件...

    Delphi XE10 QQ 163 发送邮件

    本篇将深入探讨如何利用Delphi XE10与QQ 163邮箱服务器进行邮件发送,并解决在发送过程中可能出现的中文乱码问题。 首先,我们要理解SMTP(Simple Mail Transfer Protocol)协议,这是互联网上用于发送电子邮件的...

    java socket发送SMTP邮件,支持SSL,支持发附件,抄送且发送的邮件标题内容都无乱码!

    java socket发送SMTP邮件,支持SSL,支持发附件,抄送且发送的邮件标题内容都无乱码!

    php发邮件,屏蔽乱码

    echo '邮件发送失败: ' . $mail-&gt;ErrorInfo; } else { echo '邮件已发送'; } ``` **多部分编码**:对于包含HTML、文本和附件的复杂邮件,PHPMailer支持多部分编码(MIME)。这可以确保邮件在不同客户端上显示一致...

    mailer(简单邮件发送)

    在编程时,确保正确编码和解码邮件内容,以避免乱码问题。 9. **邮件队列**:对于大量邮件发送,使用邮件队列是一种有效的方法。邮件会被存储在一个队列中,按顺序发送,这样可以防止短时间内大量请求对服务器造成...

Global site tag (gtag.js) - Google Analytics