JavaMail介绍和常用的API 一个较完整的发送电子邮件函数

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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值