`
ducaijun
  • 浏览: 155400 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

javamail发送文本邮件、HTML邮件及带附件邮件

阅读更多

今天项目有个需求需要定时发送邮件,正好java有javamail,故将代码贴下如下,非纯原创,又代码借鉴:

 

当然先得下载javamail的jar包了http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html,我下载的是javamail1.4.5.jar 

 

贴上我的代码:

 

    MailInfo类 主要是邮箱相关的登录信息,如邮件服务器地址、端口,账号、密码,邮件收件人、主题、内容等

 

import java.util.Properties;


public class MailInfo {
	
	private String mailServerHost;// 发送邮件的服务器ip
	private String mailServerPort;// 发送邮件的服务器端口
	private String fromAddress;// 发送者的邮件地址
	private String toAddress;// 邮件接收者地址
	private String username;// 登录邮件发送服务器的用户名
	private String password;// 登录邮件发送服务器的密码
	private boolean validate = false;// 是否需要身份验证
	private String subject;// 邮件主题
	private String content;// 邮件内容
	private String[] attachFileNames;// 附件名称
	
	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 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;
	}

}
 

   MyAuthenticator类,主要是在邮件服务器需要权限认证的时候用

 

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class MyAuthenticator extends Authenticator {
	private String username = null;
	private 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);
	}

}
  

  SimpleMail类,真正发送邮件的功能在这

 

import java.io.File;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
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 SimpleMail {

	/**
	 * 以文本格式发送邮件
	 * @param mailInfo待发送的邮件的信息 
	 * @return
	 */
	public static boolean sendTextMail(MailInfo mailInfo) {
		
		//判断是否需要身份认证
		MyAuthenticator authenticator = null;
		Properties properties = mailInfo.getProperties();
		if (mailInfo.isValidate()) {
			//如果需要身份认证,则创建一个密码验证器
			authenticator = new MyAuthenticator(mailInfo.getUsername(), mailInfo.getPassword());
		}
		
		//根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session sendMailSession = Session.getDefaultInstance(properties, authenticator);
		try {
			Message mailMessage = new MimeMessage(sendMailSession);//根据session创建一个邮件消息 
			Address from = new InternetAddress(mailInfo.getFromAddress());//创建邮件发送者地址
			mailMessage.setFrom(from);//设置邮件消息的发送者
			Address to = new InternetAddress(mailInfo.getToAddress());//创建邮件的接收者地址
			mailMessage.setRecipient(Message.RecipientType.TO, to);//设置邮件消息的接收者
			mailMessage.setSubject(mailInfo.getSubject());//设置邮件消息的主题
			mailMessage.setSentDate(new Date());//设置邮件消息发送的时间
			//mailMessage.setText(mailInfo.getContent());//设置邮件消息的主要内容
			
			//MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象
			Multipart mainPart = new MimeMultipart();
			MimeBodyPart messageBodyPart = new MimeBodyPart();//创建一个包含附件内容的MimeBodyPart
			//设置HTML内容
			messageBodyPart.setContent(mailInfo.getContent(),"text/html; charset=utf-8");
			mainPart.addBodyPart(messageBodyPart);

			//存在附件
			String[] filePaths = mailInfo.getAttachFileNames();
			if (filePaths != null && filePaths.length > 0) {
				for(String filePath:filePaths){
					messageBodyPart = new MimeBodyPart();
					File file = new File(filePath); 
					if(file.exists()){//附件存在磁盘中
						FileDataSource fds = new FileDataSource(file);//得到数据源
						messageBodyPart.setDataHandler(new DataHandler(fds));//得到附件本身并至入BodyPart
						messageBodyPart.setFileName(file.getName());//得到文件名同样至入BodyPart
						mainPart.addBodyPart(messageBodyPart);
					}
				}
			}
			
			//将MimeMultipart对象设置为邮件内容   
			mailMessage.setContent(mainPart);
			Transport.send(mailMessage);//发送邮件
			return true;
		} catch (Exception e) {
			e.printStackTrace();  
		}
		return false;
	}
	
	
	/**
	 * 以HTML格式发送邮件 
	 * @param mailInfo 待发送的邮件信息
	 * @return
	 */
	public static boolean sendHtmlMail(MailInfo mailInfo) {
		
		//判断是否需要身份认证
		MyAuthenticator authenticator = null;
		Properties properties = mailInfo.getProperties();
		if (mailInfo.isValidate()) {
			// 如果需要身份认证,则创建一个密码验证器
			authenticator = new MyAuthenticator(mailInfo.getUsername(), mailInfo.getPassword());
		}

		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session sendMailSession = Session.getDefaultInstance(properties, authenticator);
		try{
			Message mailMessage = new MimeMessage(sendMailSession);//根据session创建一个邮件消息 
			Address from = new InternetAddress(mailInfo.getFromAddress());//创建邮件发送者地址
			mailMessage.setFrom(from);//设置邮件消息的发送者
			Address to = new InternetAddress(mailInfo.getToAddress());//创建邮件的接收者地址
			mailMessage.setRecipient(Message.RecipientType.TO, to);//设置邮件消息的接收者
			mailMessage.setSubject(mailInfo.getSubject());//设置邮件消息的主题
			mailMessage.setSentDate(new Date());//设置邮件消息发送的时间
			
			//MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象
			Multipart mainPart = new MimeMultipart();
			MimeBodyPart messageBodyPart = new MimeBodyPart();//创建一个包含HTML内容的MimeBodyPart
			//设置HTML内容
			messageBodyPart.setContent(mailInfo.getContent(),"text/html; charset=utf-8");
			mainPart.addBodyPart(messageBodyPart);
			
			//存在附件
			String[] filePaths = mailInfo.getAttachFileNames();
			if (filePaths != null && filePaths.length > 0) {
				for(String filePath:filePaths){
					messageBodyPart = new MimeBodyPart();
					File file = new File(filePath); 
					if(file.exists()){//附件存在磁盘中
						FileDataSource fds = new FileDataSource(file);//得到数据源
						messageBodyPart.setDataHandler(new DataHandler(fds));//得到附件本身并至入BodyPart
						messageBodyPart.setFileName(file.getName());//得到文件名同样至入BodyPart
						mainPart.addBodyPart(messageBodyPart);
					}
				}
			}
			
			//将MimeMultipart对象设置为邮件内容   
			mailMessage.setContent(mainPart);
			Transport.send(mailMessage);//发送邮件
			return true;
		}catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}

}

 

 

上面就是我的javamai发送邮件的功能代码,下面贴上我的测试代码:

public class Test {
	public static void main(String[] args) {
		MailInfo mailInfo = new MailInfo();
		mailInfo.setMailServerHost("smtp.126.com");
		mailInfo.setMailServerPort("25");
		mailInfo.setValidate(true);
		mailInfo.setUsername("mail_address@126.com");
		mailInfo.setPassword("******");// 您的邮箱密码
		mailInfo.setFromAddress("mail_address@126.com");
		mailInfo.setToAddress("mail_address@126.com");
		mailInfo.setSubject("设置邮箱标题");
		mailInfo.setContent("设置邮箱内容");
		String[] attachFileNames={"D:/demo.xml","d:/demo.png"};
		mailInfo.setAttachFileNames(attachFileNames);//附件
		
		// 这个类主要来发送邮件
		SimpleMail.sendTextMail(mailInfo);// 发送文体格式
		StringBuffer demo = new StringBuffer();
		demo.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">")
		.append("<html>")
		.append("<head>")
		.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">")
		.append("<title>测试邮件</title>")
		.append("<style type=\"text/css\">")
		.append(".test{font-family:\"Microsoft Yahei\";font-size: 18px;color: red;}")
		.append("</style>")
		.append("</head>")
		.append("<body>")
		.append("<span class=\"test\">大家好,这里是测试Demo</span>")
		.append("</body>")
		.append("</html>");
		mailInfo.setContent(demo.toString());
		SimpleMail.sendHtmlMail(mailInfo);// 发送html格式
	}
}
   

 

分享到:
评论

相关推荐

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

    配置好用户名密码以及SMTP服务器就可以直接运行。已包含相关jar

    JavaMail实现邮件发送的简单封装(包括文本、图片、html、附件)

    JavaMail实现邮件发送的简单封装(包括文本、图片、html、附件) 详见http://blog.csdn.net/lyisray/article/details/42002215

    javamail发送邮件

    利用javamail开发的邮件发送工具类 支持普通文本,html,抄送,密送,发送附件 zip中有jar,文档,工程

    基于JavaMail的B/S邮件客户端开发

    随着网络技术及网络办公化的发展,电子邮件已经成为人们主要的通信方式之一。平常人们收发邮件主要有两种:一种是通过常用的邮件管理软件来实现;另一种是通过Web浏览器直接访问邮件服务器...3、 能够收发带附件的邮件

    XMail,javamail轻松实现发邮件

    实现简单几步,发送邮件。把javamail进行了包装。支持像多人发送,多人抄送。多附件,纯文本及html格式邮件。

    javamail群发邮件源码

    用qq邮箱发送测试通过,能发复杂的邮件。包括图片,附件,html的文本显示等,共享下。

    Java邮件开发包(文本发送)

    实现文本邮件的发送,调用简单,适合急于开发邮件发送系统,却没有时间研究JavaMail的兄弟。 &lt;br/&gt;压缩包内有使用说明README.TXT和比较详细的API说明文档。 欢迎给我提意见。 PS:已经有了含附件发送的...

    复杂邮件程序完整Java源码,支持添加附件,图片,HTML格式文本,支持远程WebService调用

    * @param enclosures Map,File&gt; 邮件附件 * @param copyToSends Map,RecipientType&gt; 邮件抄送信息 */ void sendMail(String sender,String password,String addressee,String subject,String text,Map,File&gt; ...

    SpringBoot整合邮箱JavaMail

    SpringBoot整合JavaMail功能,使用的是Spring自带的发送邮件功能,本Demo以qq邮箱为服务器做的测试,完成了纯文本发送、html发送、嵌入图片、带有附件等的封装,如有不足欢迎交流

    Spring邮件发送源码

    Spring 封装的JavaMail,使邮件发送变的相当简单,我通过Spring的邮件发送实现了发纯文本形的内容,HTMl,带附件,带图片等示例代码,并自行测试过.希望对初学者有帮助

    XMail轻松实现发送邮件

    实现简单几步,发送邮件。把javamail进行了包装。支持像多人发送,多人抄送。多附件,纯文本及html格式邮件。

    javaMail 源码

    通过java来实现邮件的收发功能,包括各种类型邮件的发送(文本,html,带附件等等)

    JavaMail Spring

    JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件...这里提供一个操作JavaMail的例子,可以发送文本邮件,HTML邮件,附件,抄送人。

    Javamail操作指南

    怎样才算比较完整的Javamail操作指南?我想应该包括绝大多数基本的email操作,能够应付... ● 发送email:包括文本邮件、HTML邮件、带附件的邮件、SMTP验证 ● 接收email:pop3远程连接、收取不同MIME的邮件、处理附件

    javaemail源码-easyemail:EasyEmail是一个开源且易于使用的库,可通过Java代码发送事件驱动的电子邮件

    EasyEmail是JavaMail的包装,开发人员可以使用少于10行的代码发送事件驱动的电子邮件。 作为开发人员,您不需要了解或了解通过Java中的SMTP通过SMTP发送电子邮件的内部配置,EasyEmail将在后台为您完成。 EasyEmail...

    MeyboMail Web(Java)开源简化-meybomailweb2.zip

    2. 邮件发送:可以发送纯文本邮件或HTML邮件,支持添加附件、设置主题和内容等。 3. 收件箱:可以查看收件箱中的邮件,对邮件进行回复、转发、删除等操作。 4. 邮件过滤:提供关键词过滤、发件人过滤、主题过滤等功能,...

    jsp网络编程从基础到实践

    《JSP网络编程从基础到实践》光盘说明 光盘的实例代码目录中包含了前10章的所有实例的源代码,实例名称及其所处... 实例67 发送文本格式的邮件 实例68 发送 HTML邮件 实例69 发送带有附件的邮件 实例70 接收EMAIL

    JSP网络编程从基础到实践 实例代码

    《JSP网络编程从基础到实践》光盘说明 光盘的实例代码目录中包含了前10章的所有实例的源代码,实例名称及其所处... 实例67 发送文本格式的邮件 实例68 发送 HTML邮件 实例69 发送带有附件的邮件 实例70 接收EMAIL

Global site tag (gtag.js) - Google Analytics