zoukankan      html  css  js  c++  java
  • 使用jmail方式在服务器上发送邮件正文乱码

    声明:先说我遇到的问题。。

    1.下图是我,在服务器上发送邮件的乱码内容,中文都是问号!乱码。

    2.在本地发邮件正常,在服务器上乱码(服务器:windows英文系统)!

      

    3.先上核心代码

        try{
                // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
                String myEmailAccount = "xxxxxx@163.com";
                String myEmailPassword = "xxxxxxxxZQGTBT";// 授权码
    
                // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般格式为: smtp.xxx.com
                // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
                String myEmailSMTPHost = "smtp.163.com";
    
                // 收件人邮箱(替换为自己知道的有效邮箱)
                String receiveMailAccount = "xxxxxxxxx@qq.com";
                // 1. 创建参数配置, 用于连接邮件服务器的参数配置
                Properties props = new Properties();                    // 参数配置
                props.put("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
                props.put("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
                props.put("mail.smtp.auth", "true"); // 需要验证用户名密码
                props.put("mail.smtp.port", 25);
    
                javax.mail.Session session;
                Authentication authentication = new Authentication(myEmailAccount, myEmailPassword);
                session = Session.getDefaultInstance(props, authentication);
                session.setDebug(true);
                MimeMessage msg = new MimeMessage(session);
                msg.setFrom(new InternetAddress(myEmailAccount));
            // 添加收件人邮箱 msg.setRecipients(Message.RecipientType.TO,receiveMailAccount);
          //邮件标题
                msg.setSubject("工单提示", "UTF-8");
                msg.setContent("<h1>你好</h1>", "text/html;charset=UTF-8");
                Transport.send(msg);
            }catch (MessagingException mex){
                mex.printStackTrace();
            }

    4.以上代码,发送邮件是没有问题的,但是在服务器上发送的内容是乱码!

    5.以上只能满足文本性质的邮件,如果想要插入图片和附件,需要MimeBodyPart(一个mime消息),MimeMultipart(由一个或多个mime组成而成)两个类,如有不懂JavaMail API文档。

               MimeBodyPart  body = new MimeBodyPart();
                  MimeMultipart mp = new MimeMultipart();
                  msg.setSubject("工单提示", "UTF-8");
                  body.setContent("<h1>你好</h1>", "text/html;charset=GB2312");
                  // 指定使用base64编码
                  body.setHeader("Content-Transfer-Encoding", "base64");
                  mp.addBodyPart(body);
                  msg.setContent(mp);
                  Transport.send(msg);

    6.报错:javax.activation.UnsupportedDataTypeExcep tion: no object DCH for MIME type multipart/related;在开头补充以下代码就ok了!

            MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
                mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
                mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
                mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
                mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
                mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
                CommandMap.setDefaultCommandMap(mc);
                Thread.currentThread().setContextClassLoader(getClass().getClassLoader());

     所以综上所述:合并代码即可。

    try{
    MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
    mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
    mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
    mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
    mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
    mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
    CommandMap.setDefaultCommandMap(mc);
    Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); 
    // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
    String myEmailAccount = "xxxxxx@163.com";
    String myEmailPassword = "xxxxxxxxZQGTBT";// 授权码

    // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般格式为: smtp.xxx.com
    // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
    String myEmailSMTPHost = "smtp.163.com";

    // 收件人邮箱(替换为自己知道的有效邮箱)
    String receiveMailAccount = "xxxxxxxxx@qq.com";
    // 1. 创建参数配置, 用于连接邮件服务器的参数配置
    Properties props = new Properties(); // 参数配置
    props.put("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
    props.put("mail.smtp.host", myEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址
    props.put("mail.smtp.auth", "true"); // 需要验证用户名密码
    props.put("mail.smtp.port", 25);

    javax.mail.Session session;
    Authentication authentication = new Authentication(myEmailAccount, myEmailPassword);
    session = Session.getDefaultInstance(props, authentication);
    session.setDebug(true);
    MimeMessage msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(myEmailAccount));
            // 添加收件人邮箱
    msg.setRecipients(Message.RecipientType.TO,receiveMailAccount); 
            MimeBodyPart body = new MimeBodyPart();
    MimeMultipart mp = new MimeMultipart();
    msg.setSubject("工单提示", "UTF-8");
    body.setContent("<h1>你好</h1>", "text/html;charset=GB2312");
    // 指定使用base64编码
    body.setHeader("Content-Transfer-Encoding", "base64");
    mp.addBodyPart(body);
    msg.setContent(mp);
    Transport.send(msg);
    }catch (MessagingException mex){
    mex.printStackTrace();

     

  • 相关阅读:
    AIX 日常维护
    复制百度文库的方法
    linux free命令详解
    Oracle中Kill session的研究
    oracle scn的研究转自听海日志
    Win7无法待机(休眠)的一种可能原因
    vmstat命令详解
    winform与数据库同步更新
    CAD—Keyboard事件处理
    游戏之寻路算法
  • 原文地址:https://www.cnblogs.com/www-yang-com/p/14745209.html
Copyright © 2011-2022 走看看