需要参考3篇文章
第一篇,这个是基本代码
转载自:http://dove19900520.iteye.com/blog/2005303
运行后出现下面异常
异常:Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
第二篇
http://www.blogjava.net/hwpok/archive/2009/04/02/263599.html
按照那个路径删除javaee.jar中的mail这个文件夹
第三篇
下载 mail.jar和activation.jar
http://download.csdn.net/detail/dbhunter/398258
今天闲着无事,研究了一下javaMail发送电子邮件的方法,自己总结了个步骤:
1、首先需要获取发送邮件的Session对象
Session session = Session.getDefaultInstance(properties,authorcator);
2、根据session对象,获取待发送的邮件消息
MimeMessage mimeMessage = new MimeMessage(session);
3、设置发件人,收件人,标题,邮件内容,附件,发送时间等;
4、利用Transport发送邮件
以下是居然的实现代码:
1、邮件信息类:
Java代码
- package com.china.test.mail;
- import java.util.Properties;
- /**
- * 发送邮件需要使用的基本信息
- * @author dove *
- */
- public class MailSenderInfo {
- // 发送邮件的服务器的IP
- private String mailServerHost;
- // 发送邮件的服务器的端口
- private String mailServerPort = "25";
- // 邮件发送者的地址
- private String fromAddress;
- // 邮件接收者的地址
- private String[] toAddress;
- // 邮件密送接收者的地址
- private String[] toBlindCarbonCopyAddress;
- // 邮件抄送接收者的地址
- private String[] toCarbonCopyAddress;
- // 登陆邮件发送服务器的用户名
- private String userName;
- // 登陆邮件发送服务器的密码
- private String password;
- // 是否需要身份验证
- private boolean validate = false;
- // 邮件主题
- private String subject;
- // 邮件的文本内容
- private String content;
- // 邮件附件的文件名
- private String[] attachFileNames;
- /**
- * 获得邮件会话属性
- */
- public Properties getProperties() {
- Properties pro = new Properties();
- pro.put("mail.smtp.host", this.mailServerHost);
- pro.put("mail.smtp.port", this.mailServerPort);
- pro.put("mail.smtp.auth", validate ? "true" : "false");
- return pro;
- }
- 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 String getFromAddress() {
- return fromAddress;
- }
- public void setFromAddress(String fromAddress) {
- this.fromAddress = fromAddress;
- }
- 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 getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public boolean isValidate() {
- return validate;
- }
- public void setValidate(boolean validate) {
- this.validate = validate;
- }
- public String getSubject() {
- return subject;
- }
- public void setSubject(String subject) {
- this.subject = subject;
- }
- public String getContent() {
- return content;
- }
- public void setContent(String content) {
- this.content = content;
- }
- public String[] getAttachFileNames() {
- return attachFileNames;
- }
- public void setAttachFileNames(String[] attachFileNames) {
- this.attachFileNames = attachFileNames;
- }
- public String[] getToBlindCarbonCopyAddress() {
- return toBlindCarbonCopyAddress;
- }
- public void setToBlindCarbonCopyAddress(String[] toBlindCarbonCopyAddress) {
- this.toBlindCarbonCopyAddress = toBlindCarbonCopyAddress;
- }
- public String[] getToCarbonCopyAddress() {
- return toCarbonCopyAddress;
- }
- public void setToCarbonCopyAddress(String[] toCarbonCopyAddress) {
- this.toCarbonCopyAddress = toCarbonCopyAddress;
- }
- }
2、身份验证类
Java代码
- package com.china.test.mail;
- import javax.mail.Authenticator;
- import javax.mail.PasswordAuthentication;
- /**
- * 身份验证器
- * @author dove
- *
- */
- public class MyAuthenticator extends Authenticator {
- private String username;
- private String password;
- public MyAuthenticator(){
- }
- public MyAuthenticator(String username, String password) {
- this.username = username;
- this.password = password;
- }
- @Override
- protected PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(username, password);
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
3、发送邮件类
该类有两个功能,一个是发送普通文本邮件;一个是发送html邮件,两者的本质是相同的,mime类型有所区别而已,具体请看代码:
Java代码
- package com.china.test.mail;
- import java.io.UnsupportedEncodingException;
- import java.util.Date;
- import java.util.Properties;
- import javax.activation.DataHandler;
- import javax.activation.DataSource;
- 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.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;
- /**
- * 简单邮件发送器
- * @author dove *
- */
- public class SimpleMailSender {
- /**
- * 以文本格式发送邮件 (支持群发,带附件)
- * @param senderInfo 待发送的邮件的信息
- * @return
- */
- public static boolean sendMail(MailSenderInfo senderInfo){
- boolean flag = false;
- // 判断是否需要身份验证
- MyAuthenticator authenticator = null;
- Properties props = senderInfo.getProperties();
- if(senderInfo.isValidate()){
- // 如果需要身份认证,则创建一个密码验证器
- authenticator = new MyAuthenticator(senderInfo.getUserName(), senderInfo.getPassword());
- }
- // 根据邮件会话属性和密码验证器构造一个发送邮件的session
- Session sendMailSession = Session.getDefaultInstance(props, authenticator);
- try {
- // 根据session创建一个邮件消息
- Message sendMailMessage = new MimeMessage(sendMailSession);
- // 创建邮件发送者地址
- Address from = new InternetAddress(senderInfo.getFromAddress());
- // 设置邮件消息的发送者
- sendMailMessage.setFrom(from);
- // 创建邮件接收者地址
- String[] tos = senderInfo.getToAddress();
- if(tos != null && tos.length != 0){
- InternetAddress[] to = new InternetAddress[tos.length];
- // 设置邮件消息的发送者
- for (int i = 0; i < tos.length; i++) {
- to[i] = new InternetAddress(tos[i]);
- }
- sendMailMessage.setRecipients(Message.RecipientType.TO, to);
- }
- // 设置邮件抄送者地址
- String[] toCCs = senderInfo.getToCarbonCopyAddress();
- if(toCCs != null && toCCs.length != 0){
- InternetAddress[] toCC = new InternetAddress[toCCs.length];
- // 设置邮件消息的发送者
- for (int i = 0; i < toCCs.length; i++) {
- toCC[i] = new InternetAddress(toCCs[i]);
- }
- sendMailMessage.addRecipients(Message.RecipientType.CC, toCC);
- }
- // 设置邮件密送者地址
- String[] toBCCs = senderInfo.getToBlindCarbonCopyAddress();
- if(toBCCs != null && toBCCs.length != 0){
- InternetAddress[] toBCC = new InternetAddress[toBCCs.length];
- for (int i = 0; i < toBCCs.length; i++) {
- toBCC[i] = new InternetAddress(toBCCs[i]);
- }
- sendMailMessage.addRecipients(Message.RecipientType.BCC, toBCC);
- }
- // 设置邮件主题
- sendMailMessage.setSubject(MimeUtility.encodeText(senderInfo.getSubject(),"utf-8","B"));
- // 设置邮件内容
- //sendMailMessage.setText(senderInfo.getContent());
- Multipart multipart = new MimeMultipart();
- // 邮件文本内容
- if(senderInfo.getContent() != null && !"".equals(senderInfo.getContent())){
- BodyPart part = new MimeBodyPart();
- part.setContent(senderInfo.getContent(), "text/plain;charset=utf-8");//设置邮件文本内容
- multipart.addBodyPart(part);
- }
- // 附件
- String attachFileNames[] = senderInfo.getAttachFileNames();
- int leng = attachFileNames == null ? 0 : attachFileNames.length;
- for (int i = 0; i < leng; i++) {
- BodyPart part = new MimeBodyPart();
- // 根据文件名获取数据源
- DataSource dataSource = new FileDataSource(attachFileNames[i]);
- DataHandler dataHandler = new DataHandler(dataSource);
- // 得到附件本身并至入BodyPart
- part.setDataHandler(dataHandler);
- // 得到文件名同样至入BodyPart
- part.setFileName(MimeUtility.encodeText(dataSource.getName()));
- multipart.addBodyPart(part);
- }
- sendMailMessage.setContent(multipart);
- // 设置邮件发送的时间
- sendMailMessage.setSentDate(new Date());
- // 发送邮件
- //Transport.send(sendMailMessage);
- Transport transport = sendMailSession.getTransport("smtp");
- transport.connect(senderInfo.getUserName(), senderInfo.getPassword());
- transport.send(sendMailMessage,sendMailMessage.getAllRecipients());
- transport.close();
- flag = true;
- } catch (AddressException e) {
- e.printStackTrace();
- } catch (MessagingException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- return flag;
- }
- public static boolean sendHtmlMail(MailSenderInfo senderInfo){
- boolean flag = false;
- // 判断是否需要身份验证
- MyAuthenticator authenticator = null;
- Properties props = senderInfo.getProperties();
- if(senderInfo.isValidate()){
- // 如果需要身份认证,则创建一个密码验证器
- authenticator = new MyAuthenticator(senderInfo.getUserName(), senderInfo.getPassword());
- }
- // 根据邮件会话属性和密码验证器构造一个发送邮件的session
- Session sendMailSession = Session.getDefaultInstance(props, authenticator);
- try {
- // 根据session创建一个邮件消息
- Message sendMailMessage = new MimeMessage(sendMailSession);
- // 创建邮件发送者地址
- Address from = new InternetAddress(senderInfo.getFromAddress());
- // 设置邮件消息的发送者
- sendMailMessage.setFrom(from);
- // 创建邮件接收者地址
- String[] tos = senderInfo.getToAddress();
- if(tos != null && tos.length != 0){
- InternetAddress[] to = new InternetAddress[tos.length];
- // 设置邮件消息的发送者
- for (int i = 0; i < tos.length; i++) {
- to[i] = new InternetAddress(tos[i]);
- }
- sendMailMessage.setRecipients(Message.RecipientType.TO, to);
- }
- // 设置邮件抄送者地址
- String[] toCCs = senderInfo.getToCarbonCopyAddress();
- if(toCCs != null && toCCs.length != 0){
- InternetAddress[] toCC = new InternetAddress[toCCs.length];
- // 设置邮件消息的发送者
- for (int i = 0; i < toCCs.length; i++) {
- toCC[i] = new InternetAddress(toCCs[i]);
- }
- sendMailMessage.addRecipients(Message.RecipientType.CC, toCC);
- }
- // 设置邮件密送者地址
- String[] toBCCs = senderInfo.getToBlindCarbonCopyAddress();
- if(toBCCs != null && toBCCs.length != 0){
- InternetAddress[] toBCC = new InternetAddress[toBCCs.length];
- for (int i = 0; i < toBCCs.length; i++) {
- toBCC[i] = new InternetAddress(toBCCs[i]);
- }
- sendMailMessage.addRecipients(Message.RecipientType.BCC, toBCC);
- }
- // 设置邮件主题
- sendMailMessage.setSubject(MimeUtility.encodeText(senderInfo.getSubject(),"utf-8","B"));
- // 设置邮件内容
- //sendMailMessage.setText(senderInfo.getContent());
- Multipart multipart = new MimeMultipart();
- // 邮件文本内容
- if(senderInfo.getContent() != null && !"".equals(senderInfo.getContent())){
- BodyPart part = new MimeBodyPart();
- part.setContent(senderInfo.getContent(), "text/html;charset=utf-8");//设置邮件文本内容
- multipart.addBodyPart(part);
- }
- // 附件
- String attachFileNames[] = senderInfo.getAttachFileNames();
- int leng = attachFileNames == null ? 0 : attachFileNames.length;
- for (int i = 0; i < leng; i++) {
- BodyPart part = new MimeBodyPart();
- // 根据文件名获取数据源
- DataSource dataSource = new FileDataSource(attachFileNames[i]);
- DataHandler dataHandler = new DataHandler(dataSource);
- // 得到附件本身并至入BodyPart
- part.setDataHandler(dataHandler);
- // 得到文件名同样至入BodyPart
- part.setFileName(MimeUtility.encodeText(dataSource.getName()));
- multipart.addBodyPart(part);
- }
- sendMailMessage.setContent(multipart);
- // 设置邮件发送的时间
- sendMailMessage.setSentDate(new Date());
- // 发送邮件
- //Transport.send(sendMailMessage);
- Transport transport = sendMailSession.getTransport("smtp");
- transport.connect(senderInfo.getUserName(), senderInfo.getPassword());
- transport.send(sendMailMessage,sendMailMessage.getAllRecipients());
- // 关闭transport
- transport.close();
- flag = true;
- } catch (AddressException e) {
- e.printStackTrace();
- } catch (MessagingException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- return flag;
- }
- public static void main(String[] args) {
- MailSenderInfo mailInfo = new MailSenderInfo();
- mailInfo.setMailServerHost("smtp.sina.com");
- mailInfo.setMailServerPort("25");
- mailInfo.setValidate(true);
- mailInfo.setUserName("********@sina.com");
- mailInfo.setPassword("*********");// 您的邮箱密码
- mailInfo.setFromAddress("jingjingwang163@sina.com");
- String[] to = {"********@bj.china.com"};
- mailInfo.setToAddress(to);
- String[] toCC = {"**********@qq.com"};
- mailInfo.setToCarbonCopyAddress(toCC);
- String[] toBCC = {"*******@sina.com"};
- mailInfo.setToBlindCarbonCopyAddress(toBCC);
- mailInfo.setAttachFileNames(new String[]{"C:/Documents and Settings/Administrator/桌面/考勤休假制度表格(新).xls","C:/Documents and Settings/Administrator/桌面/dove.jpg"});
- mailInfo.setSubject("发送HTML邮件");
- String body = "<table width=\"80%\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" style=\"align:center;text-align:center\"><tr><td>你好</td><td>你好</td><td>你好</td></tr></table>";
- mailInfo.setContent(body);
- // 这个类主要来发送邮件
- System.out.println(SimpleMailSender.sendHtmlMail(mailInfo));;//发送文体格式
- }
- }
本代码必须依赖与mail.jar 包,请自行下载。