今天闲着无事,研究了一下javaMail发送电子邮件的方法,自己总结了个步骤:
1、首先需要获取发送邮件的Session对象
Session session = Session.getDefaultInstance(properties,authorcator);
2、根据session对象,获取待发送的邮件消息
MimeMessage mimeMessage = new MimeMessage(session);
3、设置发件人,收件人,标题,邮件内容,附件,发送时间等;
4、利用Transport发送邮件
以下是居然的实现代码:
1、邮件信息类:
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、身份验证类
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类型有所区别而已,具体请看代码:
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 包,请自行下载。
相关推荐
利用javaMail发送和接受电子邮件 包括普通电子邮件的收发,带附件的电子邮件的收发
利用JavaMail来发送电子邮件 - HTML格式 InternetAddress[] address = null; //request.setCharacterEncoding("utf8"); String mailserver = "smtp.163.com";//发出邮箱的服务器 String From = request....
利用jsp和javamail实现电子邮件的发送。适合初学者学习!
本系统利用SMTP协议和POP协议从底层进行开发,利用JavaMail API为收发邮件提供与协议无关的访问。SMTP(简单邮件传输协议)是专门用来发送邮件的。POP(邮局协议)是专门用于接收邮件的。JavaMail API是一种可选的、...
基于JavaMail的邮件收发系统是一种用于发送和接收电子邮件的应用程序,它基于JavaMail API来实现与邮件服务器的通信,并提供用户界面来进行邮件的管理和操作。以下是对该系统实现的描述: 用户界面: 系统提供了...
本系统利用SMTP协议和POP协议从底层进行开发,利用JavaMail API为收发邮件提供与协议无关的访问。SMTP(简单邮件传输协议)是专门用来发送邮件的。POP(邮局协议)是专门用于接收邮件的。JavaMail API是一种可选的、...
介绍了如何利用javamail实现给多人发送电子邮件,附有代码
本系统利用SMTP协议和POP协议从底层进行开发,利用JavaMail API为收发邮件提供与协议无关的访问。SMTP(简单邮件传输协议)是专门用来发送邮件的。POP(邮局协议)是专门用于接收邮件的。JavaMail API是一种可选的、...
整个系统采用Java语言开发,利用Javamail API实现了邮件的发送与接收功能,具有用户友好的界面和稳定的性能。 项目的亮点在于其可扩展性和可定制性。开发者可以根据自己的需求,对系统的功能进行进一步的扩展和优化...
本系统利用SMTP协议和POP协议从底层进行开发,利用JavaMail API为收发邮件提供与协议无关的访问。SMTP(简单邮件传输协议)是专门用来发送邮件的。POP(邮局协议)是专门用于接收邮件的。JavaMail API是一种可选的、...
本系统利用SMTP协议和POP协议从底层进行开发,利用JavaMail API为收发邮件提供与协议无关的访问。SMTP(简单邮件传输协议)是专门用来发送邮件的。POP(邮局协议)是专门用于接收邮件的。JavaMail API是一种可选的、...
本系统利用SMTP协议和POP协议从底层进行开发,利用JavaMail API为收发邮件提供与协议无关的访问。SMTP(简单邮件传输协议)是专门用来发送邮件的。POP(邮局协议)是专门用于接收邮件的。JavaMail API是一种可选的、...
本系统利用SMTP协议和POP协议从底层进行开发,利用JavaMail API为收发邮件提供与协议无关的访问。SMTP(简单邮件传输协议)是专门用来发送邮件的。POP(邮局协议)是专门用于接收邮件的。JavaMail API是一种可选的、...
通过几种途径分析和实现利用Java发送电子邮件
5 利用JavaMail发送邮件 第13章 在Java Servlet中利用 RMI 13. 1 RMI概述 13. 2 RMI的实现 13. 2. 1 定义远程接口 13. 2. 2 实现远程对象 13. 2. 3 将远程对象绑定到RMI的名称空间 13. 2. 4 作为客户对象的...
第15章 利用JavaMail收发电子邮件 217 15.1 电子邮件协议和JavaMail 217 15.2 JavaMail核心类 218 15.2.1 Session类 218 15.2.2 Message类 218 15.2.3 Address类 219 15.2.4 Authenticator类 220 ...
7.2.3 使用JavaMail发送邮件 277 7.2.4 使用JavaMail接收邮件 281 7.3 应用服务器的JavaMail支持 287 7.3.1 在WebLogic中配置JavaMail 288 7.3.2 通过WebLogic的邮件支持来 发送邮件 290 7.3.3 在JBoss中配置...