说明:1、本程序可实现网页文件、普通文件的发送。
2、实现邮件发送需要三个jar包的支持:commons-codec-1.3.jar、commons-httpclient-3.0.jar(这两个jar包实现抓取互联网网页内容)以及mail.jar
具体实现:
一、首先建立MailAuthenticator类,继承自javax.mail.Authenticator类。此类实现发件箱的登陆验证。
package com.company.simplemail;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
* 服务器邮箱登录验证
*/
public class MailAuthenticator extends Authenticator {
// 用户名(登录邮箱)
private String username;
// 密码
private String password;
/**
* 初始化邮箱和密码
* @param username 邮箱
* @param password 密码
*/
public MailAuthenticator(String username, String password){
this.username = username;
this.password = password;
}
String getPassword() {
return password;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
String getUsername() {
return username;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
}
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
/**
* 服务器邮箱登录验证
*/
public class MailAuthenticator extends Authenticator {
// 用户名(登录邮箱)
private String username;
// 密码
private String password;
/**
* 初始化邮箱和密码
* @param username 邮箱
* @param password 密码
*/
public MailAuthenticator(String username, String password){
this.username = username;
this.password = password;
}
String getPassword() {
return password;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
String getUsername() {
return username;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
}
二、 建立SimpleMailSender类,此类实现邮件的单发、群发等等,是邮件发送的核心类。
package com.company.simplemail;
import java.util.List;
import java.util.Properties;
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.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
/**
* 简单邮件发送器,可单发,群发。
*/
public class SimpleMailSender {
// 发送邮件的props文件
private final transient Properties props = System.getProperties();
// 邮件服务器登录验证
private transient MailAuthenticator authenticator;
// 邮箱session
private transient Session session;
/**
* 初始化邮件发送器
* @param smtpHostName SMTP邮件服务器地址
* @param username 发送邮件的用户名(地址)
* @param password 发送邮件的密码
*/
public SimpleMailSender(final String smtpHostName, final String username,
final String password) {
init(username, password, smtpHostName);
}
/**
* 初始化邮件发送器
* @param username 发送邮件的用户名(地址),并以此解析SMTP服务器地址
* @param password 发送邮件的密码
*/
public SimpleMailSender(final String username, final String password) {
// 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用
final String smtpHostName = "smtp." + username.split("@")[1];
init(username, password, smtpHostName);
}
/**
* 初始化
* @param username 发送邮件的用户名(地址)
* @param password 密码
* @param smtpHostName SMTP主机地址
*/
private void init(String username, String password, String smtpHostName) {
// 初始化props
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", smtpHostName);
// 验证
authenticator = new MailAuthenticator(username, password);
// 创建session
session = Session.getInstance(props, authenticator);
}
/**
* 发送邮件
* @param recipient收件人邮箱地址
* @param subject邮件主题
* @param content邮件内容
* @throws AddressException
* @throws MessagingException
*/
public void send(String recipient, String subject, String content)
throws AddressException, MessagingException {
// 创建mime类型邮件
final MimeMessage message = new MimeMessage(session);
// 设置发信人
message.setFrom(new InternetAddress(authenticator.getUsername()));
// 设置收件人
message.setRecipient(RecipientType.TO, new InternetAddress(recipient));
// 设置主题
message.setSubject(subject);
// 设置邮件内容
Multipart mp = new MimeMultipart("related");
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(content.toString(),"text/html;charset=utf-8");
mp.addBodyPart(mbp);
message.setContent(mp);
// 设置邮件内容
// message.setContent(content.toString(), "text/html;charset=utf-8");
// 发送
Transport.send(message);
}
/**
* 群发邮件
* @param recipients收件人们
* @param subject 主题
* @param content 内容
* @throws AddressException
* @throws MessagingException
*/
public void send(List<String> recipients, String subject, String content)
throws AddressException, MessagingException {
// 创建mime类型邮件
final MimeMessage message = new MimeMessage(session);
// 设置发信人
message.setFrom(new InternetAddress(authenticator.getUsername()));
// 设置收件人们
final int num = recipients.size();
InternetAddress[] addresses = new InternetAddress[num];
for (int i = 0; i < num; i++) {
addresses[i] = new InternetAddress(recipients.get(i));
}
message.setRecipients(RecipientType.TO, addresses);
// 设置主题
message.setSubject(subject);
// 设置邮件内容
message.setContent(content.toString(), "text/html;charset=utf-8");
// 发送
Transport.send(message);
}
/**
* 发送邮件
* @param recipient收件人邮箱地址
* @param mail邮件对象
* @throws AddressException
* @throws MessagingException
*
*/
public void send(String recipient, SimpleMail mail)
throws AddressException, MessagingException {
send(recipient, mail.getSubject(), mail.getContent());
}
/**
* 群发邮件
* @param recipients 收件人们
* @param mail 邮件对 象
* @throws AddressException
* @throws MessagingException
*/
public void send(List<String> recipients, SimpleMail mail)
throws AddressException, MessagingException {
send(recipients, mail.getSubject(), mail.getContent());
}
}
import java.util.List;
import java.util.Properties;
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.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
/**
* 简单邮件发送器,可单发,群发。
*/
public class SimpleMailSender {
// 发送邮件的props文件
private final transient Properties props = System.getProperties();
// 邮件服务器登录验证
private transient MailAuthenticator authenticator;
// 邮箱session
private transient Session session;
/**
* 初始化邮件发送器
* @param smtpHostName SMTP邮件服务器地址
* @param username 发送邮件的用户名(地址)
* @param password 发送邮件的密码
*/
public SimpleMailSender(final String smtpHostName, final String username,
final String password) {
init(username, password, smtpHostName);
}
/**
* 初始化邮件发送器
* @param username 发送邮件的用户名(地址),并以此解析SMTP服务器地址
* @param password 发送邮件的密码
*/
public SimpleMailSender(final String username, final String password) {
// 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用
final String smtpHostName = "smtp." + username.split("@")[1];
init(username, password, smtpHostName);
}
/**
* 初始化
* @param username 发送邮件的用户名(地址)
* @param password 密码
* @param smtpHostName SMTP主机地址
*/
private void init(String username, String password, String smtpHostName) {
// 初始化props
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", smtpHostName);
// 验证
authenticator = new MailAuthenticator(username, password);
// 创建session
session = Session.getInstance(props, authenticator);
}
/**
* 发送邮件
* @param recipient收件人邮箱地址
* @param subject邮件主题
* @param content邮件内容
* @throws AddressException
* @throws MessagingException
*/
public void send(String recipient, String subject, String content)
throws AddressException, MessagingException {
// 创建mime类型邮件
final MimeMessage message = new MimeMessage(session);
// 设置发信人
message.setFrom(new InternetAddress(authenticator.getUsername()));
// 设置收件人
message.setRecipient(RecipientType.TO, new InternetAddress(recipient));
// 设置主题
message.setSubject(subject);
// 设置邮件内容
Multipart mp = new MimeMultipart("related");
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(content.toString(),"text/html;charset=utf-8");
mp.addBodyPart(mbp);
message.setContent(mp);
// 设置邮件内容
// message.setContent(content.toString(), "text/html;charset=utf-8");
// 发送
Transport.send(message);
}
/**
* 群发邮件
* @param recipients收件人们
* @param subject 主题
* @param content 内容
* @throws AddressException
* @throws MessagingException
*/
public void send(List<String> recipients, String subject, String content)
throws AddressException, MessagingException {
// 创建mime类型邮件
final MimeMessage message = new MimeMessage(session);
// 设置发信人
message.setFrom(new InternetAddress(authenticator.getUsername()));
// 设置收件人们
final int num = recipients.size();
InternetAddress[] addresses = new InternetAddress[num];
for (int i = 0; i < num; i++) {
addresses[i] = new InternetAddress(recipients.get(i));
}
message.setRecipients(RecipientType.TO, addresses);
// 设置主题
message.setSubject(subject);
// 设置邮件内容
message.setContent(content.toString(), "text/html;charset=utf-8");
// 发送
Transport.send(message);
}
/**
* 发送邮件
* @param recipient收件人邮箱地址
* @param mail邮件对象
* @throws AddressException
* @throws MessagingException
*
*/
public void send(String recipient, SimpleMail mail)
throws AddressException, MessagingException {
send(recipient, mail.getSubject(), mail.getContent());
}
/**
* 群发邮件
* @param recipients 收件人们
* @param mail 邮件对 象
* @throws AddressException
* @throws MessagingException
*/
public void send(List<String> recipients, SimpleMail mail)
throws AddressException, MessagingException {
send(recipients, mail.getSubject(), mail.getContent());
}
}
package com.company.simplemail;
public class SimpleMail {
//邮件中的主题
private String subject;
//邮件的内容(正文)
private String content;
//可根据需要增加其他邮件元素
public void setSubject(String subject) {
this.subject = subject;
}
public void setContent(String content) {
this.content = content;
}
public String getSubject() {
return subject;
}
public String getContent() {
return content;
}
}
public class SimpleMail {
//邮件中的主题
private String subject;
//邮件的内容(正文)
private String content;
//可根据需要增加其他邮件元素
public void setSubject(String subject) {
this.subject = subject;
}
public void setContent(String content) {
this.content = content;
}
public String getSubject() {
return subject;
}
public String getContent() {
return content;
}
}
四、建立ReadHtmlFile类,此类用来读取网页文件(当然也能读取普通文件),将文件转换成String用来发送
package com.company.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
public class ReadHtmlFile {
public static HttpClient client = new HttpClient();
//读取普通文件
public static String readFile(String filename) {
File file = new File(filename);
Reader reader = null;
StringBuffer stb = new StringBuffer();
int charread = 0;
char[] temps = new char[100];
try {
reader = new InputStreamReader(new FileInputStream(file));
while ((charread = reader.read(temps)) != -1) {
if (charread == temps.length) {
stb.append(temps);
temps = new char[100];
charread = 0;
}
}
stb.append(temps);
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
String str = stb.toString();
return str;
}
/**
*
* 所要发送的网页中,不要使用外联样式,脚本等,
* 因为各大邮箱后台的过滤算法会过滤掉css,script等
* 样式用标签style属性写
* 图片、链接必须使用绝对地址 (http://.....) 形式才能接收显示
* */
public static String getSource(String url) {
GetMethod method = new GetMethod(url);
try {
client.executeMethod(method);
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
InputStream in = null;
try {
in = method.getResponseBodyAsStream();
} catch (IOException e1) {
// e1.printStackTrace();
}
in = new BufferedInputStream(in);
Reader r = new InputStreamReader(in);
int c;
StringBuffer buffer = new StringBuffer();
try {
while ((c = r.read()) != -1)
buffer.append((char) c);
} catch (IOException e) {
e.printStackTrace();
}
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
method.releaseConnection();
return buffer.toString();
}
}
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
public class ReadHtmlFile {
public static HttpClient client = new HttpClient();
//读取普通文件
public static String readFile(String filename) {
File file = new File(filename);
Reader reader = null;
StringBuffer stb = new StringBuffer();
int charread = 0;
char[] temps = new char[100];
try {
reader = new InputStreamReader(new FileInputStream(file));
while ((charread = reader.read(temps)) != -1) {
if (charread == temps.length) {
stb.append(temps);
temps = new char[100];
charread = 0;
}
}
stb.append(temps);
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
String str = stb.toString();
return str;
}
/**
*
* 所要发送的网页中,不要使用外联样式,脚本等,
* 因为各大邮箱后台的过滤算法会过滤掉css,script等
* 样式用标签style属性写
* 图片、链接必须使用绝对地址 (http://.....) 形式才能接收显示
* */
public static String getSource(String url) {
GetMethod method = new GetMethod(url);
try {
client.executeMethod(method);
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
InputStream in = null;
try {
in = method.getResponseBodyAsStream();
} catch (IOException e1) {
// e1.printStackTrace();
}
in = new BufferedInputStream(in);
Reader r = new InputStreamReader(in);
int c;
StringBuffer buffer = new StringBuffer();
try {
while ((c = r.read()) != -1)
buffer.append((char) c);
} catch (IOException e) {
e.printStackTrace();
}
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
method.releaseConnection();
return buffer.toString();
}
}
五、建立测试类,可以发送邮件了!!!
package com.company.simplemail;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.company.util.ReadHtmlFile;
public class MailTest {
/**
* 单发
* */
@Test
public void testSingleSend(){
SimpleMail sm=new SimpleMail();
sm.setSubject("第一封邮件");
String str = ReadHtmlFile.getSource("http://www.baidu.com");
//String str = ReadHtmlFile.readFile("这里填写你需要发送的本地文件路径");
System.out.println(str);
sm.setContent(str);
SimpleMailSender sms=new SimpleMailSender(""这里填写你的发件箱","这里填写你的发件箱密码");
try {
sms.send("这里需要填写接收邮件的邮箱", sm);
System.out.println("执行完成!!");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 群发
*
* */
@Test
public void testMassSend(){
SimpleMail sm=new SimpleMail();
sm.setSubject("第一封邮件");
String str = ReadHtmlFile.getSource("http://www.baidu.com");
//String str = ReadHtmlFile.readFile("这里填写需要发送的本地文件路径");
System.out.println(str);
sm.setContent(str);
SimpleMailSender sms=new SimpleMailSender("这里填写你的发件箱","这里填写你的发件箱密码");
List<String> recipients=new ArrayList<String>();
recipients.add("这里需要填写接收邮件的邮箱");
recipients.add("这里需要填写接收邮件的邮箱");
recipients.add("这里需要填写接收邮件的邮箱");
recipients.add("这里需要填写接收邮件的邮箱");
try {
sms.send(recipients, sm);
System.out.println("执行完成!!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import com.company.util.ReadHtmlFile;
public class MailTest {
/**
* 单发
* */
@Test
public void testSingleSend(){
SimpleMail sm=new SimpleMail();
sm.setSubject("第一封邮件");
String str = ReadHtmlFile.getSource("http://www.baidu.com");
//String str = ReadHtmlFile.readFile("这里填写你需要发送的本地文件路径");
System.out.println(str);
sm.setContent(str);
SimpleMailSender sms=new SimpleMailSender(""这里填写你的发件箱","这里填写你的发件箱密码");
try {
sms.send("这里需要填写接收邮件的邮箱", sm);
System.out.println("执行完成!!");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 群发
*
* */
@Test
public void testMassSend(){
SimpleMail sm=new SimpleMail();
sm.setSubject("第一封邮件");
String str = ReadHtmlFile.getSource("http://www.baidu.com");
//String str = ReadHtmlFile.readFile("这里填写需要发送的本地文件路径");
System.out.println(str);
sm.setContent(str);
SimpleMailSender sms=new SimpleMailSender("这里填写你的发件箱","这里填写你的发件箱密码");
List<String> recipients=new ArrayList<String>();
recipients.add("这里需要填写接收邮件的邮箱");
recipients.add("这里需要填写接收邮件的邮箱");
recipients.add("这里需要填写接收邮件的邮箱");
recipients.add("这里需要填写接收邮件的邮箱");
try {
sms.send(recipients, sm);
System.out.println("执行完成!!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关推荐
### Java实现邮件发送 ...对于初学者来说,理解这些基本概念是非常重要的,这将有助于他们更好地掌握Java邮件发送的功能。同时,注意选择合适的邮箱账户和遵循邮件服务提供商的规定也是至关重要的。
在Java中实现邮件发送,首先需要引入JavaMail的相关依赖。在给出的文件名`JavaMailinTomcatjar`中,我们可以推测这是在Tomcat服务器环境下使用的JavaMail版本,可能包含了Tomcat服务器环境下的配置和依赖。在实际...
总之,Java编程实现邮件发送含身份验证是一个涉及网络编程、SMTP协议、JavaMail API和身份验证等多个知识点的综合任务。通过理解并应用这些概念,你可以创建一个可靠的邮件发送系统,满足各种业务需求。
在提供的压缩包文件中,"src"目录可能包含了上述代码的示例,你可以下载并运行这些代码以实际操作体验Java邮件发送的过程。通过这个demo,你可以更好地理解JavaMail API的使用方法,为你的项目添加邮件功能。
总结,通过JavaMail API和163邮箱的SMTP服务,我们可以轻松地实现邮件发送功能,包括附加文件。同时结合URL监控,可以构建一个自动报警系统,确保在系统出现问题时能够及时通知相关人员。文件"MonitorCode"可能包含...
Java邮件发送是一个常见的任务,尤其在自动化通知、用户...这个压缩包"Java邮件发送.zip"可能包含了实现以上功能的示例代码,供你参考和学习。通过理解和实践这些知识点,你可以熟练掌握在Java环境中发送邮件的方法。
在名为"SocketForSmtp"的压缩包文件中,可能包含了实现上述功能的Java代码示例或者教程。通过阅读和理解这些代码,你可以深入学习如何在Java中使用Socket和SSL/TLS实现SMTP邮件发送。实践是掌握这些知识的最佳方式,...
在你的程序中,你可以将邮件发送功能封装成一个通用的方法,接收必要的参数(如收件人、主题、正文等),然后调用这个方法实现邮件的发送。 8. **注意点** - 安全性:确保使用安全协议,如TLS或SSL,防止密码在...
下面我们将深入探讨如何使用Java实现邮件发送功能,并结合给定的文件名,推测可能包含的内容。 首先,JavaMail API是Java平台上的标准库,用于处理电子邮件。要发送邮件,我们需要引入`javax.mail`和`javax.mail....
在Java编程环境中,电子邮件的发送、接收以及处理Excel文件(XLS格式)是常见的任务,尤其是在数据处理和自动化流程中。下面将详细讲解这两个主要功能的实现。 首先,让我们来看看如何使用Java发送电子邮件。...
Java编程语言提供了丰富的库来实现...在提供的压缩包文件"邮件发送"中,可能包含了上述示例代码的完整实现,你可以下载并参考这些代码来更好地理解邮件发送的Java实现。希望这个教程对你在开发过程中发送邮件有所帮助。
Java邮件发送是一个常见的任务,尤其在企业级应用中,它经常用于发送通知、报告或附件。本教程将深入探讨如何使用纯Java流实现邮件发送功能,重点在于理解邮件协议和如何处理文件传输。 首先,我们需要了解JavaMail...
【Spring进阶—如何用Java代码实现邮件发送】 在现代软件开发中,特别是在企业级应用中,邮件发送是一项常见的功能,比如在进销存系统中发送库存预警通知,或者在招聘网站上验证用户注册时的电子邮件地址。这些场景...
在提供的压缩包文件"mailProject"中,可能包含了完整的邮件发送示例项目,包括了Java源码、配置文件以及模板文件。通过研究这些文件,你可以更好地理解和掌握如何在Java中实现模板邮件的发送。如果你对邮件发送有更...
### JAVA实现邮件发送知识...综上所述,Java实现邮件发送涉及到多个技术点,包括邮件会话的创建、邮件对象的构建以及实际发送操作等。开发者需根据具体需求选择合适的发送方式,并注意异常处理以确保邮件发送的成功率。
本文将深入探讨如何使用JavaMail API在Java应用程序中实现发送邮件的功能,同时也会涉及验证码验证以及网页版邮件发送的实现。 首先,要发送邮件,我们需要引入JavaMail的相关库。通常,这包括`javax.mail`和`javax...
本篇文章将详细讲解如何利用Java实现邮件发送,并结合Apache的相关库来创建邮件发送模板,以提升效率和用户体验。 首先,JavaMail API是Java中用于处理电子邮件的主要库。它提供了丰富的API,可以用来创建、发送和...
总之,Java Mail API 提供了一套完整的框架,帮助开发者轻松实现邮件发送功能。通过配置SMTP服务器信息、创建`MimeMessage`对象、添加附件和正文,以及使用`Transport`发送邮件,你可以实现包含图片和附件的复杂邮件...
总之,`EasyEmailUtil`简化了Java邮件发送的过程,通过封装邮件服务器配置和邮件构建,使得开发者能快速地实现邮件功能,无论是发送简单的文本邮件,还是包含复杂HTML内容和附件的邮件。在实际应用中,这样的工具类...
本文将详细讲解如何使用Java实现邮件发送功能。 首先,我们需要理解JavaMail API,这是一个开源库,提供了在Java应用程序中发送和接收电子邮件的能力。要使用JavaMail,需要引入`javax.mail`和`javax.mail.internet...