首页 > 编程 > Java > 正文

maven之javamail操作qq的smtp与imap

2019-11-10 20:27:30
字体:
来源:转载
供稿:网友

参考:

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>


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表