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邮件发送程序是Java平台上的一个开源库,用于处理电子邮件的发送和接收。这个程序允许开发者通过SMTP(简单邮件传输协议)、POP3(邮局协议)或IMAP(因特网消息访问协议)等标准协议来收发邮件。在Java EE...
JavaMail邮件发送工具类是Java开发中用于发送电子邮件的标准库,它提供了丰富的API来处理复杂的邮件功能。在JavaMail中,我们可以通过创建特定的类和对象来实现邮件的发送。以下将详细介绍这些类以及如何使用它们。 ...
JavaMail邮件发送Demo是Java开发中用于实现电子邮件发送的一个实例,它依赖于两个关键的库:activation.jar和mail.jar。这两个库提供了JavaMail API,使得Java开发者能够方便地与各种邮件服务器进行交互,完成邮件的...
为了确保邮件发送的成功,开发者需要了解SMTP服务器的设置,包括是否需要SSL/TLS加密连接,以及正确的端口号。某些邮件服务商如Gmail、Yahoo、Outlook等可能需要开启"不安全的应用程序访问"权限。 总的来说,...
这个小程序可能包含了一套完整的类,可以帮助开发者快速构建邮件发送功能,无需从头开始编写所有必需的代码。 JavaMail 提供了对 SMTP(简单邮件传输协议)、POP3(邮局协议)和 IMAP(因特网消息访问协议)等标准...
JavaMail邮件发送实例是Java开发中常见的一个应用场景,主要用于实现程序自动发送电子邮件的功能。这个实例可以帮助开发者理解如何使用JavaMail API来构建邮件服务。在JavaMail API中,我们可以使用MimeMessage类...
在本篇文章中,我们将深入探讨如何利用Spring来实现JavaMail邮件发送,以及在实际应用中需要注意的关键点。 首先,我们需要理解JavaMail API的基础概念。JavaMail是一个用于处理邮件的开放源码API,它允许开发者...
JavaMail 是一个开源的 Java 库,用于处理电子邮件的发送和接收。它提供了一组 API,使得开发者可以方便地在 Java 应用...请确保遵循你的邮件服务提供商的政策,并注意不要滥用邮件发送服务,以免被标记为垃圾邮件。
2. **创建邮件发送函数**: 创建一个方法来使用 JavaMail 发送邮件。这通常包括配置 SMTP 服务器信息,创建 `Session` 对象,以及构建 `MimeMessage` 实例。 ```java import javax.mail.*; import javax.mail....
在`test.java`文件中,你可以看到这些步骤的实现,通过运行该文件进行邮件发送的测试。请注意,为了安全起见,实际应用中不应硬编码敏感信息如用户名和密码,而应使用环境变量或配置文件。 总的来说,JavaMail提供...
这个类称为 MailInfo,包含了邮件的各种信息,例如邮件服务器的主机名和端口号、邮件发送者的地址、邮件接收者的地址、邮件主题、邮件内容、邮件附件等。 在 MailInfo 类中,我们定义了多个成员变量,用于存储邮件...
JavaMail是一种广泛使用的Java库,用于在应用程序中发送电子邮件。这个标题"JavaMail发送邮件(文本、html、附件)"涵盖了使用JavaMail API发送不同格式邮件的核心功能。下面将详细介绍如何利用JavaMail发送文本、...
这个样例项目很可能是为了演示如何使用 JavaMail API 来构建邮件发送功能。在 JavaMail 中,我们主要会接触到 javax.mail 和 javax.mail.internet 这两个核心包,它们提供了处理邮件的所有必要工具。 1. **SMTP ...
在编程实现邮件发送程序时,常用的库有Python的smtplib和email库,Java的JavaMail API等。这些库提供了封装好的函数,简化了SMTP交互的过程。 理解SMTP认证的邮件发送程序,还需要了解以下知识点: - **MX记录**:...
JavaMail是一个开源库,它提供了标准的API来处理SMTP(简单邮件传输协议)和其他邮件协议,使得开发者能够在应用程序中方便地发送和接收电子邮件。下面我们将详细讨论如何使用JavaMail发送带有附件的邮件。 首先,...
JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个功能通常涉及到SMTP(简单邮件...在使用JavaMail时,了解并掌握这些基础知识是至关重要的,可以帮助开发者构建稳定、可靠的邮件发送功能。
JavaMail 是一个开源库,用于在Java应用程序中发送和接收电子邮件。这个库提供了一组API,使得开发者可以方便地处理SMTP、POP3、IMAP等邮件协议。在本篇文章中,我们将深入探讨如何使用JavaMail API来实现邮件的发送...
SMTP(Simple Mail Transfer Protocol)邮件发送程序是一种基于TCP/IP协议的网络通信协议,主要用于在互联网上发送电子邮件。这个资源可能是为了帮助用户理解SMTP的工作原理,以及如何通过编程实现邮件发送功能。...
总的来说,`jsp+javamail`的组合使得开发者能够在web应用中轻松实现邮件发送功能。这对于用户注册确认、系统通知、忘记密码重置等场景非常有用。通过理解和实践这个过程,初学者不仅可以掌握邮件发送的技术,还能...
在使用JavaMail进行邮件发送时,如果邮件服务器配置了SSL/TLS,我们需要在代码中启用相应的安全设置。 在`SendMail.java`中,我们需要设置以下关键参数: 1. `Properties props`:这是一个属性对象,用来存储连接...