最近需要用到使用javamail发邮件,网上搜了下相关资料学习了下,怕以后忘记,记录在此。

1.什么是javamail  JavaMail API是读取、撰写、发送电子信息的可选包。 2.javamail开发需要依赖的jar包  mail.jar(javamail API 目前是1.4.3)-与收发有关的类都在其中    activation.jar(javabeans activation framework包 目前是1.0.2)--可以提供对Mime类型数据的支持。比如收发附件。

With the JavaBeans Activation Framework standard extension, developers who use Java technology can take advantage of standard services to determine the type of an arbitrary piece of data, encapsulate access to it, discover the operations available on it, and to instantiate the appropriate bean to perform said operation(s). For example, if a browser obtained a JPEG image, this framework would enable the browser to identify that stream of data as an JPEG image, and from that type, the browser could locate and instantiate an object that could manipulate, or view that image.

3.HelloJavaMail 使用javamail通过163邮件服务器递送一封纯文本邮件

Java代码

publicstaticvoidsendTxtMail()

{

Properties props = newProperties();

props.put("mail.smtp.host","smtp.163.com");//smtp服务器地址

props.put("mail.smtp.auth",true);//是否需要认证

/**实例化一个验证里,继承abstract Authenticator

* 实现

*   protected PasswordAuthentication getPasswordAuthentication(){

*       return new PasswordAuthentication(userName,password);

*   }

*/

MyAuthenticator myauth = newMyAuthenticator("账号","密码");

//获得一个带有authenticator的session实例

Session session = Session.getInstance(props,myauth);

session.setDebug(true);//打开debug模式,会打印发送细节到console

Message message = newMimeMessage(session);//实例化一个MimeMessage集成自abstract Message 。参数为session

try

{

message.setFrom(newInternetAddress("83378122@163.com"));//设置发出方,使用setXXX设置单用户,使用addXXX添加InternetAddress[]

message.setText("只是一个简简单单的文本内容哟!");//设置文本内容 单一文本使用setText,Multipart复杂对象使用setContent

message.setSubject("只是简简单单的文本标题哟!");//设置标题

message.setRecipient(Message.RecipientType.TO, newInternetAddress("dxt02880466@qq.com"));//设置接收方

Transport.send(message); //使用Transport静态方法发送邮件

}catch(AddressException e)

{

//此处处理AddressException异常  [The exception thrown when a wrongly formatted address is encountered.]

}catch(MessagingException e)

{

//此处处理MessagingException异常 [The base class for all exceptions thrown by the Messaging classes ]

}

}

public static void sendTxtMail()

{

Properties props = new Properties();

props.put("mail.smtp.host", "smtp.163.com"); //smtp服务器地址

props.put("mail.smtp.auth", true); //是否需要认证

/**实例化一个验证里,继承abstract Authenticator

* 实现

* protected PasswordAuthentication getPasswordAuthentication(){

*return new PasswordAuthentication(userName,password);

*}

*/

MyAuthenticator myauth = new MyAuthenticator("账号","密码");

//获得一个带有authenticator的session实例

Session session = Session.getInstance(props,myauth);

session.setDebug(true);//打开debug模式,会打印发送细节到console

Message message = new MimeMessage(session); //实例化一个MimeMessage集成自abstract Message 。参数为session

try

{

message.setFrom(new InternetAddress("83378122@163.com")); //设置发出方,使用setXXX设置单用户,使用addXXX添加InternetAddress[]

message.setText("只是一个简简单单的文本内容哟!"); //设置文本内容 单一文本使用setText,Multipart复杂对象使用setContent

message.setSubject("只是简简单单的文本标题哟!"); //设置标题

message.setRecipient(Message.RecipientType.TO, new InternetAddress("dxt02880466@qq.com")); //设置接收方

Transport.send(message); //使用Transport静态方法发送邮件

}catch(AddressException e)

{

//此处处理AddressException异常 [The exception thrown when a wrongly formatted address is encountered.]

}catch(MessagingException e)

{

//此处处理MessagingException异常 [The base class for all exceptions thrown by the Messaging classes ]

}

}

写法二:

Java代码

publicstaticvoidsendTxtMail()

{

Properties props = newProperties();

Session session = Session.getInstance(props,null);

session.setDebug(true);//打开debug模式,会打印发送细节到console

Message message = newMimeMessage(session);//实例化一个MimeMessage集成自abstract Message 。参数为session

try

{

message.setFrom(newInternetAddress("83378122@163.com"));//设置发出方,使用setXXX设置单用户,使用addXXX添加InternetAddress[]

message.setText("只是一个简简单单的文本内容哟!");//设置文本内容 单一文本使用setText,Multipart复杂对象使用setContent

message.setSubject("只是简简单单的文本标题哟!");//设置标题

message.setRecipient(Message.RecipientType.TO, newInternetAddress("dxt02880466@qq.com"));//设置接收方

/**

*使用静态方法每次发送需要建立一个到smtp服务器的链接,你可以手动控制连接状态 ,通过session获得tansport,连接到mailserver,而session就可以使用Session.getDefaultInstance(props,null);获得     */

Transport transport = session.getTransport("smtp");

transport.connect(("smtp.163.com","账号","密码");

transport.sendMessage(message, message.getAllRecipients());

transport.close();

}catch(AddressException e)

{

//此处处理AddressException异常  [The exception thrown when a wrongly formatted address is encountered.]

}catch(MessagingException e)

{

//此处处理MessagingException异常 [The base class for all exceptions thrown by the Messaging classes ]

}

}

public static void sendTxtMail()

{

Properties props = new Properties();

Session session = Session.getInstance(props,null);

session.setDebug(true);//打开debug模式,会打印发送细节到console

Message message = new MimeMessage(session); //实例化一个MimeMessage集成自abstract Message 。参数为session

try

{

message.setFrom(new InternetAddress("83378122@163.com")); //设置发出方,使用setXXX设置单用户,使用addXXX添加InternetAddress[]

message.setText("只是一个简简单单的文本内容哟!"); //设置文本内容 单一文本使用setText,Multipart复杂对象使用setContent

message.setSubject("只是简简单单的文本标题哟!"); //设置标题

message.setRecipient(Message.RecipientType.TO, new InternetAddress("dxt02880466@qq.com")); //设置接收方

/**

*使用静态方法每次发送需要建立一个到smtp服务器的链接,你可以手动控制连接状态 ,通过session获得tansport,连接到mailserver,而session就可以使用Session.getDefaultInstance(props,null);获得 */

Transport transport = session.getTransport("smtp");

transport.connect(("smtp.163.com","账号", "密码");

transport.sendMessage(message, message.getAllRecipients());

transport.close();

}catch(AddressException e)

{

//此处处理AddressException异常 [The exception thrown when a wrongly formatted address is encountered.]

}catch(MessagingException e)

{

//此处处理MessagingException异常 [The base class for all exceptions thrown by the Messaging classes ]

}

}

4.发送HTML内容的邮件    把HTML内容的邮件通过前面的代码发出去会使代码原样显示在邮件里,故需要对代码进行简单修改。其中HTML中的img需来自网上。      修改设置content的代码

Java代码

message.setContent("带颜色的HTML内容","text/html;charset=utf8");

charset用于设置内容的编码格式

message.setContent("带颜色的HTML内容","text/html;charset=utf8");

// charset用于设置内容的编码格式

5.HelloJavaMail发送带有附件的邮件

Java代码

//发送带有附件的邮件,将邮件的每个部分初始化一个bodypart。

//邮件是由多个部分组成,每个部分称为一个邮件体部分,是一个 BodyPart 类对象,

//对于 MIME 类型 邮件来讲就是 MimeBodyPart 类对象.这些邮件体包含在成为 Multipart 的容器中

publicstaticvoidsendMailWithAttachment(){

Properties props = newProperties();

Session session = Session .getDefaultInstance(props);

Message message = newMimeMessage(session);

try

{

message.setSubject("这个是带有附件的标题");

message.setFrom(newInternetAddress("83378122@163.com"));

message.setRecipient(Message.RecipientType.TO, newInternetAddress("dxt02880466@qq.com"));

Multipart multipart = newMimeMultipart();

//实例化一个bodypart用于封装内容

BodyPart bodyPart = newMimeBodyPart();

bodyPart.setContent("这个是带有附件的HTML内容","text/html;charset=utf8");

//添加bodypart到multipart

multipart.addBodyPart(bodyPart);

//每一个部分实例化一个bodypart,故每个附件也需要实例化一个bodypart

bodyPart = newMimeBodyPart();

//实例化DataSource(来自jaf),参数为文件的地址

DataSource dataSource = newFileDataSource(file.getAbsolutePath());

//使用datasource实例化datahandler

DataHandler dataHandler = newDataHandler(dataSource);

bodyPart.setDataHandler(dataHandler);

//设置附件标题,使用MimeUtility进行名字转码,否则接收到的是乱码

bodyPart.setFileName(javax.mail.internet.MimeUtility.encodeText(file.getName()));

multipart.addBodyPart(bodyPart);

message.setContent(multipart);

Transport transport = session.getTransport("smtp");

transport.connect("smtp.163.com","账号","密码");

transport.sendMessage(message, message.getAllRecipients());

transport.close();

}catch(MessagingException  e)

{}catch(UnsupportedEncodingException e){}

}

//发送带有附件的邮件,将邮件的每个部分初始化一个bodypart。

//邮件是由多个部分组成,每个部分称为一个邮件体部分,是一个 BodyPart 类对象,

//对于 MIME 类型 邮件来讲就是 MimeBodyPart 类对象.这些邮件体包含在成为 Multipart 的容器中

public static void sendMailWithAttachment(){

Properties props = new Properties();

Session session = Session .getDefaultInstance(props);

Message message = new MimeMessage(session);

try

{

message.setSubject("这个是带有附件的标题");

message.setFrom(new InternetAddress("83378122@163.com"));

message.setRecipient(Message.RecipientType.TO, new InternetAddress("dxt02880466@qq.com"));

Multipart multipart = new MimeMultipart();

//实例化一个bodypart用于封装内容

BodyPart bodyPart = new MimeBodyPart();

bodyPart.setContent("这个是带有附件的HTML内容","text/html;charset=utf8");

//添加bodypart到multipart

multipart.addBodyPart(bodyPart);

//每一个部分实例化一个bodypart,故每个附件也需要实例化一个bodypart

bodyPart = new MimeBodyPart();

//实例化DataSource(来自jaf),参数为文件的地址

DataSource dataSource = new FileDataSource(file.getAbsolutePath());

//使用datasource实例化datahandler

DataHandler dataHandler = new DataHandler(dataSource);

bodyPart.setDataHandler(dataHandler);

//设置附件标题,使用MimeUtility进行名字转码,否则接收到的是乱码

bodyPart.setFileName(javax.mail.internet.MimeUtility.encodeText(file.getName()));

multipart.addBodyPart(bodyPart);

message.setContent(multipart);

Transport transport = session.getTransport("smtp");

transport.connect("smtp.163.com","账号" , "密码");

transport.sendMessage(message, message.getAllRecipients());

transport.close();

}catch(MessagingException e)

{}catch(UnsupportedEncodingException e){}

}

结尾:

初学javamail,怕遗忘就记录在这里。有时间会详细学习下一些细节。

java jmail_JavaMail学习--使用JMail发送邮件相关推荐

  1. 学习Java的学习顺序

    学习Java的学习顺序 第一阶段(四个月) 1.j2se 面向对象-封装.继承.多态 内存的分析 递归 集合类(Set,List,Map的子类).泛型.自动打包与解包.Annotation IO流(I ...

  2. java mail 学习笔记

    JAVA MAIL 学习 笔记 电子邮件协议的简介 SMTP 简单邮件传输 SMTP是Simple Mail Transfer Protocol的简称,即简单邮件传输协议.该协议定义了邮件客户端软件和 ...

  3. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  4. java web学习项目20套源码完整版

    java web学习项目20套源码完整版 自己收集的各行各业的都有,这一套源码吃遍所有作业项目! 1.BBS论坛系统(jsp+sql) 2.ERP管理系统(jsp+servlet) 3.OA办公自动化 ...

  5. 初级java开发学习路线_成为初级全栈Web开发人员的10分钟路线图

    初级java开发学习路线 So you have started your journey into the world of web development. But what do you lea ...

  6. Java培训学习步骤有哪些

    最近几年,有很多学习java技术的同学都有过半途而废的想法,认为java零基础是很难学会的,其实出现这样的问题,最主要的原因就是学习方法有问题,下面小编整理的Java培训学习步骤,希望能够帮助大家更有 ...

  7. Java入门学习注意事项有哪些?

    想要学好java技术,做好学习规划路线和注意事项是非常重要的,尤其是零基础学员,Java涉及到的知识点非常多,我们需要制定合理的Java学习路线图,这样会事半功倍,下面小编和大家总结一下Java入门学 ...

  8. java培训学习阶段步骤讲解

    目前的培训机构行业比较热门的IT技术就是java技术,java技术在近几年广受关注,java所涉及的技术知识也比较广泛,下面小编就为大家详细的介绍一下java培训学习多有哪几个阶段? java培训学习 ...

  9. Java多线程学习处理高并发问题

    在程序的应用程序中,用户或请求的数量达到一定数量,并且无法避免并发请求.由于对接口的每次调用都必须在返回时终止,因此,如果接口的业务相对复杂,则可能会有多个用户.调用接口时,该用户将冻结. 以下内容将 ...

  10. 超硬核全套Java视频教程(学习路线+免费视频+配套资料)

    文内福利,扫码免费领取 Hello,各位锋迷们,我是小千.很多学习Java的小伙伴都在找的全套免费java视频教程,这里全都有,资料齐全,拿来吧你! 零基础学Java的学习路线图是怎样的?! 曾经写过 ...

最新文章

  1. asp.net 2.0中用GRIDVIEW插入新记录
  2. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入
  3. 25个你可能不知道的Linux真相
  4. 欧拉函数和最大公约数的组合应用
  5. TP的依赖注入:将类类型的对象作为参数注入到当前类中
  6. POJ 3259 Wormholes(bellman_ford,判断有没有负环回路)
  7. 【Java定时任务调度工具】Timer
  8. RHEL 7中防火墙的配置和使用
  9. matlab 警告(warning)、错误(error)、异常(exception)与断言(assert)
  10. 计算机主机技术标准规范,B级机房技术规范要求
  11. 计算机mac地址设置路由器,MAC地址修改教程
  12. 03 高等数学专题——多元函数微积分
  13. iOS中微信语音动画
  14. 【内网穿透服务器】利用云服务器+FRP实现内网穿透并远程连接服务器
  15. 崩坏3桌面版怎么更换服务器,崩坏3【桌面版】安装常见问题解决办法
  16. 配置数据源失败:未指定“url”属性,无法配置嵌入的数据源。
  17. H3C交换机如何查环路
  18. #ASM 翻译系列第三十二弹:ASM INTERNAL Find block in ASM
  19. [技美CG]Unity3D复刻UnityShader 之 ShaderToy - Bubbles
  20. ListView 单条item刷新

热门文章

  1. ZigBee-CC2530单片机 - 按键控制跑马灯的启停
  2. 碳足迹计算器ios版总结
  3. linux下串口(serial)和串口驱动
  4. 如何用Python下载百度指数的数据
  5. 实验一 单片机 绘制原理图
  6. ACM解题总结——HihoCoder1199 (微软笔试题)
  7. matlab对控制系统进行时域和频域联合分析
  8. 《信号与系统》解读 第3章 强大的傅里叶时域频域分析工具-1:深入理解信号的时域与频域,需要从熟悉的声音信号入手
  9. 几张图,简单弄懂pcb生产工艺流程!
  10. solidword入门使用