JavaMail发邮件以及邮件乱码之解决

JavaMail 发送的邮件附件名乱码 情景还原 同事收到系统发出的一封邮件,邮件里的附件名称本该是【模板】周汇报 (2).docx却显示成了=UTF-8Q=E3=80=90...=UTF-8Q(2).docx= 问题探究 第一反应是附件编码的问题,于是把: MimeMessageHelper messageHelper = new MimeMessageHelper(message, true); messageHelper.addA... 阅读详情

JavaMail是Java平台常用的功能,这里记录下发邮件的功能,以及发出的邮件在接收时的编码问题。

 

1.jar包:mail.jar,425KB

2.代码:红色部分解决发件人名称和邮件主题的乱码问题

 private String fromName;
 private String username;
 private String password;
 private String smtpServer;
public void sendMail(InternetAddress[] addrArrTO, String subject,
   String content,File [] lstAttach) throws AddressException, MessagingException
 {
  // java.security.Security
  // .addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  Properties props = new Properties();
  props.put("mail.smtp.auth", "true");
  props.put("mail.smtp.host", smtpServer);
  // 获得邮件会话对象
  Session session = Session.getInstance(props);
  session.setDebug(true);

  Transport transport = (SMTPTransport) session.getTransport("smtp");
  transport.connect(null, username, password);

  MimeMessage mimeMsg = new MimeMessage(session); // 创建MIME邮件对象
  try
  {
   mimeMsg.setFrom(new InternetAddress(username, MimeUtility
     .encodeText(fromName, "gb2312", "B")
));// 发件人邮件地址以及名称
   mimeMsg.setSubject(MimeUtility.encodeText(subject, "gb2312", "B"));// 主题
  }
  catch (UnsupportedEncodingException e)
  {
   mimeMsg.setFrom(new InternetAddress(username));// 发件人
  }

  if (addrArrTO.length > 0)
  {
   mimeMsg.setRecipients(Message.RecipientType.TO, addrArrTO);// 收件人
  }

  mimeMsg.setSentDate(new Date());// 发送日期
  // 正文
  Multipart mp = new MimeMultipart();
  BodyPart bp = new MimeBodyPart();
  bp.setContent("" + content, "text/html;charset=GB2312");
  mp.addBodyPart(bp);
  
  // 附件
  if (lstAttach.size() > 0)
  {
   for (File file : lstAttach)
   {
   BodyPart bpAttach = new MimeBodyPart();
   FileDataSource fileds = new FileDataSource(file);
   bpAttach.setDataHandler(new DataHandler(fileds));
   bpAttach.setFileName(fileds.getName());
   mp.addBodyPart(bpAttach);
   }
  }
  mimeMsg.setContent(mp);
  mimeMsg.saveChanges();

  transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
  transport.close();
 }

 

 

3.正文带图片

有两种方式:

一:将图片放在一个可以引用的服务器上,邮件内容引用该图片的URL。

import javax.mail.*;
import javax.mail.internet.*;

import java.util.Properties;

class SimpleMail1 {
    public static void main(String[] args) throws Exception{
        System.out.println("Sending mail...");
        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", "smtp");
        props.setProperty("mail.host", "smtp.mymailserver.com");
        props.setProperty("mail.user", "myuser");
        props.setProperty("mail.password", "mypwd");

        Session mailSession = Session.getDefaultInstance(props, null);
        mailSession.setDebug(true);
        Transport transport = mailSession.getTransport();

        MimeMessage message = new MimeMessage(mailSession);
        message.setSubject("HTML  mail with images");
        message.setFrom(new InternetAddress("me@sender.com"));
        message.setContent
          ("<h1>This is a test</h1>" 
           + "<img src=/"http://www.rgagnon.com/images/jht.gif/">", 
           "text/html");
        message.addRecipient(Message.RecipientType.TO,
             new InternetAddress("you@receiver.com"));

        transport.connect();
        transport.sendMessage(message,
            message.getRecipients(Message.RecipientType.TO));
        transport.close();
        }
}
二:将图片作为邮件附件,邮件正文引用该附件。
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

import java.util.Properties;

class SimpleMail2 {
    public static void main(String[] args) throws Exception{
        System.out.println("Sending mail...");
        Properties props = new Properties();
        props.setProperty("mail.transport.protocol", "smtp");
        props.setProperty("mail.host", "smtp.mymailserver.com");
        props.setProperty("mail.user", "myuser");
        props.setProperty("mail.password", "mypwd");

        Session mailSession = Session.getDefaultInstance(props, null);
        mailSession.setDebug(true);
        Transport transport = mailSession.getTransport();

        MimeMessage message = new MimeMessage(mailSession);
        message.setSubject("HTML  mail with images");
        message.setFrom(new InternetAddress("me@sender.com"));
        message.addRecipient(Message.RecipientType.TO,
             new InternetAddress("you@receiver.com"));

        //
        // This HTML mail have to 2 part, the BODY and the embedded image
        //
        MimeMultipart multipart = new MimeMultipart("related");

        // first part  (the html)
        BodyPart messageBodyPart = new MimeBodyPart();
        String htmlText = "<H1>Hello</H1><img src=/"cid:image/">";
        messageBodyPart.setContent(htmlText, "text/html");

        // add it
        multipart.addBodyPart(messageBodyPart);
        
        // second part (the image)
        messageBodyPart = new MimeBodyPart();
        DataSource fds = new FileDataSource
          ("C://images//jht.gif");
        messageBodyPart.setDataHandler(new DataHandler(fds));
        messageBodyPart.setHeader("Content-ID","<image>");

        // add it
        multipart.addBodyPart(messageBodyPart);

        // put everything together
        message.setContent(multipart);

        transport.connect();
        transport.sendMessage(message,
            message.getRecipients(Message.RecipientType.TO));
        transport.close();
        }
}
javamail发送邮件 主题乱码解决 第90行,setSubject("") 立即下载

相关推荐

【头歌educoder】离散数学实训参考-第二章-关系-part1-关系基础

python实现离散数学-关系基础-二元关系

wander_alice的博客 8463

解决JavaMail发送邮件,主题乱码现象

<br />在项目中使用javamail发送邮件总是出现主题乱码现象,而且主题使用了Base64进行了编码,依旧如故。代码如下:<br />// 根据session创建一个邮件消息<br />   Message mailMessage = new MimeMessage(sendMailSession);<br />   // 创建邮件发送者地址<br />   Address from = new InternetAddress(mailInfo.getFromAddress());<br />   /

wang12的专栏 1万+

SHP转TXT、TXT转SHP工具(附工具下载链接)

关于TXT,可以选择整个图层生成一个TXT。也可以勾选“每个地块单独存TXT”,然后选择一个字段,根据字段值,给每个地块生成一个TXT文件。支持选择和数据框一样的坐标系,也可以选择一个图层,工具会采用和这个图层一样的坐标系。1、TXT数据支持输入单个或者多个TXT文件,也可以直接选择TXT所在的文件夹。所有的TXT数据都生成到一个矢量数据图层。关于这一行的内容,可以在地块坐标行设置中进行设置。其他:①面节点闭合:勾选,则回到起点。属性描述:可以直接复制粘贴进来,也可以直接修改。也可以改为任意字母。

坐听风雨 4296

springboot中javaMail中附件标题还有特殊字符时乱码

附件标题使用 "【提醒】-扣费失败汇总-2019-03-21.xls"时,接收的邮件中会出现乱码 解决方案,对于title使用base64编码,代码如下: String title="【提醒】-扣费失败汇总-2019-03-21.xls"; mimeMessageHelper.addAttachment(MimeUtility.encodeText(title, null, "B"), i...

qustmomo的博客 944

如何用谷歌插件Apollo.io高效开发客户?手把手教你避开常见坑点

本文详细介绍了如何利用谷歌插件Apollo.io高效开发外贸客户,包括核心功能解析、免费额度最大化利用策略、多插件协同技巧以及常见陷阱规避方法。通过Apollo.io的智能匹配算法和庞大数据库,外贸从业者可以精准锁定目标客户,提升开发效率。

banana的博客 885

深入解析Sigma Delta调制器 —— 从电流采样到数字信号处理的完整链路

本文深入解析了Sigma Delta调制器的工作原理与应用。通过剖析过采样、噪声整形与负反馈核心机制,并结合AMC1306等实例,详细阐述了从电流采样到数字信号处理的完整链路。该技术凭借其高精度和高抗干扰能力,在ADC、电流测量及音频处理等领域发挥着关键作用。

ttt77的博客 643

使用javamail发送包含八位验证码的邮件(完美解决中文乱码问题)

1. 发送邮件生成验证码的类 import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; impo...

kevin_zhao_zl的博客 2381

HC32F460 SPI DMA 实现高效TFT屏幕刷新的实战解析

本文针对HC32F460 MCU驱动TFT屏幕时刷新卡顿的问题,深入解析了SPI DMA技术的实战应用。通过对比传统查询模式与DMA模式的性能数据,详细阐述了如何配置SPI与DMA资源、构建核心驱动框架,并提供了避坑指南与进阶优化思路,最终实现高效、流畅的屏幕刷新,显著降低CPU占用率。

weixin_29163797的博客 151

Java发送邮件,附件乱码问题

Java发送邮件,附件乱码问题

qq_43502688的博客 2892

IAR安装成功的关键:STM32设备支持文件导入方法

IAR安装常卡在设备支持缺失这一步——尤其对STM32新手,没导入对应芯片包,编译直接报错。实测发现,必须通过IAR的Tools→Options→IDE→Configuration→Device Support手动加载STM32设备支持文件,否则新建工程时连芯片型号都选不到。IAR安装是否顺利,往往就差这一步。

weixin_42527589的博客 680

【电击防护篇】电击防护技术详解:从人体效应到接地系统全解析

本文系统讲解了电击防护的关键知识,包括电流对人体的影响(如30mA是心室颤动阈值)、人体电阻特性(700Ω-6100Ω)以及电气接触防护措施。重点分析了TT、TN和IT三大接地系统的结构特点与应用场景,强调TN-S系统最安全,IT系统供电连续性最佳。详细介绍了漏电保护器(RCD)的工作原理与选型指南,建议人身防护选用30mA高灵敏度RCD。文章通过对比表总结三大系统的安全性、成本及适用场景,为电气安全设计提供实用参考。

2301_81299416的博客 1742

spring发送Email-验证码-图片-附件-解决乱码

本文简要介绍如何通过Spring框架的支持,通过QQ邮箱来发送邮件,包括简单文本,附件、以及内联图片、HTML以及HTTP图片。 spring-context-support很早就内置支持邮件发送。 当然, 官方文档明确指出, 需要依赖 JavaMail 这个库。 在这个年代, 我们很少自己搭建 smtp 服务器来发送邮件, 一般都是使用邮件提供商的服务。 例如 QQ邮箱, 企业邮箱...

铁锚的优快云博客 7416

家用电器维修必备:手把手教你用双向可控硅改造单相电机调速(附电路图)

本文提供了一份详细的家用电器维修指南,手把手教你如何利用双向可控硅为核心元件,为单相交流电机(如风扇、排气扇)实现平滑的无级调速改造。内容涵盖核心原理、安全须知、元件选型(如BT136、DB3)、电路图解析、分步搭建教程以及常见故障排查方法,旨在帮助维修爱好者和DIY用户安全、成功地完成这一实用且富有成就感的项目。

read5的博客 835

java foxmail 附件_spring javamail发邮件附件中文名乱码的解决方案总结

用spring javamial发邮件的时候,附件中文名乱码的解决方法,大家熟知的应该是MimeUtility.encodeWord(),没错,使用这个方法在foxmail客户端上收邮件中文附件名可以正常展现了,但在个别的outl express 中, 还是乱码.反复切换outlook的编码方式,发现设置为"GB2312"的时候,附件名的中文不乱码了.但邮件主题,正文却乱了. 看来这个outloo...

weixin_30607173的博客 711

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

spring javamail发邮件附件中文名乱码的解决方案总结

用spring javamial发邮件的时候,附件中文名乱码的解决方法,大家熟知的应该是MimeUtility.encodeWord(),没错,使用这个方法在foxmail客户端上收邮件中文附件名可以正常展现了,但在个别的outl express 中, 还是乱码.反复切换outlook的编码方式,发现设置为"GB2312"的时候,附件名的中文不乱码了.但邮件主题,正文却...

weixin_33681778的博客 661

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java 发邮件 乱码_JavaMail发送中文邮件乱码的解决 | 学步园

我们的程序经常会出现这样一个问题,在WinXp下测试是正常的,而到了服务器(Linux操作系统)上就出现这个问题。1、 由于邮件我写的程序的邮件主题是写在配置文件(.properties)中的,再通过native2ascii把中文邮件主题从本地码(简体中文Wind Xp 是GBK)转换为Unicode编码。而Java程序读取properties配置文件内容时,是根据操作的编码方式来读取的,这...

weixin_39580041的博客 915

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

javamail 获取邮件源码_关于JavaMail,我遇上的那些史前巨坑...(建议收藏)

说到乱码,很多人都遇到过,“哎呀,你这个编码是不是UTF-8!”,“你这个会不会操作系统不一致导致的?”,“肯定是两边编码不一致”。不过我们今天说的问题,还真不是这个问题导致的。问题用JavaMail 发邮件,带上附件,闪电邮客户端收到后,附件名有时乱码,有时非乱码。查看Java端代码:String name = MimeUtility.encodeText(name, null) + ".xls...

weixin_32371243的博客 245

javaMail杂谈

对于一个小的组件,我想多数人都是通过从接触到使用到熟练的过程。 大约在去年,记得刚入公司不久,公司使用的是内部和外部邮箱两种,无聊之时总想发些无聊的邮件给同事(搞些恶作剧,XDJM别说我BT哦),虽然网上有些软...

conglan7945的博客 93

关于javamail在linux服务器上发送乱码的解决方法,搜了N多资料

不写那么多了,直接把源码放上来吧 [code="java"]public static void send(Email email) { try { Properties p = new Properties(); // Properties p = // System.getProperties(); p.put("mail.smtp...

tiwsonchen的博客 300

javamail发邮件乱码

<br />1.邮件标题乱码<br />邮件标题的乱码很好解决,使用MimeUtility类即可进行转换。代码如下:<br /> <br />mailMessage.setSubject(MimeUtility.encodeText(mailInfo.getSubject(),MimeUtility.mimeCharset("gb2312"), null));<br />这里的gb2312也可以改为utf-8。<br /> <br /> <br />2.英文windows邮件正文乱码<br />在我本机上邮

黄立 2834

非典型 JavaMail 邮件附件名乱码问题

------------  记一个JavaMail 附件乱码的问题      说到乱码,很多人都遇到过,“哎呀,你这个编码是不是UTF-8!”,“你这个会不会操作系统不一致导致的?”,“肯定是两边编码不一致”。不过我们今天说的问题,还真不是这个问题导致的。 问题    用JavaMail 发邮件,带上附件,闪电邮客户端收到后,附件名有时乱码,有时非乱码

wty19的专栏 6741

java 邮件发送乱码_JavaMail发送邮件(附实例及乱码问题解决)

下边是我写的一个mailTest的类实现。亲测有效;这里是以163邮箱为例,文章的后边会记录几个我本人遇到的问题。也希望可以帮助到你;package com.utils;import javax.mail.Address;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.PasswordAuthe...

weixin_33623134的博客 1289

javamail发邮件主题乱码问题

Javamail发送邮件,在本地主机上运行正常,将项目部署到服务器之后邮件主题出现中文乱码,网上找到解决方案如下: 将msg.setSubject(subject);改为:     msg.setSubject(MimeUtility.encodeText(subject,MimeUtility.mimeCharset("gb2312"), null)); 完美解决。  ...

www.wangpeng.cn 1479

springBoot发送邮件附件名称乱码的解决

问题 场景一 场景二 解决 //java mail发邮件是附件名过长默认会被截断,附件名显示【tcmime.2475.2828.3041.bin】,主动设为false可正常显示附件名 properties.setProperty("mail.mime.splitlongparameters", "false"); //这行解决文件名称乱码 String newFileName = MimeUtility.encodeWord(attachmentName,"utf-8","B"); 完整源码 p

itdragons的博客 3216

javamail 可以发邮件,发附件(附件大小可以超过2M),抄送多人,抄送密件,定时发送,消除乱码[附javamail的jar包]...

突然要用到发邮件,今天看了下javamail,从网上找了个例子,自己改了改,调通了,放到这里,以便今后使用 :arrow: [color=blue]除原有功能外,增加定时发送的功能,增加消除邮件中的乱码解决方法,即通过服务器自动发送时,邮件标题,内容,发件人,收件人不会出现乱码,已经测试过,没问题[/color] :arrow: /** * 除原有功能外,增加定时发送的功能 *...

左看右看上下看 的博客 1202

mac用outlook发邮件乱码_剪不断理还乱的乱码-部分邮件系统的兼容性问题

说到乱码,很多人都遇到过,“哎呀,你这个编码是不是UTF-8!”,“你这个会不会操作系统不一致导致的?”,“肯定是两边编码不一致”。不过我们今天说的问题,还真不是这个问题导致的。问题用JavaMail 发邮件,带上附件,闪电邮客户端收到后,附件名有时乱码,有时非乱码。查看Java端代码:String name = MimeUtility.encodeText(name, null) + ".xls...

weixin_26963033的博客 949
上一篇: 几个jquery的常用功能
下一篇: jsp+jstl实现分页
focusforce
博客等级 码龄19年 50粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值