今日研究了一下java发送邮件的程序,有两种方法,一种是用java.mail;一种是用commons-email。
一、JAVA Mail是很常用的用于发送邮件的包,我们可以从这里获取,或者在maven中添加如下配置:
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.5.5</version></dependency>示例代码如下:package cn.mail.test;import java.util.PRoperties;import javax.mail.Authenticator;import javax.mail.Message.RecipientType;import javax.mail.MessagingException;import javax.mail.PassWordAuthentication;import javax.mail.session;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;public class EmailTest { private static boolean send_QQmail(String strMail, String strTitle, String strText){ boolean bret = false; try { final Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", "smtp.qq.com"); //你自己的邮箱 props.put("mail.user", "xxxxxxx@qq.com"); //你开启pop3/smtp时的验证码 props.put("mail.password", "xxxxxxxx"); props.put("mail.smtp.port", "25"); props.put("mail.smtp.starttls.enable", "true"); Authenticator authenticator = new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { String userName = props.getProperty("mail.user"); String password = props.getProperty("mail.password"); return new PasswordAuthentication(userName, password); } }; // 使用环境属性和授权信息,创建邮件会话 Session mailSession = Session.getInstance(props, authenticator); // 创建邮件消息 MimeMessage message = new MimeMessage(mailSession); // 设置发件人 String username = props.getProperty("mail.user"); InternetAddress form = new InternetAddress(username); message.setFrom(form); InternetAddress to = new InternetAddress(strMail); message.setRecipient(RecipientType.TO, to); // 设置邮件标题 message.setSubject(strTitle); // 设置邮件的内容体 message.setContent(strText, "text/html;charset=UTF-8"); // 发送邮件 Transport.send(message); bret = true; } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); } return bret; } private static boolean send_163mail(String strMail, String strTitle, String strText){ boolean bret = false; try { final Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", "smtp.163.com"); // 发件人的账号 props.put("mail.user", "xxxxxxxx@163.com"); //发件人的密码 props.put("mail.password", "xxxxxxx"); // 构建授权信息,用于进行SMTP进行身份验证 Authenticator authenticator = new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { // 用户名、密码 String userName = props.getProperty("mail.user"); String password = props.getProperty("mail.password"); return new PasswordAuthentication(userName, password); } }; // 使用环境属性和授权信息,创建邮件会话 Session mailSession = Session.getInstance(props, authenticator); // 创建邮件消息 MimeMessage message = new MimeMessage(mailSession); // 设置发件人 String username = props.getProperty("mail.user"); InternetAddress form = new InternetAddress(username); message.setFrom(form); // 设置收件人 InternetAddress to = new InternetAddress(strMail); message.setRecipient(RecipientType.TO, to); // 设置邮件标题 message.setSubject(strTitle); // 设置邮件的内容体 message.setContent(strText, "text/html;charset=UTF-8"); // 发送邮件 Transport.send(message); bret = true; } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); } return bret; } public static void main(String[] args) { if (send_qqmail("xxxxxx@qq.com", "测试QQ邮箱发送", "<body><p>你们好吗</p></body>")) System.out.println("QQ邮件发送成功"); if (send_163mail("xxxxxx@163.com", "测试网易邮箱发送", "<body><p>你们好吗</p></body>")) System.out.println("网易邮件发送成功"); }}这里的时候,在用QQ邮箱时,发送邮件的邮箱记得开通pop3/smtp服务。二、使用JAVA Mail我们可以完成邮件的发送,但是我们可以发现实现过程略显复杂,比较繁琐,所以我们可以借助
commons-email
简化发送邮件的过程,commons-email可以从这里下载,或在maven中添加如下配置:<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</version></dependency>示例代码如下:package com.mail.test;import java.util.Date;import org.apache.commons.mail.SimpleEmail;public class CommonsEmailTest{ /** * 发送文本邮件 * * @throws Exception */ public static boolean sendTextMail(String strMail, String strTitle, String strText) throws Exception{ boolean bret = false; SimpleEmail mail = new SimpleEmail(); // 设置邮箱服务器信息 mail.setSslSmtpPort("25"); mail.setHostName("smtp.163.com"); // 设置密码验证器 mail.setAuthentication("XXXXXX@163.com", "XXXXXX(授权密码)"); // 设置邮件发送者 mail.setFrom("XXXXXX@163.com"); // 设置邮件接收者 mail.addTo(strMail); // 设置邮件编码 mail.setCharset("UTF-8"); // 设置邮件主题 mail.setSubject(strTitle); // 设置邮件内容 mail.setMsg(strText); // 设置邮件发送时间 mail.setSentDate(new Date()); // 发送邮件 mail.send(); return bret; } public static void main(String[] args) { try { if (sendTextMail("YYYYYY@qq.com", "测试QQ邮箱发送", "你们好吗???")) System.out.println("QQ邮件发送成功"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}这里用common-email时,我选择用163邮箱往QQ邮箱上发送邮件,发送成功,代码量也比用mail是简单多了注意事项:
在用java程序发送邮件时,大部分问题是邮箱没有开通pop3/smtp,会报javax.mail.AuthenticationFailedException,遇到这个问题首先要先确定pop3/smtp服务是否开启,详情参考:http://blog.csdn.net/zouxucong/article/details/60578824
这里,多谢两位大神的文章可供参看
参考文章一:http://blog.csdn.net/jianggujin/article/details/51253129
参考文章二:http://blog.csdn.net/zhang_ruiqiang/article/details/50754615
新闻热点
疑难解答