javamail使用小记

/**
 *

发送邮件主要有Properties(发送邮件的各种属性服务器地址,端口,用户名密码等),Authenticator(验证)这两个构建一个Session,Message设置一个邮件,然后Transport类send

*/
package com.util;

import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

/**
 * @author wqf
 *
 */
public class EmailSendTools {

private final static String _EMAIL_ACCOUNT = "[email protected]";
    private final static String _EMAIL_PASSWORD = "XXX";
    private final static String _SMTP_HOST = "smtp.qq.com";
    private final static String _SMTP_PORT = "465";
    private final static String _POP3_HOST = "pop.qq.com";
    private final static String _POP3_PORT = "995";

/**


* @param args
     */
    public static void main(String[] args) {
//        sendEmail(_EMAIL_ACCOUNT, "test", "test");
        receiveMail();
    }

public static void receiveMail() throws SendEmailException{
        try {
            Store store = getSession(false).getStore();
            store.connect();
            Folder folder = store.getFolder("INBOX");
            folder.open(Folder.READ_ONLY);
            Message[] msgs = folder.getMessages(1,20);
            int count = msgs.length;
            for (int i = 0; i < count; i++) {
                System.out.println("发送人:" + decodeText(msgs[i].getFrom()[0].toString()));
                System.out.println("主题:" + msgs[i].getSubject().toString());
            }
        } catch (NoSuchProviderException e) {
            throw new SendEmailException("链接邮件失败" + e.getMessage(), e);
        } catch (MessagingException e) {
            throw new SendEmailException("读取收件箱失败:" + e.getMessage(), e);
        } catch (UnsupportedEncodingException e) {
            throw new SendEmailException("邮件解析失败:" + e.getMessage(), e);
        }
    }

private static String decodeText(String text)

throws UnsupportedEncodingException{
        if (text == null)
            return null;
        if (text.startsWith("=?GB") || text.startsWith("=?gb") || text.startsWith("=?UTF") ||text.startsWith("=?utf"))
            text = MimeUtility.decodeText(text);
        else
            text = new String(text.getBytes("ISO8859_1"));
        return text;
    }

/**
     *
     * @param from
     * @param to
     * @param title
     * @param emsg
     * @return boolean
     * @throws SendEmailException
     */
    public static boolean sendEmail(String to, String title, String emsg) throws SendEmailException {
        try {
            Session session = getSession(true);
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(_EMAIL_ACCOUNT));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(title);
            message.setText(emsg);
            message.saveChanges();
            Transport.send(message);
        } catch (MessagingException e) {
            throw new SendEmailException("邮件发送失败:" + e.getMessage(), e);
        }
        return true;
    }

private static Properties getProp(boolean send) {
        // Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        Properties prop = new Properties();
        if (send) {
            prop.setProperty("mail.transport.protocol", "smtp");
            prop.setProperty("mail.smtp.host", _SMTP_HOST);
            prop.setProperty("mail.smtp.auth", "true");
            prop.setProperty("mail.smtp.port", _SMTP_PORT);
            prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            prop.setProperty("mail.smtp.socketFactory.fallback", "false");
            prop.setProperty("mail.smtp.socketFactory.port", _SMTP_PORT);
        } else {
            prop.setProperty("mail.store.protocol", "pop3");
            prop.setProperty("mail.pop3.host", _POP3_HOST);
            prop.setProperty("mail.pop3.port", _POP3_PORT);
            prop.setProperty("mail.pop3.auth", "true");
            prop.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            prop.setProperty("mail.pop3.socketFactory.fallback", "false");
            prop.setProperty("mail.pop3.socketFactory.port", _POP3_PORT);
        }
        return prop;
    }

private static Session getSession(boolean send) {
        Session session = Session.getDefaultInstance(getProp(send), getAut());
//        session.setDebug(true);
        return session;
    }

private static Authenticator getAut() {
        Authenticator aut = new MyAuthenricator(_EMAIL_ACCOUNT, _EMAIL_PASSWORD);
        return aut;
    }

private static class SendEmailException extends RuntimeException {
        /**
         *
         */
        private static final long serialVersionUID = 1L;

@SuppressWarnings("unused")
        public SendEmailException() {
            super();
        }

@SuppressWarnings("unused")
        public SendEmailException(String msg) {
            super(msg);
        }

@SuppressWarnings("unused")
        public SendEmailException(Throwable cause) {
            super(cause);
        }

public SendEmailException(String message, Throwable cause) {
            super(message, cause);
        }
    }

/**
     * 客户端程序自己实现Authenticator子类用于用户认证
     */
    static class MyAuthenricator extends Authenticator {
        String user = null;
        String pass = "";

public MyAuthenricator(String user, String pass) {
            this.user = user;
            this.pass = pass;
        }

@Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(user, pass);
        }

}
}

时间: 2024-09-30 15:03:32

javamail使用小记的相关文章

Spring与JavaMail

JavaMail与Spring集成开发 spring框架集成JavaMail的主要包 2.mail.properties mail.smtp.host=smtp.163.com mail.smtp.auth=true mail.username=15511111111 mail.password=123 [email protected] 3.使用spring配置(applicationContext-mail.xml) <?xml version="1.0" encoding=

java-基于JavaMail的Java邮件发送

1.基于JavaMail的Java邮件发送:简单邮件发送 2.基于JavaMail的Java邮件发送:复杂邮件发送

SpringBoot - 二零一七0421小记

一.SpringBoot使用起来比起SpringMVC更便捷,在注解上的小变化,我记录了下面几个: @Controller + @ResponseBody = SpringMVC中用@RestController来代替前面两个注解,通过这个注解,可以将所有的前端http请求放入SpringBoot的Controller容器中,并返回json格式的数据给前端 @RequestMapping(value={"/hello","/hi"},method=RequestMe

广州postgresql用户会技术交流会小记 2015-9-19

广州postgresql用户会技术交流会小记  2015-9-19 今天去了广州postgresql用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用postgresql -X2的情况 第二个讲师介绍了postgresql里面的一些执行计划分析 我个人比较关注第一个session,因为涉及到真正的应用案例 网上有对postgresql -X2的简短介绍,我先转载过来 转载:http://francs3.blog.163.com/blog/static/405767272

git 学习小记之记住https方式推送密码

昨天刚刚学了点git基础操作,但是不幸的是[email protected]给出公告说尽量使用 https 进行操作.可是在用 https 进行 push 时,都需要输入帐号和密码. 各种百度谷歌之后在[email protected]官网找到了解决方法<https方式使用[email protected]设置密码的方式>文中给出了几个方法,并且都非常简单. 关于 cache 缓存方式,我不太喜欢,因为要设置时间,而且会过期.而 store 相应的非常方便,设置全局后,方便多个库使用.当然如果

关于自动化部署之docker容器的折腾小记

docker的英文本意是码头工人,也就是搬运工,这种搬运工搬运的是集装箱(Container),集装箱里面装的可不是商品货物,而是任意类型的App,Docker把App(叫Payload)装在Container内,通过Linux Container技术的包装将App变成一种标准化的.可移植的.自管理的组件,这种组件可以在你的latop上开发.调试.运行,最终非常方便和一致地运行在production环境下. 具体什么是docker,你们自己找资料吧,应该好理解.   可以说是个运维的利器,可以把

使用JavaMail发送邮件和接受邮件

一. 为什么要学习JavaMail 为什么要学习JavaMail开发? 现在很多WEB应用在开发时都需要集成邮件发送功能,例如: 1. 给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail. 2. 给过生日的注册会员自动发送一封表示祝贺的E-Mail. 3. 将网站的最新活动信息通过E-Mail发送给所有的注册会员. 二. 邮件服务器和协议 1. 邮件服务器: 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.so

安卓环境搭建小记

安装容易出现问题:1.更新sdk时可能无法连接服务器,可在C:\WINDOWS\system32\drivers\etc下的hosts文件最后添加:#Google主页203.208.46.146 www.google.com#这行是为了方便打开Android开发官网 现在好像不翻墙也可以打开74.125.113.121 developer.android.com#更新的内容从以下地址下载203.208.46.146 dl.google.com203.208.46.146 dl-ssl.googl

与webView进行交互,webView小记

本文转载至 http://www.verydemo.com/demo_c101_i46895.html 一.与webView进行交互,调用web页面中的需要传参的函数时,参数需要带单引号,或者双引号(双引号需要进行转义在转义字符前加\),在传递json字符串时不需要加单引号或双引号. 1 -(void)webViewDidFinishLoad:(UIWebView *)webView 2 { 3     NSString *sendJsStr=[NSString stringWithFormat