1.所需夹包:javaMail.jar 、activation.jar
2.实现步骤:
(1).定义一个邮件消息类;
(2).定义一个服务器邮箱登录验证信息类;
(3).定义一个邮件发送类(核心类)
3.具体代码:
<pre name="code" class="java">package cn.my.utils; import java.util.List; /** * 邮件发送的信息实体类@date 2014.10.13 * @author wangbowen * @version 1.0 * */ public class SimpleMail { /** * 发送邮件者的地址 */ public String fromAddress; /** * 登录邮件服务器的用户名 */ public String userName; /** * 登录邮件服务器的密码 */ public String userPassword; /** * 接受邮件者的地址 */ public String toAddress; /** * 多个接受邮件者地址 */ public List<String> recipients; /** * 接受邮件的主题 */ public String subject; /** * 邮件的内容 */ public String content; /** * @return the fromAddress */ public String getFromAddress() { return fromAddress; } /** * @param fromAddress * the fromAddress to set */ public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; } /** * @return the userName */ public String getUserName() { return userName; } /** * @param userName * the userName to set */ public void setUserName(String userName) { this.userName = userName; } /** * @return the userPassword */ public String getUserPassword() { return userPassword; } /** * @param userPassword * the userPassword to set */ public void setUserPassword(String userPassword) { this.userPassword = userPassword; } /** * @return the toAddress */ public String getToAddress() { return toAddress; } /** * @param toAddress * the toAddress to set */ public void setToAddress(String toAddress) { this.toAddress = toAddress; } /** * @return the subject */ public String getSubject() { return subject; } /** * @param subject * the subject to set */ public void setSubject(String subject) { this.subject = subject; } /** * @return the content */ public String getContent() { return content; } /** * @param content * the content to set */ public void setContent(String content) { this.content = content; } /** * @return the recipients */ public List<String> getRecipients() { return recipients; } /** * @param recipients the recipients to set */ public void setRecipients(List<String> recipients) { this.recipients = recipients; } public SimpleMail(List<String> recipients, String subject, String content) { this.recipients = recipients; this.subject = subject; this.content = content; } }
package cn.my.utils; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; /** * 服务器邮箱登录验证 * @author [email protected] * @version 1.0 * */ public class MailAuthenticator extends Authenticator { /** * 用户名(登录邮箱) */ private String userName = null; /** * 密码 */ private String userPass = null; /** * 无参 */ public MailAuthenticator() { } /** * 初始化邮箱和密码 * @param userName 用户名 * @param userPass 密码 */ public MailAuthenticator(String userName, String userPass) { this.userName = userName; this.userPass = userPass; } /** * 取值 * @return "" */ @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userName, userPass); } /** * @return the userName */ public String getUserName() { return userName; } /** * @param userName the userName to set */ public void setUserName(String userName) { this.userName = userName; } /** * @return the userPass */ public String getUserPass() { return userPass; } /** * @param userPass the userPass to set */ public void setUserPass(String userPass) { this.userPass = userPass; } }
package cn.my.utils; import java.util.Date; import java.util.List; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; 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; import javax.mail.internet.MimeUtility; import javax.mail.internet.MimeMessage.RecipientType; /** * 简单邮件发送器,可单发,群发@date 2014.10.13。 * @author wangbowen * @version 1.0 * */ public class SimpleMailSender { /** * 发送邮件的props文件 */ public Properties props; /** * DUANKOU */ public static final int mailserverport = 25; /** * 邮件服务器登录验证 */ public transient MailAuthenticator authenticator; /** * 邮箱session */ public Session session; public Transport transport; /** * 初始化邮件发送器 * * @param smtpHostName * SMTP邮件服务器地址 * @param username * 发送邮件的用户名(地址) * @param password * 发送邮件的密码 */ public SimpleMailSender(final String smtpHostName, final String username, final String password) { init(username, password, smtpHostName); } /** * 初始化邮件发送器 * * @param username * 发送邮件的用户名(地址),并以此解析SMTP服务器地址 * @param password * 发送邮件的密码 */ public SimpleMailSender(final String username, final String password) { //通过邮箱地址解析出smtp服务器,对大多数邮箱都管用 String str = username.split("@")[1]; String smtpHostName = "smtp." +str; init(username, password, smtpHostName); } /** * 初始化 * * @param username * 发送邮件的用户名(地址) * @param password * 密码 * @param smtpHostName * SMTP主机地址 */ private void init(String username, String password, String smtpHostName) { // 初始化props props = new Properties(); props.put("mail.smtp.host", smtpHostName); props.put("mail.smtp.port",String.valueOf(mailserverport) ); props.put("mail.smtp.starttls.enable","true" ); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.socketFactory.port", String.valueOf(mailserverport)); props.put("mail.smtp.socketFactory.fallback", "false"); props.put("mail.transport.protocol", "smtp"); props.put("mail.from", username); LoggerUtils.info("初始化props成功...."); // 验证 authenticator = new MailAuthenticator(username, password); // 创建session session = Session.getDefaultInstance(props, authenticator); } /** * 发送邮件 * * @param recipient * 收件人邮箱地址 * @param subject * 邮件主题 * @param content * 邮件内容 * @throws AddressException * @throws MessagingException */ @SuppressWarnings("static-access") public void sendOne(String recipient, String subject, Object content) throws AddressException, MessagingException { // 创建mime类型邮件 final MimeMessage message = new MimeMessage(session); // 设置发信人 message.setFrom(new InternetAddress(authenticator.getUserName())); // 设置收件人 message.setRecipient(RecipientType.TO, new InternetAddress(recipient)); // 设置主题 message.setSubject(subject); // 设置邮件内容 message.setContent(content.toString(), "text/html;charset=utf-8"); message.saveChanges(); // 发送 transport = session.getTransport((String) props.get("mail.transport.protocol")); // 真正的连接邮件服务器并进行身份验证 transport.connect("smtp."+authenticator.getUserName().split("@")[1],authenticator.getUserName(),authenticator.getUserPass()); transport.send(message); } /** * 群发邮件 * * @param recipients * 收件人们 * @param subject * 主题 * @param content * 内容 * @throws AddressException * @throws MessagingException */ @SuppressWarnings("static-access") public boolean send(List<String> recipients, String subject, Object content) throws AddressException, MessagingException { try{ // 创建mime类型邮件 final MimeMessage message = new MimeMessage(session); // 设置发信人 message.setFrom(new InternetAddress(authenticator.getUserName())); // 设置收件人们 final int num = recipients.size(); InternetAddress[] addresses = new InternetAddress[num]; for (int i = 0; i < num; i++) { addresses[i] = new InternetAddress(recipients.get(i)); } message.setRecipients(RecipientType.TO, addresses); // 设置主题 message.setSubject(subject); // 设置邮件内容 message.setContent(content.toString(), "text/html;charset=utf-8"); //发送时间 message.setSentDate(new Date()); message.saveChanges(); // 发送 transport = session.getTransport((String) props.get("mail.transport.protocol")); // 真正的连接邮件服务器并进行身份验证 transport.connect("smtp."+authenticator.getUserName().split("@")[1],authenticator.getUserName(),authenticator.getUserPass()); transport.send(message); LoggerUtils.info("发送成功...."); transport.close(); }catch(Exception e){ e.printStackTrace(); LoggerUtils.info("发送失败...."); return false; } return true; } /** * 群发邮件含附件 * * @param recipients * 收件人们 * @param subject * 主题 * @param content * 内容 * @param filepath 附件 * @throws AddressException * @throws MessagingException */ @SuppressWarnings("static-access") public boolean sendMail(List<String> recipients, String subject, Object content,String filepath) throws AddressException, MessagingException { try{ // 创建mime类型邮件 final MimeMessage message = new MimeMessage(session); // 设置发信人 message.setFrom(new InternetAddress(authenticator.getUserName())); // 设置收件人们 final int num = recipients.size(); InternetAddress[] addresses = new InternetAddress[num]; for (int i = 0; i < num; i++) { addresses[i] = new InternetAddress(recipients.get(i)); } message.setRecipients(RecipientType.TO, addresses); // 设置主题 message.setSubject(subject); Multipart m = new MimeMultipart(); BodyPart bp = new MimeBodyPart(); bp.setContent(content.toString(), "text/html; charset=utf-8"); // 加入附件 FileDataSource ds = new FileDataSource(filepath); bp.setDataHandler(new DataHandler(ds)); bp.setFileName(MimeUtility.encodeText(ds.getName())); m.addBodyPart(bp); // 设置邮件内容 message.setContent(m); //发送时间 message.setSentDate(new Date()); message.saveChanges(); // 发送 transport = session.getTransport((String) props.get("mail.transport.protocol")); // 真正的连接邮件服务器并进行身份验证 transport.connect("smtp."+authenticator.getUserName().split("@")[1],authenticator.getUserName(),authenticator.getUserPass()); transport.send(message); LoggerUtils.info("发送成功...."); transport.close(); }catch(Exception e){ e.printStackTrace(); LoggerUtils.info("发送失败...."); return false; } return true; } /** * 发送邮件 * * @param recipient * 收件人邮箱地址 * @param mail * 邮件对象 * @throws AddressException * @throws MessagingException */ public void send(String recipient, SimpleMail mail) throws AddressException, MessagingException { sendOne(recipient, mail.getSubject(), mail.getContent()); } /** * 群发邮件 * * @param recipients * 收件人们 * @param mail * 邮件对象 * @throws AddressException * @throws MessagingException */ public boolean sendMails(SimpleMail mail) throws AddressException, MessagingException { boolean sendResult = send(mail.getRecipients(),mail.getSubject(), mail.getContent()); if(sendResult){ return true; } return false; } /** * 异步发送邮件 * @param mail 邮件对象 * @return */ public void sendMailByAsynchronous(final SimpleMail mail){ new Thread(new Runnable() { public void run() { try { send(mail.getRecipients(),mail.getSubject(), mail.getContent()); } catch (Exception ex) { LoggerUtils.error("邮件发送失败"+ex); } } }).start(); } }
package cn.my.utils; import java.util.ArrayList; import java.util.List; import javax.mail.MessagingException; import javax.mail.internet.AddressException; /** * 测试邮件发送 * @author wangbowen * */ public class test { public static void main(String[] args) { try { //分割邮件 String [] arrayemail ={"[email protected]","[email protected]"}; //接受邮件者 List<String> recipients = new ArrayList<String>(); for (int j = 0; j < arrayemail.length; j++) { <span style="white-space:pre"> </span>recipients.add(arrayemail[j]); <span style="white-space:pre"> </span>} //从properties文件中读取邮件发送者的邮箱以及密码 String userName = PropertiesUtil.findData("usermail.properties", "mail.username"); String password = PropertiesUtil.findData("usermail.properties", "mail.password"); SimpleMailSender sm = new SimpleMailSender(userName,password); sm.sendMails(new SimpleMail(recipients,"通知","成功")); } catch (AddressException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
5.mail.properties文件,可以根据你自己的需要设置相应的用户邮箱和密码
[email protected] mail.password=123456
6.注意:使用qq邮箱发送邮件需要设置SMTP开启服务
第一步,看图操作如下:
打开QQ邮箱,在设置-帐户,然后再看下图示:
把:POP3/SMTP服务,IMAP/SMTP服务,Exchange服务,CardDAV/CalDAV服务都选择上,保存这样,便可以轻松使用邮箱客户端来收发QQ邮件了!相关OUTLOOK设置如下:
可以看到,填写好接收邮件服务器:pop.qq.com,发送邮件服务器:smtp.qq.com;然后用户名与密码,设置好了后,便可以收QQ邮件了;
<