http://gaoqifang.blog.51cto.com/2270113/758306
说明: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;
}
}
二、 建立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());
}
}
三、 建立SimpleMail类,这只是个普通邮件类,主要用来封装所要发送的邮件信息。
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;
}
}
四、建立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();
}
}
五、建立测试类,可以发送邮件了!!!
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();
}
}
}
最后再次强调:1,所要发送的网页中,不要使用外联样式,脚本等,因为各大邮箱后台的过滤算法会过滤掉css,script等。
2,样式用标签style属性写
3, 图片、链接必须使用绝对地址 (http://.....) 形式才能接收显示
4,一般用于发送的网页文件都是按上面说的要求,自己另外制作的,专门用于邮件发送的网页。在互联网上抓取的网页发送后,一般都不能在收件箱中完美的显示
分享到:
相关推荐
其次,`javamail-1_4_1.zip` 是 JavaMail 的一个版本库,其中包含库文件、示例代码和相关的 JAR 包,供开发者在项目中使用。开发者可以解压此文件,将 JAR 包添加到项目的类路径中。 最后,`2008美河原创视频....
这个压缩包包含了一组与 JavaMail 相关的源代码和必要的库文件,使得开发者可以快速地理解和实现邮件功能。 1. **mail.jar**:这是一个核心的 JavaMail JAR 文件,包含了 JavaMail API 的所有类和接口,如 `javax....
以下是一个基于JavaMail API 实现邮件发送的类的基本结构和关键知识点: 1. **导入必要的库** 首先,我们需要导入JavaMail API 的相关jar包,如`javax.mail` 和 `javax.mail.internet` 包。在现代项目中,这些依赖...
JavaMail通常与JavaMail Service Provider Interface (JAF/JSP)一起使用,后者负责实现具体的邮件协议。 #### 二、关键类与接口 - **`javax.mail.Session`**:创建邮件会话,是整个JavaMail API的核心。 - **`javax...
本资源是一个集合发送图片,附件,内容,HTML等得JAVAMAIL代码,并且可以同时发送多个附件多个图片,只需填充VO类,即可直接调用并发送邮件,例子已经写好,只要填充上必要值即可,经163,qq,sina测试没有问题,有...
在Java应用程序中,通过JavaMail我们可以方便地实现SMTP(简单邮件传输协议)发送邮件、POP3(邮局协议)和IMAP(因特网消息访问协议)接收邮件等功能。在结合Spring框架时,JavaMail的使用变得更加灵活和高效。 在...
下面是一个简单的JavaMail发送邮件的示例代码: ```java import javax.mail.*; import javax.mail.internet.*; public class HelloWorldMail { public static void main(String[] args) throws Exception { // ...
JavaMail是一个强大的开源库,它允许开发者在Java应用程序中实现电子邮件的发送和接收。这个库提供了丰富的API,可以处理各种复杂的邮件操作,如添加附件、设置SMTP服务器等。本项目"JAVAMail GUI实现!"是基于...
### 基于JavaMail的Web邮件客户端设计与实现的关键知识点 #### 一、JavaMail简介 JavaMail API是Sun Microsystems提供的一套用于发送、接收和处理电子邮件的标准接口集合。它建立在JavaBeans的基础上,提供了丰富...
在IT行业中,Spring框架是Java应用开发的基石,它提供了丰富的功能来简化应用程序的构建,而JavaMail API则是一个用于处理电子邮件的库。本示例将深入探讨如何结合Spring框架和JavaMail API来发送电子邮件,这在许多...
根据提供的代码片段,我们将详细分析如何使用 JavaMail 实现邮件的发送功能。 ##### 1. 导入必需的类库 ```java import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax....
JavaMail 是一个强大的开源库,...请注意,根据QQ邮箱的策略,可能需要定期更新授权码,因此在实现自动发送邮件的系统时,需要考虑到这一点。同时,保持对JavaMail API的最新版本更新,以获取最新的功能和安全修复。
本项目旨在利用JSP和JavaMail API实现在Web应用中发送邮件的功能,主要涉及POP3协议。下面将详细阐述这个过程中的关键知识点。 1. JSP基础: JSP是Java平台上的服务器端脚本语言,它允许开发者在HTML页面中嵌入...
总结起来,JavaMail是Java开发中处理邮件通信的重要工具,它通过简单的API实现了邮件的发送和接收,广泛应用于各种企业级应用和自动化任务中。通过深入理解和实践,你可以轻松地构建出满足各种需求的邮件功能。
这个标题提到的是JavaMail的1.4.3版本,其中包含了mail.jar库文件以及对应的源代码。mail.jar是JavaMail的核心库,包含了处理SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等邮件协议的...
【标题】"韩顺平jsp购物网源码(包含javaMail)"是一个关于构建基于JSP的电子商务网站的示例项目,其中集成了javaMail功能,用于实现电子邮件的发送。这个资源是为学习JSP和JavaMail技术的学生或开发者提供的实践...
在提供的压缩包文件“james+javaMail收发邮件”中,可能包含了示例代码和配置文件,供开发者参考和学习如何在实际项目中实现邮件收发功能,特别是处理中文内容和附件。通过理解和实践这些示例,开发者可以更好地掌握...
本篇将深入探讨如何使用JavaMail实现发送邮件,以及相关的源码分析。 首先,我们需要了解JavaMail的基本组件。`javax.mail`库主要包含以下关键接口和类: 1. `Session`:这是JavaMail的核心,代表与邮件服务器的...
在提供的压缩包文件"javamail实例"中,可能包含了上述代码的完整实现以及其他相关的示例,这些示例可以帮助你更好地理解和使用JavaMail API,比如添加附件、设置HTML格式的邮件内容等。通过深入研究和实践这些示例,...
这个压缩包包含的源代码示例展示了如何使用JavaMail API通过QQ邮箱发送邮件,这对于开发者来说是一个实用的工具,尤其是在开发用户注册验证或通知功能时。让我们深入探讨一下JavaMail的核心概念以及如何使用它与QQ...