参考:
java mail 官网 https://java.net/PRojects/javamail/pages/Home#Samples
maven 添加javamail支持 http://blog.csdn.net/dai_richard/article/details/7070713
QQ的imap需要使用ssl 的993端口进行通信 http://blog.csdn.net/superstorm5/article/details/2157022
书籍– java 网络编程精解(孙卫琴)
先看一些理论的东西
qq的邮箱账号 先要开通imap/smtp 在邮箱的 设置–账号 里面 如下
最后再来个测试代码 代码上都加了注释 不废话
[java] view plain copy print?package com.undergrowth; import java.io.IOException; import java.util.Date; import java.util.Enumeration; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Folder; import javax.mail.Header; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Part; import javax.mail.PassWordAuthentication; import javax.mail.session; import javax.mail.Store; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; /** * 简单发送和接收邮件 * @author u1 * */ public class SimpleSendReceiveMessage { //邮件通信会话 Session session; //邮件接收处理对象 Store store; //连接邮件发送的账号与密码 String username=”xxxxxxx”; private String passwd=“xxxxxx”; private String receiveHost=“imap.qq.com”; private String sendHost=“smtp.qq.com”; /** * 邮件配置参数和连接接收邮件服务器 * @throws MessagingException */ private void init() throws MessagingException{ Properties properties=new Properties(); //设置发送和接收协议 properties.put(”mail.transport.protocal”, “smtp”); properties.put(”mail.store.protocal”, “imap”); //设置ssl的端口 properties.setProperty(”mail.imap.socketFactory.class”, “javax.net.ssl.SSLSocketFactory”); properties.setProperty(”mail.imap.socketFactory.fallback”, “false”); properties.setProperty(”mail.imap.port”, “993”); properties.setProperty(”mail.imap.socketFactory.port”, “993”);/* properties.put(“mail.imap.port”, “993”); properties.put(“mail.smtp.port”, “465”);*/ //smtp认证 properties.put(”mail.smtp.auth”, “true”); //设置发送和接收处理类 properties.put(”mail.transport.class”, “com.sun.mail.smtp.SMTPTransport”); properties.put(”mail.imap.class”, “com.sun.mail.imap.IMAPStore”); //设置发送邮件服务器 properties.put(”mail.smtp.host”,sendHost); //获取邮件通信会话 Authenticator auth=new MailAuthenticator(); session=Session.getDefaultInstance(properties,auth); session.setDebug(true); //获取接收邮件对象 store=session.getStore(”imap”); //连接接收邮件服务器 store.connect(receiveHost, null, null); } /** * 关闭邮件接收服务器 * @throws MessagingException * @throws IOException */ public void close() throws MessagingException, IOException { store.close(); } /** * 创建一封简单的邮件 * @param fromAddr * @param toAddr * @return * @throws AddressException * @throws MessagingException */ public Message createSimpleMessage(String fromAddr,String toAddr) throws AddressException, MessagingException{ //建立一封邮件 MimeMessage message=new MimeMessage(session); //设置发送者和接收者 message.setFrom(new InternetAddress(fromAddr)); message.setRecipient(Message.RecipientType.TO, new InternetAddress(toAddr)); //设置主题 message.setSubject(”使用JAVAMAIL发送邮件”); //设置日期 message.setSentDate(new Date(System.currentTimeMillis())); //设置正文 message.setText(”今天是2015-6-12,离职一个周,准备下一份工作”); return message; } public Message createComplexMessage(String fromAddr,String toAddr) throws AddressException, MessagingException{ //建立一封邮件 MimeMessage message=new MimeMessage(session); //设置发送者和接收者 message.setFrom(new InternetAddress(fromAddr)); message.setRecipient(Message.RecipientType.TO, new InternetAddress(toAddr)); //设置主题 message.setSubject(”使用JAVAMAIL发送邮件”); //设置日期 message.setSentDate(new Date(System.currentTimeMillis())); //设置正文 Multipart mp=createMultiPart(); message.setContent(mp); return message; } /** * 创建复杂的正文 * @return * @throws MessagingException */ private Multipart createMultiPart() throws MessagingException { // TODO Auto-generated method stub Multipart multipart=new MimeMultipart(); //第一块 BodyPart bodyPart1=new MimeBodyPart(); bodyPart1.setText(”创建复杂的邮件,此为正文部分”); multipart.addBodyPart(bodyPart1); //第二块 以附件形式存在 MimeBodyPart bodyPart2=new MimeBodyPart(); //设置附件的处理器 FileDataSource attachFile=new FileDataSource(ClassLoader.getSystemResource(“attach.txt”).getFile()); DataHandler dh=new DataHandler(attachFile); bodyPart2.setDataHandler(dh); bodyPart2.setDisposition(Part.ATTACHMENT); bodyPart2.setFileName(”test”); multipart.addBodyPart(bodyPart2); return multipart; } /** * 发送邮件 * @param message * @throws MessagingException */ public void send(Message message) throws MessagingException{ Transport.send(message); } /** * 接收邮件 * @throws Exception */ public void receive() throws Exception{ browseMessageFromFolder(”INBOX”); } /** * 根据邮件夹名称浏览邮件 * @param folderName * @throws Exception */ private void browseMessageFromFolder(String folderName) throws Exception { // TODO Auto-generated method stub Folder folder=store.getFolder(folderName); if(folder==null) throw new Exception(folderName+“邮件夹不存在”); browseMessageFromFolder(folder); } /** * 根据邮件夹对象浏览邮件 * @param folder * @throws MessagingException * @throws IOException */ private void browseMessageFromFolder(Folder folder) throws MessagingException, IOException { // TODO Auto-generated method stub folder.open(Folder.READ_ONLY); System.out.println(”总共有”+folder.getMessageCount()+“封邮件”); System.out.println(”总共有”+folder.getUnreadMessageCount()+“封未读邮件”); Message[] messages=folder.getMessages(); for (int i = 1; i <=messages.length; i++) { System.out.println(”这是第”+i+“封邮件”); getMessageHeader(folder.getMessage(i)); writeSubjectToOutPutStream(folder.getMessage(i));; } folder.close(false); } /** * 遍历每封邮件的头部部分 * @param message * @throws MessagingException */ private void getMessageHeader(Message message) throws MessagingException { // TODO Auto-generated method stub @SuppressWarnings(“unchecked”) Enumeration<Header> allHeader=message.getAllHeaders(); for(;allHeader.hasMoreElements();){ Header header=allHeader.nextElement(); System.out.println(header.getName()+”:”+header.getValue()); } } /** * 将每封邮件的主题写入输出流中 * @param message * @throws MessagingException */ private void writeSubjectToOutPutStream(Message message) throws MessagingException { // TODO Auto-generated method stub System.out.println(”邮件主题为:”+message.getSubject()); } public static void main(String[] args){ SimpleSendReceiveMessage sendReceiveMessage=new SimpleSendReceiveMessage(); try { sendReceiveMessage.init(); Message message=sendReceiveMessage.createSimpleMessage(sendReceiveMessage.username, sendReceiveMessage.username); sendReceiveMessage.send(message); message=sendReceiveMessage.createComplexMessage(sendReceiveMessage.username, sendReceiveMessage.username); sendReceiveMessage.send(message); sendReceiveMessage.receive(); sendReceiveMessage.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } /** * 登陆认证 * @author u1 * */ private class MailAuthenticator extends Authenticator{ @Override protected PasswordAuthentication getPasswordAuthentication() { // TODO Auto-generated method stub return new PasswordAuthentication(username, passwd); } } }package com.undergrowth;import java.io.IOException;import java.util.Date;import java.util.Enumeration;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Authenticator;import javax.mail.BodyPart;import javax.mail.Folder;import javax.mail.Header;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.Part;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Store;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;/** * 简单发送和接收邮件 * @author u1 * */public class SimpleSendReceiveMessage { //邮件通信会话 Session session; //邮件接收处理对象 Store store; //连接邮件发送的账号与密码 String username="xxxxxxx"; private String passwd="xxxxxx"; private String receiveHost="imap.qq.com"; private String sendHost="smtp.qq.com"; /** * 邮件配置参数和连接接收邮件服务器 * @throws MessagingException */ private void init() throws MessagingException{ Properties properties=new Properties(); //设置发送和接收协议 properties.put("mail.transport.protocal", "smtp"); properties.put("mail.store.protocal", "imap"); //设置ssl的端口 properties.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.setProperty("mail.imap.socketFactory.fallback", "false"); properties.setProperty("mail.imap.port", "993"); properties.setProperty("mail.imap.socketFactory.port", "993");/* properties.put("mail.imap.port", "993"); properties.put("mail.smtp.port", "465");*/ //smtp认证 properties.put("mail.smtp.auth", "true"); //设置发送和接收处理类 properties.put("mail.transport.class", "com.sun.mail.smtp.SMTPTransport"); properties.put("mail.imap.class", "com.sun.mail.imap.IMAPStore"); //设置发送邮件服务器 properties.put("mail.smtp.host",sendHost); //获取邮件通信会话 Authenticator auth=new MailAuthenticator(); session=Session.getDefaultInstance(properties,auth); session.setDebug(true); //获取接收邮件对象 store=session.getStore("imap"); //连接接收邮件服务器 store.connect(receiveHost, null, null); } /** * 关闭邮件接收服务器 * @throws MessagingException * @throws IOException */ public void close() throws MessagingException, IOException { store.close(); } /** * 创建一封简单的邮件 * @param fromAddr * @param toAddr * @return * @throws AddressException * @throws MessagingException */ public Message createSimpleMessage(String fromAddr,String toAddr) throws AddressException, MessagingException{ //建立一封邮件 MimeMessage message=new MimeMessage(session); //设置发送者和接收者 message.setFrom(new InternetAddress(fromAddr)); message.setRecipient(Message.RecipientType.TO, new InternetAddress(toAddr)); //设置主题 message.setSubject("使用JAVAMAIL发送邮件"); //设置日期 message.setSentDate(new Date(System.currentTimeMillis())); //设置正文 message.setText("今天是2015-6-12,离职一个周,准备下一份工作"); return message; } public Message createComplexMessage(String fromAddr,String toAddr) throws AddressException, MessagingException{ //建立一封邮件 MimeMessage message=new MimeMessage(session); //设置发送者和接收者 message.setFrom(new InternetAddress(fromAddr)); message.setRecipient(Message.RecipientType.TO, new InternetAddress(toAddr)); //设置主题 message.setSubject("使用JAVAMAIL发送邮件"); //设置日期 message.setSentDate(new Date(System.currentTimeMillis())); //设置正文 Multipart mp=createMultiPart(); message.setContent(mp); return message; } /** * 创建复杂的正文 * @return * @throws MessagingException */ private Multipart createMultiPart() throws MessagingException { // TODO Auto-generated method stub Multipart multipart=new MimeMultipart(); //第一块 BodyPart bodyPart1=new MimeBodyPart(); bodyPart1.setText("创建复杂的邮件,此为正文部分"); multipart.addBodyPart(bodyPart1); //第二块 以附件形式存在 MimeBodyPart bodyPart2=new MimeBodyPart(); //设置附件的处理器 FileDataSource attachFile=new FileDataSource(ClassLoader.getSystemResource("attach.txt").getFile()); DataHandler dh=new DataHandler(attachFile); bodyPart2.setDataHandler(dh); bodyPart2.setDisposition(Part.ATTACHMENT); bodyPart2.setFileName("test"); multipart.addBodyPart(bodyPart2); return multipart; } /** * 发送邮件 * @param message * @throws MessagingException */ public void send(Message message) throws MessagingException{ Transport.send(message); } /** * 接收邮件 * @throws Exception */ public void receive() throws Exception{ browseMessageFromFolder("INBOX"); } /** * 根据邮件夹名称浏览邮件 * @param folderName * @throws Exception */ private void browseMessageFromFolder(String folderName) throws Exception { // TODO Auto-generated method stub Folder folder=store.getFolder(folderName); if(folder==null) throw new Exception(folderName+"邮件夹不存在"); browseMessageFromFolder(folder); } /** * 根据邮件夹对象浏览邮件 * @param folder * @throws MessagingException * @throws IOException */ private void browseMessageFromFolder(Folder folder) throws MessagingException, IOException { // TODO Auto-generated method stub folder.open(Folder.READ_ONLY); System.out.println("总共有"+folder.getMessageCount()+"封邮件"); System.out.println("总共有"+folder.getUnreadMessageCount()+"封未读邮件"); Message[] messages=folder.getMessages(); for (int i = 1; i <=messages.length; i++) { System.out.println("这是第"+i+"封邮件"); getMessageHeader(folder.getMessage(i)); writeSubjectToOutPutStream(folder.getMessage(i));; } folder.close(false); } /** * 遍历每封邮件的头部部分 * @param message * @throws MessagingException */ private void getMessageHeader(Message message) throws MessagingException { // TODO Auto-generated method stub @SuppressWarnings("unchecked") Enumeration<Header> allHeader=message.getAllHeaders(); for(;allHeader.hasMoreElements();){ Header header=allHeader.nextElement(); System.out.println(header.getName()+":"+header.getValue()); } } /** * 将每封邮件的主题写入输出流中 * @param message * @throws MessagingException */ private void writeSubjectToOutPutStream(Message message) throws MessagingException { // TODO Auto-generated method stub System.out.println("邮件主题为:"+message.getSubject()); } public static void main(String[] args){ SimpleSendReceiveMessage sendReceiveMessage=new SimpleSendReceiveMessage(); try { sendReceiveMessage.init(); Message message=sendReceiveMessage.createSimpleMessage(sendReceiveMessage.username, sendReceiveMessage.username); sendReceiveMessage.send(message); message=sendReceiveMessage.createComplexMessage(sendReceiveMessage.username, sendReceiveMessage.username); sendReceiveMessage.send(message); sendReceiveMessage.receive(); sendReceiveMessage.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } /** * 登陆认证 * @author u1 * */ private class MailAuthenticator extends Authenticator{ @Override protected PasswordAuthentication getPasswordAuthentication() { // TODO Auto-generated method stub return new PasswordAuthentication(username, passwd); } }}maven的javamail依赖
[html] view plain copy print?<dependencies> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency> </dependencies><dependencies> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency> </dependencies>
新闻热点
疑难解答