Android Java使用JavaMail API发送和接收邮件的代码示例
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收发邮件所有的接口和类。
常用的类:
. javax.mail.Session; -------->保存连接服务器所需要的信息;
. javax.mail.Message; -------->邮件体,保存邮件的内容;
. javax.mail.Transport; -------->发送邮件的载体
. 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", , 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 = ;
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()[].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("接收完毕!");
}
}
Android Java使用JavaMail API发送和接收邮件的代码示例的更多相关文章
- JavaMail发送和接收邮件API(详解)
一.JavaMail概述: JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类.但它并没有包含在JDK中,而是作为JavaEE的一部分. 厂商所提供的JavaMa ...
- android 蓝牙编程重点---如何发送和接收16进制数据
最近的android蓝牙开发项目也逐渐接近尾声,基本的功能都已经完成,只剩下界面的设计.现在真的是舒了一口气! 作为编程学习经验只有1年的菜鸟,这是我独自完成的商业性产品,而且还是涉及到与单片机蓝牙模 ...
- JavaMail发送和接收邮件
一.JavaMail概述: JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类.但它并没有包含在JDK中,而是作为JavaEE的一部分. 厂商所提供 ...
- JavaMail API 1.4.7邮件发送
下载oracle javaMail API: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive- ...
- Android javaMail使用imap协议接收邮件
在这里说明一下,pop3和imap协议都是接收邮件的,但是他们还是有很多不同的. IMAP和POP有什么区别? POP允许电子邮件客户端下载服务器上的邮件,但是您在电子邮件客户端的操作(如:移动邮件. ...
- JavaMail API 发送电子邮件
现在,我们对JavaMail API及其核心类有一个清晰的概念,现在让我们写这将发送简单的电子邮件,邮件带有附件,电子邮件,HTML内容和电子邮件内嵌图像一个简单的程序. 接着在上述所有情况的基本步骤 ...
- javamail插件发送不同类型邮件方式
一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...
- 使用python发送和接收邮件
关于电子邮件 大学之前,基本不用邮箱,所以基本感觉不到它的存在,也不知道有什么用:然而大学之后,随着认识的人越来越多,知识越来越广泛,邮箱已然成为很重要的通讯工具,大学一些课程作业需要有邮箱发给老师, ...
- mail - 发送和接收邮件
SYNOPSIS(总览) mail [-iInv ] [-s subject ] [-c cc-addr ] [-b bcc-addr ] to-addr... mail [-iInNv -f ] [ ...
随机推荐
- 中科燕园GIS外包--移动GIS
移动GIS恰逢其时 得益于移动智能终端的普及和移动互联网的发展,伴随着GIS技术的发展和应用的深入.越来越多的企业和普通消费者開始体会到移动GIS的巨大潜力和价值. 移动GIS轻便灵活,受众面广.随时 ...
- webgoat 7.1 实战指南
WSASP中文文档参考链接: http://www.owasp.org.cn/owasp-project/2017-owasp-top-10 OWASP Top 10 2017中文版V1.3http: ...
- vim插件之ack
这个插件其实是实现vim内部搜索功能的今天在学习vim搜索的时候,遇到了一个ack.vim的插件,这个插件给我们提供了一个并行于系统命令grep的搜索命令Ack 它的下载地址是 https://git ...
- 用NPOI、C#操作Excel表格生成班级成绩单
在C#中利用NPOI操作Excel表格非常方便,几乎上支持所有的Excel表格本身所有的功能,如字体设置.颜色设置.单元格合并.数值计算.页眉页脚等等. 这里准备使用NPOI生成一个班级成绩单Exce ...
- Linux下ping命令、traceroute命令、tracert命令的使用
Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”.不能打开网页时会说“你先ping网关地址192.168.1.1试试”. ...
- ajax 使用 与 缓存问题
1:GET访问 浏览器 认为 是等幂的 就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配] 所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结 ...
- Qwt库的一个使用注意事项
作者:朱金灿 来源:http://blog.csdn.net/clever101 一般debug版本的程序链接release版本的库是没有问题的.今天使用debug版本程序链接release版本的qw ...
- 【MongoDB】mongodump and mongorestore of mogodb
The another tool will be mentioned in this blog, namely mongodump and mongorestore. General speaking ...
- OpenCASCADE Job - 深圳鞋博士
鞋博士 鞋博士经过8年沉淀,在鞋类工业4.0全流程平台上积累了相当的技术实力,获投资商亲睐. 新的一年,在投资商协助下,将踏上新的征途,因此诚邀您加盟顶层技术合伙人. 如果您具备以下实力,我们期待您的 ...
- 类名引用static变量好处
不仅强调了变量static的结构,而且在有些情况下他还为编译器进行优化提供了更好的机会.