JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例

使用Javamail发送邮件,必需的jar包(请下载javamail的源文件,官方下载页:http://www.oracle.com/technetwork/java/javamail/index-138643.html):
mailapi.jar。定义了收发邮件所使用到的接口API;
smtp.jar。包含了发送邮件使用到的类;
pop3.jar。包含了收邮件使用到的类;
我们通常发送邮件使用的协议是smtp协议,接受邮件使用的协议是pop3协议。或者,我们直接将mail.jar加入到工程,这个jar包里边包含了java收发邮件所有的接口和类。

常用的类:
1.     javax.mail.Session;                                                    -------->保存连接服务器所需要的信息;
2.     javax.mail.Message;                                                  -------->邮件体,保存邮件的内容;
3.     javax.mail.Transport;                                                 -------->发送邮件的载体
4.     javax.mail.internet.InternetAddress;                         -------->邮件的地址信息

发送邮件

下边,我先列出使用Java发送邮件的最简单的一个小测试示例:

import java.util.Properties; import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; /** * * QQ(mail.qq.com):POP3服务器(端口995)SMTP服务器(端口465或587)。 * */
public class Demo1 { /** * @param args * @throws MessagingException */public static void main(String[] args) throws MessagingException { String sendUserName = "wangxiangpan@126.com"; String sendPassword = "pwd"; Properties properties = new Properties(); properties.setProperty("mail.smtp.auth", "true");//服务器需要认证 properties.setProperty("mail.transport.protocol", "smtp");//声明发送邮件使用的端口
      Session session = Session.getInstance(properties); session.setDebug(true);//同意在当前线程的控制台打印与服务器对话信息
      Message message = new MimeMessage(session);//构建发送的信息 message.setText("你好,我是Champion.Wong!");//信息内容 message.setFrom(new InternetAddress("wangxiangpan@126.com"));//发件人
      Transport transport = session.getTransport(); transport.connect("smtp.126.com", 25, sendUserName, sendPassword);//连接发件人使用发件的服务器 transport.sendMessage(message, new Address[]{new InternetAddress("492134880@qq.com")});//接受邮件
    transport.close(); } } 

一般的,我们使用Authenticator把用户名和密码封装起来,不透明!所以:

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; import junit.framework.TestCase; /** * javamail 发送邮件 * @author Champion Wong * Message.addRecipient(Message.Recipient recipient, Address address); 发邮件的时候指定收件人和收件人的角色 * Message.RecipientType.TO 收件人 * Message.RecipientType.CC 抄送,即发邮件的时候顺便给另一个人抄一份,不用回复!但是,上边的收件人可以看到你都抄送给了谁 * Message.RecipientType.BCC 暗送,也是发邮件的时候顺便给另一个人暗发一份,但是,不同于上边的是,收件人不能看到你都暗送给了谁 * */
public class Demo2 extends TestCase { private static final String sendUserName = "wangxiangpan@126.com";// 发送邮件需要连接的服务器的用户名 private static final String sendPassword = "pwd";// 发送邮件需要连接的服务器的密码 private static final String sendProtocol = "smtp";// 发送邮件使用的端口 private static final String sendHostAddress = "smtp.126.com";// 发送邮件使用的服务器的地址 public void test() throws AddressException, MessagingException { Properties properties = new Properties(); properties.setProperty("mail.smtp.auth", "true");// 服务器需要认证 properties.setProperty("mail.transport.protocol", sendProtocol);// 声明发送邮件使用的端口 properties.setProperty("mail.host", sendHostAddress);// 发送邮件的服务器地址
  Session session = Session.getInstance(properties, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(sendUserName, sendPassword); } }); session.setDebug(true);//在后台打印发送邮件的实时信息
  Message message = new MimeMessage(session); message.setFrom(new InternetAddress("wangxiangpan@126.com")); message.setSubject("Demo2JavaCode发送邮件测试,采用Authenticator");// 设置主题
    message.setRecipients(Message.RecipientType.TO, InternetAddress .parse("492134880@qq.com,wangxiangpan@126.com"));// 发送
    message.setRecipients(Message.RecipientType.CC, InternetAddress .parse("msn_wangxiangpan@hotmail.com"));// 抄送
    message .setContent( "<span style="font-size:20px; color:#FFCCFF" mce_style="font-size:20px; color:#FFCCFF">如果您看到,证明测试成功了!</span>", "text/html;charset=gbk"); Transport.send(message);//发送邮件
  }
} 

我们发送一个比较复杂的邮件,包括附件,图文:

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility; /** * * @author Administrator Mr XP.Wang * MimeMultipart 一般电子邮件的容器是Multipart,定义了增加及删除电子邮件各部分内容的方法, *        但是其是抽象类,需要其子类MimeMultipart来时用MimeMessage对象 * MimeBodyPart 是BodyPart具体用于mimeMessage的一个子类,MimeBodyPart对象代表一个 *       mimeMultipart对象的每一个部分 * MimeUtility.encodeText(String cn)用于解决邮件中的头部信息中中文的乱码问题 * */
public class Demo3_test { public static void main(String[] args) throws Exception { Properties properties = new Properties(); properties.setProperty("mail.smtp.auth", "true");// 服务器需要认证 properties.setProperty("mail.transport.protocol", "smtp");// 声明发送邮件使用的端口 properties.setProperty("mail.host", "smtp.126.com");// 发送邮件的服务器地址
      Session session = Session.getInstance(properties, new Authenticator() { String sendUserName = "wangxiangpan@126.com"; String sendPassword = "pwd"; protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(sendUserName, sendPassword); } }); session.setDebug(true); MimeMessage msg = new MimeMessage(session);// 声明一个邮件体 msg.setFrom(new InternetAddress("/""+MimeUtility.encodeText("Mr XP.Wang")+"/"<wangxiangpan@126.com>")); msg.setSubject("这是我的第一份复杂邮件");//设置邮件主题 msg.setRecipients(MimeMessage.RecipientType.TO, InternetAddress.parse(MimeUtility.encodeText("王翔攀")+"<wangxiangpan@126.com>,"+MimeUtility.encodeText("三毛")+"<492134880@qq.com>")); MimeMultipart msgMultipart = new MimeMultipart("mixed");// 标明邮件的组合关系,混合的关系 msg.setContent(msgMultipart);// 设置邮件体
      MimeBodyPart attch1 = new MimeBodyPart();// 附件1 MimeBodyPart attch2 = new MimeBodyPart();// 附件2 MimeBodyPart content = new MimeBodyPart();// 邮件的正文,混合体(图片+文字) // 将附件和正文设置到这个邮件体中
    msgMultipart.addBodyPart(attch1); msgMultipart.addBodyPart(attch2); msgMultipart.addBodyPart(content); // 设置第一个附件 DataSource ds1 = new FileDataSource("F:/ACCP5.0/文件/ssh配置.txt");// 指定附件的数据源 DataHandler dh1 = new DataHandler(ds1);// 附件的信息 attch1.setDataHandler(dh1);// 指定附件 attch1.setFileName("ssh.txt"); // 设置第二个附件 DataSource ds2 = new FileDataSource("resource/48.jpg");// 指定附件的数据源 DataHandler dh2 = new DataHandler(ds2);// 附件的信息 attch2.setDataHandler(dh2);// 指定附件 attch2.setFileName("48.jpg"); //设置邮件的正文 MimeMultipart bodyMultipart = new MimeMultipart("related");//依赖关系 content.setContent(bodyMultipart);//指定正文 MimeBodyPart htmlPart = new MimeBodyPart(); MimeBodyPart gifPart = new MimeBodyPart(); bodyMultipart.addBodyPart(htmlPart); bodyMultipart.addBodyPart(gifPart); DataSource gifds = new FileDataSource("resource/48.jpg");//正文的图片 DataHandler gifdh = new DataHandler(gifds); gifPart.setHeader("Content-Location", "http://mimg.126.net/logo/126logo.gif"); gifPart.setDataHandler(gifdh);//设置正文的图片
      htmlPart.setContent("我只是来打酱油的,这是我的形象照!<img src="/" mce_src="/""http://mimg.126.net/logo/126logo.gif/">", "text/html;charset=gbk");//设置正文文字
      msg.saveChanges();//保存邮件 //将邮件保存成文件 OutputStream ops = new FileOutputStream("C:/Users/Administrator/Desktop/test.eml"); msg.writeTo(ops); ops.close(); Transport.send(msg); } } 

收取邮件
示例:Rose 收取最近一封邮件。

import java.util.Date;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;public class FetchMail {public static void main(String[] args) {String protocol = "pop3";boolean isSSL = true;String host = "pop.163.com";int port = 995;String username = "rose@163.com";String password = "rose";Properties props = new Properties();props.put("mail.pop3.ssl.enable", isSSL);props.put("mail.pop3.host", host);props.put("mail.pop3.port", port);Session session = Session.getDefaultInstance(props);Store store = null;Folder folder = null;try {store = session.getStore(protocol);store.connect(username, password);folder = store.getFolder("INBOX");folder.open(Folder.READ_ONLY);int size = folder.getMessageCount();Message message = folder.getMessage(size);String from = message.getFrom()[0].toString();String subject = message.getSubject();Date date = message.getSentDate();System.out.println("From: " + from);System.out.println("Subject: " + subject);System.out.println("Date: " + date);} catch (NoSuchProviderException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();} finally {try {if (folder != null) {folder.close(false);}if (store != null) {store.close();}} catch (MessagingException e) {e.printStackTrace();}}System.out.println("接收完毕!");}
}

转载于:https://www.cnblogs.com/zhujiabin/p/6295467.html

Android Java使用JavaMail API发送和接收邮件的代码示例相关推荐

  1. java云片模板参数_Java使用云片API发送短信验证码的代码详解

    这篇文章主要介绍了Java使用云片API发送短信验证码,主要用的是Java实现短信验证码.需要的朋友可以参考下 下面开始介绍的是如何利用机器完成批量操作,将短信业务自动化. 获取APIKEY 云片网提 ...

  2. java activeMQ消息的发送与接收

    java activeMQ消息的发送与接收 activemq是我们经常用到的消息队列之一,比如说速度快,对spring的很好的支持,支持多种协议等等,今天我们就来看一下activeMQ消息的发送与接收 ...

  3. java kafka消息的发送与接收

    java kafka消息的发送与接收 消息队列在java EE级开发是很常用到的工具之一,在众多消息队列当中,active mq与kafka相对比较受开发者的喜爱,那么kafka是怎样实现消息的发送与 ...

  4. python接收邮件内容启动程序_Python实现发送与接收邮件的方法详解

    本文实例讲述了Python实现发送与接收邮件的方法.分享给大家供大家参考,具体如下: 一.发送邮件 这里实现给网易邮箱发送邮件功能: import smtplib import tkinter cla ...

  5. 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 )

    OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...

  6. JavaMail发送和接收邮件

    一.JavaMail概述:        JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类.但它并没有包含在JDK中,而是作为JavaEE的一部分. 厂商所提供 ...

  7. JavaMail API 1.4.7邮件发送

    下载oracle javaMail API: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive- ...

  8. java 调用微信api发送消息

    要在 Java 中调用微信 API 发送消息,你需要做的第一步是在微信公众平台中注册自己的公众号,然后获取到自己的 AppID 和 AppSecret. 然后你可以使用微信公众平台提供的开发文档,来了 ...

  9. 使用java编写snmp inform 发送与接收示例

    环境:java+gradle+snmp4j 编译器idea 进入正题 首先,我们编写一个snmp接收类 package main.snmp.util;import org.snmp4j.*; impo ...

最新文章

  1. 从YARN迁移到k8s,滴滴机器学习平台二次开发是这样做的
  2. 干货 | 统计学概论和医疗临床大数据分析(附PPT下载)
  3. 使用阿里云OSS上传文件
  4. 转:C#读取Excel文件 (2009年9月28日)
  5. Matlab学习笔记——数据文件定位
  6. 机器学习导论(张志华):多项式分布
  7. 工业用微型计算机(24)-汇编语言分段结构
  8. yii+php+当前目录,Yii常用路径方法总结
  9. 狗窝里的小日子- 4 ...
  10. C#LeetCode刷题之#557-反转字符串中的单词 III(Reverse Words in a String III)
  11. php嘲讽,PHP为何能够受到大家追捧,又为什么饱受嘲讽?
  12. android代码无法访问data目录,解决Android7.1.1中无法打开/data目录的问题
  13. 解决.bashrc文件每次打开终端都需要source的问题
  14. C#如何关闭指定进程
  15. java web/Maven项目结构分析
  16. python爬虫学习整理——爬虫入门(1)
  17. 如何快速把英语单词导入有道词典
  18. 程序员必须了解的知识点——你搞懂mysql索引机制了吗?
  19. Python社区医疗服务平台的设计与实现毕业设计源码221707
  20. 全新天龙八部:4年积攒更惬意的方法

热门文章

  1. 5013.FortiGate企业级硬件防火墙Demo演示文档
  2. flask部署机器学习_如何开发端到端机器学习项目并使用Flask将其部署到Heroku
  3. css flexbox模型_5分钟内学习CSS Flexbox-初学者教程
  4. 低版本jdbc连接高版本oracle,转:oracle11g的JDBC连接 URL和之前的版本有一定的区别...
  5. Git-remote Incorrect username or password ( access token )
  6. 1048 数字加密 --非满分
  7. (C++)1009 Product of Polynomials
  8. Web前端培训面试攻略
  9. April Fools Contest 2018
  10. AI时代:推荐引擎正在塑造人类