JavaMail介绍和常用的API 一个较完整的发送电子邮件函数
本文由发表于6年前 | J2EE | 评论数 2 |  被围观 12,148 views+

JavaMail,是Sun发布的用来处理email的API,提供给开发者处理电子邮件相关的编程接口。通过使用它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。

在项目中添加JavaMail相关JAR文件

要使用JavaMail可以从Java官网下载JavaMail相关的文件,目前最新的是Download JavaMail 1.4.4。

如果使用Spring框架,也可以从Spring的lib目录中找到需要的JAR文件,具体在:spring目录下的\lib\j2ee文件夹下,需要用到的两个JAR文件是:mail.jar和activation.jar,把他们拷贝到项目中即可。

JavaMail常用的一些方法
JavaMail基本属性设置:
//创建JavaMail需要用到的属性类:
Properties props = new Properties();
//设置smtp服务器
props.put("mail.smtp.host", "smtp.qq.com");
//设置验证为true
props.put("mail.smtp.auth", "true");
创建验证器
Authenticator authenticator = new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("xxx@qq.com","password");     }
};
使用上面的Properties和验证器创建邮件消息需要用到的Session:
Session session = Session.getDefaultInstance(props, authenticator);
创建和设置邮件:
MimeMessage mimeMessage = new MimeMessage(session);
//设置发送者
mimeMessage.setFrom(new InternetAddress("xxx@qq.com"));
//设置收件人邮箱:
mimeMessage.setRecipient(Message.RecipientType.TO, "xxx@qq.com");
//设置标题:
mimeMessage.setSubject("来自IT宅的邮件", "GBK");
//设置发送日期:
mimeMessage.setSentDate(new Date());

设置内容有两种方法:

纯文本邮件

//创建附件
Multipart multipart = new MimeMultipart();
//创建邮件内容
MimeBodyPart body = new MimeBodyPart();
body.setText("正文:www.itzhai.com", "GBK");

复杂邮件

body.setContent("正文:www.itzhai.com","text/plain;charset=GBK");
multipart.addBodyPart(body);//发件内容
设置和添加附件
//创建附件
MimeBodyPart attache = new MimeBodyPart();
//读取附件attachement(File类型)
attache.setDataHandler(new DataHandler(new FileDataSource(attachement)));
//获取附件名称
String fileName = attachement.getName();
attache.setFileName(MimeUtility.encodeText(fileName, "GBK", null));
//添加附件
multipart.addBodyPart(attache);
发送邮件
Transport.send(mimeMessage);
如果要使用QQ邮箱,记得关闭独立密码保护功能和在邮箱中设置POP3/IMAP/SMTP服务。
以下是一个比较完整的发送电子邮件的函数
/**
 * 发送邮件
 * @param sender 发送邮箱
 * @param password 发送邮箱密码
 * @param receivers 接受者邮箱
 * @param title 邮件标题
 * @param mailContent 邮件内容
 * @param attachements 附件
 * @param mimetype 对象的MIME类型
 * @param charset 字符集
 */
public static void sendEmail(final String sender,final String password,String[] receivers, String title, String mailContent, File[] attachements, String mimetype, String charset) {
    Properties props = new Properties();
    //设置smtp服务器地址
    //这里使用QQ邮箱,记得关闭独立密码保护功能和在邮箱中设置POP3/IMAP/SMTP服务
    props.put("mail.smtp.host", "smtp.qq.com");
    //需要验证
    props.put("mail.smtp.auth", "true");
    //创建验证器
    Authenticator authenticator = new Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(sender, password);
        }
    };
    //使用Properties创建Session
    Session session = Session.getDefaultInstance(props, authenticator);
    //Set the debug setting for this Session
    session.setDebug(true);
    try {
    	//使用session创建MIME类型的消息
        MimeMessage mimeMessage = new MimeMessage(session);
        //设置发件人邮件
        mimeMessage.setFrom(new InternetAddress(sender));
        //获取所有收件人邮箱地址
        InternetAddress[] receiver = new InternetAddress[receivers.length];
        for (int i=0; i<receivers.length; i++) {
        	receiver[i] = new InternetAddress(receivers[i]);
        }
        //设置收件人邮件
        mimeMessage.setRecipients(Message.RecipientType.TO, receiver);
        //设置标题
        mimeMessage.setSubject(title, charset);
        //设置邮件发送时间
        //SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        //mimeMessage.setSentDate(format.parse("2011-12-1"));
        mimeMessage.setSentDate(new Date());
        //创建附件
        Multipart multipart = new MimeMultipart();
        //创建邮件内容
        MimeBodyPart body = new MimeBodyPart();
        //设置邮件内容
        body.setContent(mailContent, (mimetype!=null && !"".equals(mimetype) ? mimetype : "text/plain")+ ";charset="+ charset);
        multipart.addBodyPart(body);//发件内容
        //设置附件
        if(attachements!=null){
            for (File attachement : attachements) {
                MimeBodyPart attache = new MimeBodyPart();
                attache.setDataHandler(new DataHandler(new FileDataSource(attachement)));
                String fileName = getLastName(attachement.getName());
                attache.setFileName(MimeUtility.encodeText(fileName, charset, null));
                multipart.addBodyPart(attache);
            }
        }
        //设置邮件内容(使用Multipart方式)
        mimeMessage.setContent(multipart);
        //发送邮件
        Transport.send(mimeMessage);
    } catch (Exception e) {
    	e.printStackTrace();
    }
}

private static String getLastName(String fileName) {
    int pos = fileName.lastIndexOf("\\");
    if (pos > -1) {
        fileName = fileName.substring(pos + 1);
    }
    pos = fileName.lastIndexOf("/");
    if (pos > -1) {
        fileName = fileName.substring(pos + 1);
    }
    return fileName;
}
除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/javamail-api-introduced-and-used-to-send-a-more-complete-e-mail-function.html
关键字: ,
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 10/7
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
文章评论
    2条评论
  1. 陈贵勇 2013年12月10日22:07:40  #-49楼 回复 回复

    我发送的邮件带有http://关键字 无法发送出去,有什么办法解决呢

给我留言

有人回复时邮件通知我
J2EE的相关文章
随机文章 本月热门 热评
1 Memcached使用getMulti造成的性能问题 2015/3/13
2 数据结构笔记 – 排序算法 希尔排序算法 2011/9/21
3 密码保护:侃侃可乐面包 2012/10/5
4 HTTP请求中的User-Agent 判断浏览器类型的各种方法 网络爬虫的请求标示 2013/8/12
5 设计模式笔记 – Proxy 代理模式 (Design Pattern) 2011/10/8
6 Git常用命令 2016/4/6
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
猜您喜欢
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.