`
ducaijun
  • 浏览: 156804 次
  • 性别: 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、附件)

    以上就是使用JavaMail发送文本、HTML和附件邮件的详细步骤。在实际应用中,还需要考虑错误处理、邮件格式验证、多线程发送等复杂情况。同时,对于企业级应用,通常会使用邮件服务提供商如SendGrid、Mailgun等,它们...

    javamail发送html邮件

    ### JavaMail 发送 HTML 格式邮件的知识点详解 #### 一、JavaMail 概述 JavaMail API 是一个用于发送、接收电子邮件的标准接口集合,它支持多种协议(如 SMTP、IMAP 和 POP3),使得 Java 应用程序能够轻松地发送和...

    JavaMail(3)——发送带附件的邮件.docx

    下面将详细解释如何利用JavaMail发送带有附件的邮件。 首先,你需要导入以下关键的JavaMail和Java Activation Framework (JAF) 类: ```java import javax.mail.*; import javax.mail.internet.*; import javax....

    james和javamail实现邮件收发(带发送附件)

    下面是一个简化的JavaMail发送邮件的过程: 1. **配置邮件会话**:首先,我们需要创建一个`Properties`对象,并设置SMTP服务器的相关参数,如主机名和端口号。然后,通过`Session.getInstance()`方法初始化一个邮件...

    javamail入门1--发送简单的文本邮件

    这个简单的示例演示了如何使用 JavaMail 发送文本邮件。对于更复杂的邮件,如包含 HTML 内容、附件或嵌入图片,你可以扩展 `MimeMessage`,使用 `MimeBodyPart` 和 `Multipart` 类来构建复杂的邮件结构。 总的来说...

    用javaMail发送邮件

    在实际开发中,可能还需要处理更多复杂情况,如SSL/TLS加密、HTML邮件、多部分消息等。JavaMail API提供了丰富的功能来应对这些需求,让开发者能够灵活地构建邮件系统。 博客链接中提到的ITEYE博客...

    javamail发送邮件.zip

    这个“javamail发送邮件.zip”压缩包显然包含了一个示例项目,演示如何使用JavaMail API发送包含正文文本、图片以及附件的邮件。以下是对这个主题的详细解释: 1. **JavaMail API**: JavaMail API 是一组接口和类...

    JavaMail发送带附件的邮件

    以上就是使用JavaMail发送带附件的邮件的基本流程。需要注意的是,实际应用中可能需要处理更多复杂情况,例如错误处理、SSL/TLS加密连接、多部分邮件(包含HTML内容和文本内容)等。同时,确保你有正确的SMTP服务器...

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

    这个库提供了一组API,使得开发者能够轻松地处理复杂的邮件操作,比如发送文本、图片、HTML内容以及附件。在本文中,我们将深入探讨如何使用JavaMail来实现这些功能,并通过一个名为"mail4j"的简单封装示例来展示其...

    javamail 邮件发送支持带有图片的html格式和普通文本格式

    ### JavaMail 发送支持带有图片的 HTML 格式和普通文本格式邮件 #### 概述 JavaMail API 是一个广泛使用的 Java 库,用于发送和接收电子邮件。它提供了丰富的功能来处理不同类型的邮件内容,包括纯文本、HTML 格式...

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

    8. **使用JavaMail发送HTML邮件**:通过设置`MimeMessage`的`setContent()`方法,可以发送包含HTML的邮件。 ```java message.setContent("&lt;h1&gt;HTML邮件标题&lt;/h1&gt;&lt;p&gt;这是HTML邮件正文。&lt;/p&gt;", "text/html;charset=...

    javamail发送邮件实例

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送...以上就是使用JavaMail发送邮件的详细过程,以及与文本编辑器KindEditor的集成方式。在开发过程中,记得根据具体需求调整和优化代码,以满足不同的业务场景。

    用Java类实现JavaMail发送邮件的例子

    在这个例子中,我们将详细探讨如何使用JavaMail发送邮件,包括SMTP认证、添加附件以及发送HTML内容的邮件。 首先,为了使用JavaMail API,我们需要引入相应的库。在这个例子中,`javamail`和`JAF`(JavaBeans ...

    javamail 回执邮件资料

    例如,使用 Commons Email 发送带附件的邮件: ```java SimpleEmail email = new SimpleEmail(); email.setFrom("sender@example.com"); email.setSubject("邮件主题"); email.setMsg("邮件正文"); email....

    javamail发送邮件小程序,类以及写好,只要放包,下载一个就可以

    JavaMail 是一个开源的 Java 库,用于在 Java 应用程序中实现电子邮件的发送和接收。这个小程序可能包含了一套完整的类,可以帮助开发者快速构建邮件发送功能,无需从头开始编写所有必需的代码。 JavaMail 提供了对...

    常规JavaMail 邮件发送实用类

    1. `sendEmail(String from, String to, String subject, String body)`: 这个方法用于发送简单的文本邮件,参数分别为发件人、收件人、邮件主题和邮件正文。 2. `sendHtmlEmail(String from, String to, String ...

    javamail 收发电子邮件

    在JavaMail中,我们不仅可以发送纯文本邮件,还可以发送HTML格式的邮件、带有附件的邮件,甚至可以进行复杂的邮件会话管理和联系人操作。 1. SMTP 协议:SMTP 是互联网上传输电子邮件的标准协议。JavaMail 使用 `...

    jsp/servlet javamail 发送邮件 可发送多个附件

    在Java Web开发中,JSP(JavaServer ...总的来说,这个JSP/Servlet邮件系统利用JavaMail API实现了发送多附件邮件的功能,但也需要注意编码问题和安全性。通过不断优化和调试,可以构建出稳定且功能丰富的邮件服务。

    JavaMail 具备垃圾邮件过滤功能的邮箱

    这个项目不仅提供了SMTP、POP3和IMAP协议的支持,还包含了丰富的API,可以方便地处理邮件的MIME编码、附件、HTML内容等复杂格式。在描述中提到的“具备垃圾邮件过滤功能的邮箱”是一个基于JavaMail实现的邮件系统,...

    Javamail发送邮件类库

    textPart.setText("这是HTML邮件内容"); MimeBodyPart attachmentPart = new MimeBodyPart(); attachmentPart.attachFile("path/to/attachment.txt"); Multipart multipart = new MimeMultipart(); multipart....

Global site tag (gtag.js) - Google Analytics