`
asheng
  • 浏览: 12726 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

利用Javamail发送邮件(支持附件)

    博客分类:
  • Java
阅读更多
准备Javamail包,下载地址http://www.oracle.com/technetwork/java/index-138643.html,具体实现如下:
package org.asheng.util;

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

import javax.activation.DataHandler;
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;

import org.asheng.model.Email;

/**
 * 邮件发送器,支持附件
 * @author Harrison Wang
 */
public class MailSender {

	/* 定义邮件身份验证器 */
	private EmailAuthenticator authenticator;

	/**
	 * 以文本方式发送邮件
	 * @param email 待发送邮件的信息
	 * @return 成功则返回true,反之则返回false
	 */
	public boolean sendTextMail(Email email) {
		// 获取邮件会话属性
		Properties props = email.getProperties();
		// 判断是否需要身份验证,如需身份验证,则创建一个身份验证器
		if (email.isValidate()) {
			authenticator = new EmailAuthenticator(email.getUserName(),
					email.getPassword());
		}
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session session = Session.getDefaultInstance(props, authenticator);
		// 根据session创建一个邮件消息
		Message message = new MimeMessage(session);
		try {
			// 创建邮件发送者地址
			Address from = new InternetAddress(email.getFormAddress());
			// 设置邮件消息发送者
			message.setFrom(from);
			// 创建邮件的接收者地址,并设置到邮件消息中
			Address to = new InternetAddress(email.getToAddress());
			message.setRecipient(Message.RecipientType.TO, to);
			// 设置邮件消息主题
			message.setSubject(email.getSubject());
			// 设置邮件消息发送的时间
			message.setSentDate(new Date());
			// 设置邮件消息主要内容
			message.setText(email.getContent());
			// 发送邮件
			Transport.send(message);
			return true;
		} catch (AddressException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		}
		return false;
	}
	
	/**
	 * 以HTML方式发送邮件
	 * @param email 待发送邮件的信息
	 * @return 成功则返回true,反之则返回false
	 */
	public boolean sendHtmlMail(Email email) {
		// 获取邮件会话属性
		Properties props = email.getProperties();
		// 判断是否需要身份验证,如需身份验证,则创建一个身份验证器
		if (email.isValidate()) {
			authenticator = new EmailAuthenticator(email.getUserName(),
					email.getPassword());
		}
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session session = Session.getDefaultInstance(props, authenticator);
		// 根据session创建一个邮件消息
		Message message = new MimeMessage(session);
		try {
			// 创建邮件发送者地址
			Address from = new InternetAddress(email.getFormAddress());
			// 设置邮件消息发送者
			message.setFrom(from);
			// 创建邮件的接收者地址,并设置到邮件消息中
			Address to = new InternetAddress(email.getToAddress());
			message.setRecipient(Message.RecipientType.TO, to);
			// 设置邮件消息主题
			message.setSubject(email.getSubject());
			// 设置邮件消息发送的时间
			message.setSentDate(new Date());
			
			// MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象
			Multipart multipart = new MimeMultipart();
			
			// 创建一个包含HTML内容的MimeBodyPart
			BodyPart html = new MimeBodyPart();
			// 设置HTML内容
			html.setContent(email.getContent(),"text/html; charset=UTF-8");
			// 添加到Multipart容器类中
			multipart.addBodyPart(html);
			
			// 创建一个包含附件的	MimeBodyPart
			BodyPart attachmentInfo = new MimeBodyPart();
			// 得到数据源
			FileDataSource dataSource = new FileDataSource(
					email.getAttachmentName());
			// 得到附件本身并绑定到对象BodyPart中
			attachmentInfo.setDataHandler(new DataHandler(dataSource));
			// 设置附件名称,处理中文文件名
			attachmentInfo.setFileName(MimeUtility.encodeWord(
					dataSource.getName(), "text/html; charset=UTF-8", "UTF-8"));
			// 添加到Multipart容器类中
			multipart.addBodyPart(attachmentInfo);
			
			// 将MimeMultipart对象设置为邮件内容  
			message.setContent(multipart);
			
			// 发送邮件
			Transport.send(message);
			return true;
		} catch (AddressException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return false;
	}
	
	public static void main(String[] args) {
		MailSender sms = new MailSender();
		Email email = new Email();
		email.setServerHost("smtp.163.com");
		email.setServerPort("25");
		email.setUserName("harrison@163.com");
		email.setPassword("**********");
		email.setFormAddress("harrison@163.com");
		email.setToAddress("harrison@qq.com");
		email.setSubject("harrison 你好!");
		email.setContent("<font color='red'>Hello Harrison!</font>");
		email.setAttachmentName("D:/Download/Converter.rar");
//		sms.sendTextMail(email);
		sms.sendHtmlMail(email);
		
	}

}



package org.asheng.model;

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

/**
 * 邮件基本信息类
 * @author Harrison Wang
 */
public class Email implements Serializable {
	private static final long serialVersionUID = 1L;
	
	// 发送邮件的服务器主机地址
	private String serverHost;
	// 发送邮件的服务器端口
	private String serverPort = "25";
	// 邮件发送者email地址
	private String formAddress;
	// 邮件接收者email地址
	private String toAddress;

	// 登录邮件发送服务器的用户名
	private String userName;
	// 登录邮件发送服务器的密码
	private String password;
	
	// 是否需要身份验证
	private boolean validate = true;

	// 邮件主题
	private String subject;
	// 邮件文本内容
	private String content;
	// 邮件附件的文件名
	private String attachmentName;
	// 邮件发送时间
	private Date sendTime;

	/**
	 * 获取邮件会话属性
	 * @return 返回邮件会话属性
	 */
	public Properties getProperties() {
		Properties props = new Properties();
		props.setProperty("mail.smtp.host", serverHost);
		props.setProperty("mail.smtp.port", serverPort);
		props.setProperty("mail.smtp.auth", validate ? "true" : "false");
		return props;
	}

	public String getServerHost() {
		return serverHost;
	}

	public void setServerHost(String serverHost) {
		this.serverHost = serverHost;
	}

	public String getServerPort() {
		return serverPort;
	}

	public void setServerPort(String serverPort) {
		this.serverPort = serverPort;
	}

	public String getFormAddress() {
		return formAddress;
	}

	public void setFormAddress(String formAddress) {
		this.formAddress = formAddress;
	}

	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 getAttachmentName() {
		return attachmentName;
	}

	public void setAttachmentName(String attachmentName) {
		this.attachmentName = attachmentName;
	}

	public Date getSendTime() {
		return sendTime;
	}

	public void setSendTime(Date sendTime) {
		this.sendTime = sendTime;
	}
	
}



package org.asheng.util;

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

public class EmailAuthenticator extends Authenticator {

	private String userName;
	private String password;
	
	public EmailAuthenticator() {
	}
	
	public EmailAuthenticator(String userName, String password) {
		this.userName = userName;
		this.password = password;
	}

	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(userName, password);
	}
	
}

分享到:
评论

相关推荐

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

    6. **发送邮件**:使用`Transport`类的`send()`方法发送邮件。 ```java Transport.send(message); ``` 7. **添加附件**:如果需要发送附件,可以使用`Multipart`和`BodyPart`类。创建一个`MimeMultipart`对象,...

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

    这个标题"JavaMail发送邮件(文本、html、附件)"涵盖了使用JavaMail API发送不同格式邮件的核心功能。下面将详细介绍如何利用JavaMail发送文本、HTML和包含附件的邮件,以及在实际应用中需要注意的配置步骤。 1. *...

    javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码

    ### JavaMail发送邮件时遇到的问题及解决方法 在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将...

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

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

    利用JavaMail发送邮件示例

    这个示例将详细介绍如何在Java应用程序中使用JavaMail发送邮件。 首先,我们需要引入JavaMail相关的依赖。如果你使用的是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;com.sun.mail&lt;/groupId&gt; ...

    利用javamail发送邮件

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和...通过阅读和理解代码,你可以学习如何在Java应用程序中利用JavaMail API发送邮件。记得在本地环境中配置正确的SMTP服务器信息,以确保邮件能够成功发送。

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

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

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

    下面是一个使用JavaMail发送邮件的详细示例代码: ```java import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class EmailSender { public ...

    javamail收取邮件(包括附件)

    在JavaMail中,我们可以利用其API来实现邮件的收发功能,包括处理附件。下面我们将详细探讨如何使用JavaMail API实现邮件的收取,特别是如何通过POP3和IMAP协议获取邮件信息。 首先,确保你的项目中已经引入了...

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

    2. **SMTP服务器配置**: 在使用JavaMail发送邮件时,首先需要配置SMTP服务器的相关信息,包括主机地址、端口号、用户名和密码。这些信息通常在应用的配置文件中定义,以便在程序运行时加载。 3. **MIME消息**: ...

    JavaMail实现邮件发送功能,可发送、抄送、密送多人,支持多附件的发送

    通过以上步骤,你就可以利用 JavaMail 实现功能完备的邮件发送了,包括向多个人发送邮件、设置抄送和密送,以及添加多个附件。注意,实际使用时,你需要根据你的邮件服务提供商调整相应的配置参数,例如对于其他邮箱...

    使用javaMail发送邮件

    这篇博客文章“使用javaMail发送邮件”可能是介绍如何使用JavaMail API来构建邮件发送功能的教程。下面我们将深入探讨JavaMail的相关知识点。 首先,JavaMail API是Java社区开发的一个开源库,用于处理电子邮件。它...

    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(...

    使用javamail发送邮件

    下面我们将详细探讨如何使用JavaMail发送邮件,以及涉及的关键知识点。 首先,要发送邮件,你需要配置一些必要的参数,包括邮箱账号、密码和SMTP服务器地址(SERVERHOST)。例如,如果你使用的是 Gmail 邮箱,SMTP ...

    java使用javaMail发送邮件

    通过上述步骤,开发者可以利用JavaMail API在Java应用程序中轻松地发送邮件。记住,为了确保邮件的稳定发送,需要根据实际的邮件服务器配置调整代码,比如是否使用TLS/SSL,以及相应的端口号和认证方式。

    javaMail 发邮件

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

    javamail发送、接收邮件

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

    javamail发送邮件源代码

    这个压缩包文件可能包含了一个简单的JavaMail发送邮件的示例源代码,我们可以从中学习如何利用JavaMail API实现邮件的发送功能。 首先,要使用JavaMail发送邮件,你需要引入以下依赖库: ```xml &lt;groupId&gt;...

Global site tag (gtag.js) - Google Analytics