Java邮件群发(web版)

简介: 1、本程序可实现网页文件、普通文件的发送。2、实现邮件发送需要三个jar包的支持:commons-codec-1.3.jar、commons-httpclient-3.0.jar(这两个jar包实现抓取互联网网页内容)以及mail.jar具体实现:一、首先建立MailAuthenticator类,继承自javax.mail.Authenticator类。
1、本程序可实现网页文件、普通文件的发送。
2、实现邮件发送需要三个jar包的支持: commons-codec-1.3.jarcommons-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,一般用于发送的网页文件都是按上面说的要求,自己另外制作的,专门用于邮件发送的网页。在互联网上抓取的网页发送后,一般都不能在收件箱中完美的显示

 

相关文章
|
1月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
260 1
|
1月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
192 0
|
2月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
383 63
|
2月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
213 1
|
3月前
|
缓存 NoSQL Java
Java Web 从入门到精通之苍穹外卖项目实战技巧
本项目为JavaWeb综合实战案例——苍穹外卖系统,涵盖Spring Boot 3、Spring Cloud Alibaba、Vue 3等主流技术栈,涉及用户认证、订单处理、Redis缓存、分布式事务、系统监控及Docker部署等核心功能,助你掌握企业级项目开发全流程。
398 0
|
3月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
211 0
|
8月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
462 7
|
9月前
|
Kubernetes Java 持续交付
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
483 9
|
10月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
368 7
Spring Boot 入门:简化 Java Web 开发的强大工具
|
11月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
331 7