`
sea0108
  • 浏览: 54740 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Javamail邮件发送程序(smtp)

阅读更多
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
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;
import javax.mail.internet.MimeUtility;

import org.apache.commons.lang.StringUtils;

/**
 * 邮件发送器,方法调用顺序:<code>connect->send->close</code>。
 */
public class MailSender {
	public static final String DEFAULT_MIME_TYPE = "text/html;charset=gb2312";

	private String smtp;
	private String serverName;
	private String serverPasswd;
	private String from;

	private Session session;
	private Transport transport;

	/**
	 * 构造器
	 * 
	 * @param smtp
	 *            SMTP服务地址
	 * @param serverName
	 *            服务用户名
	 * @param serverPasswd
	 *            服务密码
	 * @param from
	 *            发送邮件的Email
	 */
	public MailSender(String smtp, String serverName, String serverPasswd,
			String from) {
		super();
		this.smtp = smtp;
		this.serverName = serverName;
		this.serverPasswd = serverPasswd;
		this.from = from;
	}
	
	/**
	 * 连接邮件服务器
	 */
	public void connect() throws NoSuchProviderException {
		// ResourceBundle mailProps = ResourceBundle.getBundle("mail");
		// 可以从配置文件读取相应的参数
		Properties props = System.getProperties(); // 获得系统属性对象
		props.put("mail.smtp.host", smtp); // 设置SMTP主机
		props.put("mail.smtp.auth", "true"); // 是否到服务器用户名和密码验证
		// 到服务器验证发送的用户名和密码是否正确
		MailAutherticator emailAuther = new MailAutherticator(this.serverName,
				this.serverPasswd);
		// 设置邮件会话
		this.session = Session.getInstance(props, emailAuther);
		// 设置传输协议
		this.transport = session.getTransport("smtp");
	}

	/**
	 * 发送邮件
	 * 
	 * @param toEmails
	 *            邮件接收地址列表
	 * @param subject
	 *            主题
	 * @param content
	 *            正文
	 * @param fileNames
	 *            附件列表(文件名,显示名称). <code>null</code>表示无附件.
	 * @param mimeType
	 *            MIME 类型
	 * @throws MessagingException
	 * @throws UnsupportedEncodingException
	 *             如果读取附件或发送失败
	 */
	public void send(String[] toEmails, String subject, String content,
			String[] fileNames, String mimeType) throws MessagingException,
			UnsupportedEncodingException {
		// 设置from、to等信息
		MimeMessage mimeMsg = new MimeMessage(this.session);
		if (!StringUtils.isEmpty(this.from)) {
			InternetAddress sentFrom = new InternetAddress(this.from);
			mimeMsg.setFrom(sentFrom); // 设置发送人地址
		}

		InternetAddress[] sendTo = new InternetAddress[toEmails.length];
		for (int i = 0; i < toEmails.length; i++) {
			sendTo[i] = new InternetAddress(toEmails[i]);
		}

		mimeMsg.setRecipients(MimeMessage.RecipientType.TO, sendTo);
		mimeMsg.setSubject(subject, Charset.defaultCharset().name());

		MimeBodyPart messageBodyPart1 = new MimeBodyPart();
		messageBodyPart1.setContent(content, mimeType);

		Multipart multipart = new MimeMultipart();// 附件传输格式
		multipart.addBodyPart(messageBodyPart1);
		if (fileNames != null) {
			for (int i = 0; i < fileNames.length; i++) {
				MimeBodyPart messageBodyPart2 = new MimeBodyPart();
				String[] strings = fileNames[i].split(",");
				// 选择出每一个附件名
				String fileName = strings[0];
				String displayName = strings[1];
				// 得到数据源
				FileDataSource fds = new FileDataSource(fileName);
				// 得到附件本身并至入BodyPart
				messageBodyPart2.setDataHandler(new DataHandler(fds));
				// 得到文件名同样至入BodyPart
				messageBodyPart2.setFileName(MimeUtility
						.encodeText(displayName));
				multipart.addBodyPart(messageBodyPart2);
			}
		}
		mimeMsg.setContent(multipart);
		// 设置信件头的发送日期
		mimeMsg.setSentDate(new Date());
		mimeMsg.saveChanges();
		// 发送邮件
		Transport.send(mimeMsg);
	}

	/**
	 * 关闭连接
	 */
	public void close()  {
		try {
			transport.close();
		} catch (MessagingException e) {
			throw new MailException("关闭连接出错",e);
		}
	}

	/**
	 * 发送邮件(DEFAULT_MIME_TYPE)
	 * 
	 * @param toEmails
	 *            邮件接收地址列表
	 * @param subject
	 *            主题
	 * @param content
	 *            正文
	 * @param fileNames
	 *            附件列表(文件名,显示名称). <code>null</code>表示无附件.
	 * 
	 * @throws MessagingException
	 * @throws UnsupportedEncodingException
	 *             如果读取附件或发送失败
	 */
	public void send(String[] toEmails, String subject, String content,
			String[] fileNames) throws MessagingException,
			UnsupportedEncodingException {
		this.send(toEmails, subject, content, fileNames, DEFAULT_MIME_TYPE);
	}

	/**
	 * 发送邮件(无附件,DEFAULT_MIME_TYPE)
	 * 
	 * @param toEmails
	 *            邮件接收地址列表
	 * @param subject
	 *            主题
	 * @param content
	 *            正文
	 * 
	 * @throws MessagingException
	 * @throws UnsupportedEncodingException
	 *             如果读取附件或发送失败
	 */
	public void send(String[] toEmails, String subject, String content)
			throws MessagingException, UnsupportedEncodingException {
		this.send(toEmails, subject, content, null, DEFAULT_MIME_TYPE);
	}

	/**
	 * 发送邮件(无正文,无附件,DEFAULT_MIME_TYPE)
	 * 
	 * @param toEmails
	 *            邮件接收地址列表
	 * @param subject
	 *            主题
	 * 
	 * @throws MessagingException
	 * @throws UnsupportedEncodingException
	 *             如果读取附件或发送失败
	 */
	public void send(String[] toEmails, String subject)
			throws MessagingException, UnsupportedEncodingException {
		this.send(toEmails, subject, "", null, DEFAULT_MIME_TYPE);
	}
}


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

/**
 * 邮件服务器验证
 */
public class MailAutherticator extends Authenticator {
	private String username;
	private String userpass;

	public void setUsername(String username) {
		this.username = username;
	}

	public void setUserpass(String userpass) {
		this.userpass = userpass;
	}

	public MailAutherticator(String username, String userpass) {
		super();
		setUsername(username);
		setUserpass(userpass);
	}

	public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(username, userpass);
	}
}
分享到:
评论

相关推荐

    javamail邮件发送程序

    JavaMail邮件发送程序是Java平台上的一个开源库,用于处理电子邮件的发送和接收。这个程序允许开发者通过SMTP(简单邮件传输协议)、POP3(邮局协议)或IMAP(因特网消息访问协议)等标准协议来收发邮件。在Java EE...

    javamail邮件发送工具类

    JavaMail邮件发送工具类是Java开发中用于发送电子邮件的标准库,它提供了丰富的API来处理复杂的邮件功能。在JavaMail中,我们可以通过创建特定的类和对象来实现邮件的发送。以下将详细介绍这些类以及如何使用它们。 ...

    JavaMail邮件发送Deom

    JavaMail邮件发送Demo是Java开发中用于实现电子邮件发送的一个实例,它依赖于两个关键的库:activation.jar和mail.jar。这两个库提供了JavaMail API,使得Java开发者能够方便地与各种邮件服务器进行交互,完成邮件的...

    JavaMail邮件发送源码 非常简单

    为了确保邮件发送的成功,开发者需要了解SMTP服务器的设置,包括是否需要SSL/TLS加密连接,以及正确的端口号。某些邮件服务商如Gmail、Yahoo、Outlook等可能需要开启"不安全的应用程序访问"权限。 总的来说,...

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

    这个小程序可能包含了一套完整的类,可以帮助开发者快速构建邮件发送功能,无需从头开始编写所有必需的代码。 JavaMail 提供了对 SMTP(简单邮件传输协议)、POP3(邮局协议)和 IMAP(因特网消息访问协议)等标准...

    javamail邮件发送实例

    JavaMail邮件发送实例是Java开发中常见的一个应用场景,主要用于实现程序自动发送电子邮件的功能。这个实例可以帮助开发者理解如何使用JavaMail API来构建邮件服务。在JavaMail API中,我们可以使用MimeMessage类...

    Spring实现JavaMail邮件发送功能

    在本篇文章中,我们将深入探讨如何利用Spring来实现JavaMail邮件发送,以及在实际应用中需要注意的关键点。 首先,我们需要理解JavaMail API的基础概念。JavaMail是一个用于处理邮件的开放源码API,它允许开发者...

    javaMail实现发送邮件的demo

    JavaMail 是一个开源的 Java 库,用于处理电子邮件的发送和接收。它提供了一组 API,使得开发者可以方便地在 Java 应用...请确保遵循你的邮件服务提供商的政策,并注意不要滥用邮件发送服务,以免被标记为垃圾邮件。

    如何用javamail定时发送邮件

    2. **创建邮件发送函数**: 创建一个方法来使用 JavaMail 发送邮件。这通常包括配置 SMTP 服务器信息,创建 `Session` 对象,以及构建 `MimeMessage` 实例。 ```java import javax.mail.*; import javax.mail....

    java javamail 邮件发送

    在`test.java`文件中,你可以看到这些步骤的实现,通过运行该文件进行邮件发送的测试。请注意,为了安全起见,实际应用中不应硬编码敏感信息如用户名和密码,而应使用环境变量或配置文件。 总的来说,JavaMail提供...

    使用JAVAMail代发邮件

    这个类称为 MailInfo,包含了邮件的各种信息,例如邮件服务器的主机名和端口号、邮件发送者的地址、邮件接收者的地址、邮件主题、邮件内容、邮件附件等。 在 MailInfo 类中,我们定义了多个成员变量,用于存储邮件...

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

    JavaMail是一种广泛使用的Java库,用于在应用程序中发送电子邮件。这个标题"JavaMail发送邮件(文本、html、附件)"涵盖了使用JavaMail API发送不同格式邮件的核心功能。下面将详细介绍如何利用JavaMail发送文本、...

    javaMail 邮件发送样例

    这个样例项目很可能是为了演示如何使用 JavaMail API 来构建邮件发送功能。在 JavaMail 中,我们主要会接触到 javax.mail 和 javax.mail.internet 这两个核心包,它们提供了处理邮件的所有必要工具。 1. **SMTP ...

    smtp认证的邮件发送程序

    在编程实现邮件发送程序时,常用的库有Python的smtplib和email库,Java的JavaMail API等。这些库提供了封装好的函数,简化了SMTP交互的过程。 理解SMTP认证的邮件发送程序,还需要了解以下知识点: - **MX记录**:...

    Java web中javamail邮件发送实现案例.docx

    JavaMail是一个开源库,它提供了标准的API来处理SMTP(简单邮件传输协议)和其他邮件协议,使得开发者能够在应用程序中方便地发送和接收电子邮件。下面我们将详细讨论如何使用JavaMail发送带有附件的邮件。 首先,...

    用javaMail发送邮件

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个功能通常涉及到SMTP(简单邮件...在使用JavaMail时,了解并掌握这些基础知识是至关重要的,可以帮助开发者构建稳定、可靠的邮件发送功能。

    使用javaMail发送邮件

    JavaMail 是一个开源库,用于在Java应用程序中发送和接收电子邮件。这个库提供了一组API,使得开发者可以方便地处理SMTP、POP3、IMAP等邮件协议。在本篇文章中,我们将深入探讨如何使用JavaMail API来实现邮件的发送...

    smtp邮件发送程序

    SMTP(Simple Mail Transfer Protocol)邮件发送程序是一种基于TCP/IP协议的网络通信协议,主要用于在互联网上发送电子邮件。这个资源可能是为了帮助用户理解SMTP的工作原理,以及如何通过编程实现邮件发送功能。...

    jsp+javamail邮件发送代码

    总的来说,`jsp+javamail`的组合使得开发者能够在web应用中轻松实现邮件发送功能。这对于用户注册确认、系统通知、忘记密码重置等场景非常有用。通过理解和实践这个过程,初学者不仅可以掌握邮件发送的技术,还能...

    关于用javamail发送邮件时,由于邮件服务器要SSL,解决办法

    在使用JavaMail进行邮件发送时,如果邮件服务器配置了SSL/TLS,我们需要在代码中启用相应的安全设置。 在`SendMail.java`中,我们需要设置以下关键参数: 1. `Properties props`:这是一个属性对象,用来存储连接...

Global site tag (gtag.js) - Google Analytics