要完成Java群发邮件功能,首先须加入mail.jar和activation.jar这两个包
下面是邮件的例子:
- <span style="background-color: rgb(255, 255, 255);">package com.chingcloud.mail;</span>
- <span style="background-color: rgb(255, 255, 255);">import java.io.File;
- import java.util.Properties;
- import java.util.Vector;
- import javax.mail.internet.MimeUtility;
- /**
- * 发送邮件的信息类
- * @author Benjamin
- * @version 2014.3.11
- *
- */
- public class MailSenderInfo {
- // 发送邮件的服务器的IP和端口
- private String mailServerHost;
- private String mailServerPort = "25";
- // 邮件发送者的地址
- private String fromAddress;
- // 邮件接收者的地址
- private String[] toAddress;
- // 登陆邮件发送服务器的用户名和密码
- private String userName;
- private String password;
- // 是否需要身份验证
- private boolean validate = false;
- // 邮件主题
- private String subject;
- // 邮件的文本内容
- private String content;
- // 邮件附件的文件名
- private String fileName = "" ;
- //附件文件集合
- private Vector<File> file = new Vector<File>() ;
- /**
- * 获得邮件会话属性
- * @return
- */
- public Properties getProperties(){
- Properties p = new Properties();
- p.put("mail.smtp.host", this.mailServerHost);
- p.put("mail.smtp.port", this.mailServerPort);
- p.put("mail.smtp.auth", validate ? "true" : "false");
- return p;
- }
- public String getMailServerHost() {
- return mailServerHost;
- }
- public void setMailServerHost(String mailServerHost) {
- this.mailServerHost = mailServerHost;
- }
- public String getMailServerPort() {
- return mailServerPort;
- }
- public void setMailServerPort(String mailServerPort) {
- this.mailServerPort = mailServerPort;
- }
- public boolean isValidate() {
- return validate;
- }
- public void setValidate(boolean validate) {
- this.validate = validate;
- }
- public String getFromAddress() {
- return fromAddress;
- }
- public void setFromAddress(String fromAddress) {
- this.fromAddress = fromAddress;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String[] getToAddress() {
- return toAddress;
- }
- public void setToAddress(String[] toAddress) {
- this.toAddress = toAddress;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public String getSubject() {
- return subject;
- }
- public void setSubject(String subject) {
- this.subject = subject;
- }
- public String getContent() {
- return content;
- }
- public void setContent(String textContent) {
- this.content = textContent;
- }
- public String getFileName() {
- return fileName;
- }
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
- public Vector<File> getFile() {
- return file;
- }
- public void setFile(Vector<File> file) {
- this.file = file;
- }
- /**
- *
- * 方法说明:把主题转换为中文
- * 输入参数:String strText
- * 返回类型:
- */
- public String transferChinese(String strText) {
- try {
- strText = MimeUtility.encodeText(new String(strText.getBytes(),
- "GB2312"), "GB2312", "B");
- } catch (Exception e) {
- e.printStackTrace();
- }
- return strText;
- }
- }
- </span>
- <span style="background-color: rgb(255, 255, 255);">package com.chingcloud.mail;
- import javax.mail.Authenticator;
- import javax.mail.PasswordAuthentication;
- /**
- * 发邮件的身份验证器
- * @author Benjamin
- * @version 2014.3.11
- *
- */
- public class MyAuthenticator extends Authenticator{
- String userName=null;
- String password=null;
- public MyAuthenticator(){
- }
- public MyAuthenticator(String username, String password) {
- this.userName = username;
- this.password = password;
- }
- protected PasswordAuthentication getPasswordAuthentication(){
- return new PasswordAuthentication(userName, password);
- }
- }
- </span>
- <span style="background-color: rgb(255, 255, 255);">package com.chingcloud.mail;
- import java.io.File;
- import java.util.Date;
- import java.util.Enumeration;
- import java.util.Properties;
- import java.util.Vector;
- import javax.activation.DataHandler;
- import javax.activation.FileDataSource;
- import javax.mail.Address;
- import javax.mail.BodyPart;
- import javax.mail.Message;
- import javax.mail.MessagingException;
- import javax.mail.Multipart;
- import javax.mail.Session;
- import javax.mail.Transport;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeBodyPart;
- import javax.mail.internet.MimeMessage;
- import javax.mail.internet.MimeMultipart;
- public class SimpleMailSender {
- /** *//**
- * 以文本格式发送邮件
- * @param mailInfo 待发送的邮件的信息
- */
- public boolean sendTextMail(MailSenderInfo mailInfo) {
- // 判断是否需要身份认证
- MyAuthenticator authenticator = null;
- Properties pro = mailInfo.getProperties();
- if (mailInfo.isValidate()) {
- // 如果需要身份认证,则创建一个密码验证器
- authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
- }
- // 根据邮件会话属性和密码验证器构造一个发送邮件的session
- Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
- try {
- // 根据session创建一个邮件消息
- Message mailMessage = new MimeMessage(sendMailSession);
- // 创建邮件发送者地址 authenticator
- Address from = new InternetAddress(mailInfo.getFromAddress());
- // 设置邮件消息的发送者
- mailMessage.setFrom(from);
- // 创建邮件的接收者地址,并设置到邮件消息中
- String[] mailToAddress = mailInfo.getToAddress() ;
- int len = mailToAddress.length ;
- Address to[] = new InternetAddress[len] ;
- for(int i=0;i<len;i++){
- to[i] = new InternetAddress(mailToAddress[i]) ;
- }
- // Message.RecipientType.TO属性表示接收者的类型为TO
- //TO表示主要接收人,CC表示抄送人,BCC表示秘密抄送人。
- mailMessage.setRecipients(Message.RecipientType.TO,to);
- // 设置邮件消息的主题
- mailMessage.setSubject(mailInfo.getSubject());
- // 设置邮件消息发送的时间
- mailMessage.setSentDate(new Date());
- // 设置邮件消息的主要内容
- String mailContent = mailInfo.getContent();
- mailMessage.setText(mailContent);
- // 发送邮件
- Transport.send(mailMessage);
- return true;
- } catch (MessagingException ex) {
- ex.printStackTrace();
- }
- return false;
- }
- /** *//**
- * 以HTML格式发送邮件
- * @param mailInfo 待发送的邮件信息
- */
- public boolean sendHtmlMail(MailSenderInfo mailInfo){
- // 判断是否需要身份认证
- MyAuthenticator authenticator = null;
- Properties pro = mailInfo.getProperties();
- //如果需要身份认证,则创建一个密码验证器
- if (mailInfo.isValidate()) {
- authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
- }
- // 根据邮件会话属性和密码验证器构造一个发送邮件的session
- Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
- try {
- // 根据session创建一个邮件消息
- Message mailMessage = new MimeMessage(sendMailSession);
- // 创建邮件发送者地址
- Address from = new InternetAddress(mailInfo.getFromAddress());
- // 设置邮件消息的发送者
- mailMessage.setFrom(from);
- // 创建邮件的接收者地址,并设置到邮件消息中
- String[] mailToAddress = mailInfo.getToAddress() ;
- int len = mailToAddress.length ;
- Address to[] = new InternetAddress[len] ;
- for(int i=0;i<len;i++){
- to[i] = new InternetAddress(mailToAddress[i]) ;
- }
- // Message.RecipientType.TO属性表示接收者的类型为TO
- //mailMessage.setRecipient(Message.RecipientType.TO, to) ;
- mailMessage.setRecipients(Message.RecipientType.TO,to);
- // 设置邮件消息的主题
- mailMessage.setSubject(mailInfo.getSubject());
- // 设置邮件消息发送的时间
- mailMessage.setSentDate(new Date());
- // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
- Multipart mainPart = new MimeMultipart();
- // 创建一个包含HTML内容的MimeBodyPart
- BodyPart html = new MimeBodyPart();
- // 设置HTML内容
- html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
- mainPart.addBodyPart(html);
- //向multipart中添加附件
- Vector<File> file = mailInfo.getFile() ;
- String fileName = mailInfo.getFileName() ;
- Enumeration<File> efile = file.elements() ;
- while(efile.hasMoreElements()){
- MimeBodyPart mdpFile = new MimeBodyPart() ;
- fileName = efile.nextElement().toString() ;
- FileDataSource fds = new FileDataSource(fileName) ;
- mdpFile.setDataHandler(new DataHandler(fds)) ;
- //这个方法可以解决乱码问题
- String fileName1 = new String(fds.getName().getBytes(),"ISO-8859-1") ;
- mdpFile.setFileName(fileName1) ;
- mainPart.addBodyPart(mdpFile) ;
- }
- file.removeAllElements() ;
- // 将MiniMultipart对象设置为邮件内容
- mailMessage.setContent(mainPart);
- // 发送邮件
- Transport.send(mailMessage);
- return true;
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- return false;
- }
- }
- </span>
- <span style="background-color: rgb(255, 255, 255);">package com.chingcloud.mail;
- import java.io.File;
- import java.util.Vector;
- public class SendMail {
- public static void main(String[] args) {
- try {
- MailSenderInfo mailInfo = new MailSenderInfo();
- // 设置邮件服务器类型
- mailInfo.setMailServerHost("smtp.qq.com");
- //设置端口号
- mailInfo.setMailServerPort("25");
- //设置是否验证
- mailInfo.setValidate(true);
- //设置用户名、密码、发送人地址
- mailInfo.setUserName("449261417@qq.com");
- mailInfo.setPassword("*******");// 您的邮箱密码
- mailInfo.setFromAddress("449261417@qq.com");
- /**
- * 附件
- */
- Vector<File> file = new Vector<File>() ;
- File f1 = new File("d:/1.txt") ;
- File f2 = new File("d:/2.txt") ;
- File f3 = new File("d:/cn.csv") ;
- File f4 = new File("C:/Documents and Settings/Administrator/My Documents/Downloads/mail.jar/mail.jar") ;
- file.add(f1) ;
- file.add(f2) ;
- file.add(f3) ;
- file.add(f4) ;
- mailInfo.setFile(file) ;
- /**
- * 收件人邮箱
- */
- String[] mailToAddress = {"wuhaixu449261417@sina.com"} ;
- mailInfo.setToAddress(mailToAddress);
- mailInfo.setSubject("测试");
- mailInfo.setContent("注册地址 <a href=\"www.baidu.com\" target='_blank'>百度</a>");
- // 这个类主要来发送邮件
- SimpleMailSender sms = new SimpleMailSender();
- // sms.sendTextMail(mailInfo);// 发送文体格式
- if(sms.sendHtmlMail(mailInfo)){
- System.out.println("mail send True!");
- }// 发送html格式
- else{
- System.out.println("mail send False!");
- }
- } catch (Exception e) {
- e.printStackTrace() ;
- }
- }
- }</span>
以上实现了javamail的群发送功能。目前只测试了几个邮箱,有什么问题给我留言,我去改进。