`
dove19900520
  • 浏览: 599687 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用javaMail发送电子邮件

    博客分类:
  • java
阅读更多

今天闲着无事,研究了一下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 是一个强大的开源库,专门用于在Java应用程序中实现电子邮件的发送和接收。它支持多种邮件协议,如SMTP(简单邮件传输协议)用于发送邮件,IMAP(因特网消息访问协议)和POP3(邮局协议)用于接收邮件。在...

    利用JavaMail发送邮件的实例,可以直接运行

    JavaMail 是一个开源的Java库,它为Java应用程序提供了API,用于处理电子邮件的发送和接收。这个实例将向我们展示如何使用JavaMail API在Java中实现邮件发送功能。以下是详细的步骤和相关知识点: 1. **JavaMail ...

    JavaMail发送邮件(文本、html、附件)

    下面将详细介绍如何利用JavaMail发送文本、HTML和包含附件的邮件,以及在实际应用中需要注意的配置步骤。 1. **JavaMail的基本概念** - JavaMail API提供了一系列接口和类,允许开发者通过SMTP(Simple Mail ...

    利用javamail发送邮件

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。它提供了一组API,使得开发者可以方便地处理SMTP、POP3和IMAP等邮件协议。在JavaMail环境下发送邮件,首先需要确保正确配置了环境,这通常...

    利用JavaMail发邮件

    在本篇文章中,我们将深入探讨如何利用JavaMail API发送邮件,以及在实际应用中可能遇到的关键知识点。 首先,JavaMail的核心组件包括`javax.mail`和`javax.mail.internet`这两个包。`javax.mail`包含了处理邮件...

    利用javamail api实现的邮件发送类

    JavaMail API 是一个开源的Java库,用于处理电子邮件的创建、发送和接收。这个API提供了一组接口和类,使得开发者能够直接与SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)服务器进行交互...

    利用JavaMail发送邮件示例

    JavaMail 是一个开源库,它为Java开发人员提供了一组API,用于处理电子邮件的发送和接收。这个示例将深入探讨如何使用JavaMail API在Java应用程序中发送邮件,包括设置SMTP服务器、创建邮件消息以及添加附件等内容。...

    javaMail 发邮件

    这个例子展示了如何使用JavaMail发送带附件的邮件。需要注意的是,实际应用中应处理各种异常,确保邮件发送的健壮性。此外,如果你的邮件服务器需要身份验证,还需要提供一个Authenticator来处理登录信息。 总的来...

    jsp 利用 javamail发送邮件(附带java web项目文件)

    本教程将深入探讨如何在JSP(JavaServer Pages)中利用JavaMail API来实现邮件发送功能,同时提供了一个完整的Java Web项目文件供参考。 首先,要使用JavaMail,你需要在项目中引入必要的依赖。在Maven项目中,可以...

    基于JavaMail的电子邮件收发系统设计说明.doc

    【标题】:基于JavaMail的电子邮件...该系统利用JavaMail API实现了邮件的发送和接收,结合Swing和Eclipse提供了友好的用户界面,确保了系统的稳定性和易用性。通过系统测试,证明了其在实际应用中的可靠性和实用性。

    javamail发送、接收邮件

    通过解析给定文件的标题、描述、标签及部分内容,我们可以深入探讨javamail发送与接收邮件的详细教程,以及如何利用JavaMail API实现邮件功能。 ### javamail发送、接收邮件 JavaMail API是由Sun Microsystems开发...

    javamail实现邮箱与邮箱发送邮件

    JavaMail 是一个强大的开源库,用于在Java应用程序中处理电子邮件。它提供了丰富的API,使得开发者可以轻松地实现发送、接收和处理电子邮件的功能。本示例将重点介绍如何使用JavaMail库来实现163邮箱向腾讯邮件发送...

    基于JavaMail的Java邮件发送-附源码

    JavaMail是Java编程语言中用于处理电子邮件的API,它提供了丰富的功能,允许开发人员创建、发送、接收和处理电子邮件。本教程将详细讲解如何利用JavaMail API在Java应用程序中发送邮件,同时提供附带的源码供参考。 ...

    基于javamail的电子邮件系统的设计与实现,一整套,工程,word,ppt,直接运行

    这个项目“基于javamail的电子邮件系统的设计与实现”显然涵盖了如何利用JavaMail库构建一个非Web的、基于Java客户端的邮件系统,特别是与腾讯邮件系统对接的部分。 在设计这样的系统时,开发者首先需要理解SMTP...

    基于JavaMail的电子邮件群发

    JavaMail API 是一套用于处理电子邮件的 Java 库,它允许开发者在 Java 应用程序中实现邮件的发送、接收和管理功能。该API 提供了与邮件协议无关的接口,使得开发人员能够轻松地处理 SMTP、POP3、IMAP 和 MIME 等...

    JavaMail邮件发送源码 非常简单

    JavaMail是一种在Java应用程序中发送和接收电子邮件的标准API,它为开发者提供了强大的功能,使得处理邮件变得简单而高效。在JavaMail中,我们主要利用 javax.mail 和 javax.mail.internet 这两个包中的类来实现邮件...

    使用javaMail发送邮件

    在IT行业中,发送电子邮件是一项常见的任务,特别是在自动化和系统集成中。JavaMail是Java平台上的一个强大库,它允许开发者通过SMTP(简单邮件传输协议)或其他邮件协议发送、接收和处理电子邮件。这篇博客文章...

    基于javaMail电子邮件系统的源代码

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个源代码示例提供了构建基于JavaMail的电子邮件系统的实现,可以帮助开发者理解和学习如何使用JavaMail API来处理电子邮件功能。下面将...

    Android 使用javamail发送邮件

    总的来说,"Android使用javamail发送邮件"这个主题涵盖了Android平台上利用JavaMail API实现邮件发送的基本流程和注意事项,包括设置SMTP服务器、构建邮件消息、处理附件以及可能的安全性和用户体验优化。...

    android使用javamail发送邮件jar包

    3. **编写邮件发送代码**:下面是一个简单的示例,展示了如何使用JavaMail发送一封纯文本邮件: ```java Properties props = new Properties(); props.put("mail.smtp.host", "smtp.example.com"); props.put(...

Global site tag (gtag.js) - Google Analytics