Java Mail多人群发与多附件发送

最近公司的项目用到了Java Mail来发送注册邮件,不过,开发的时候都是使用封装好的JAR,以前也不是很了解Java Mail的使用原理。网上很多代码都是只有一部分,看一看也跑不起来,今天正好有时间,自己写了一个实现,放在了自己的工具JAR里。闲话不多说,我的项目是使用Gradle构建的,依赖的引用如下:

//JavaMail
compile('javax.mail:mail:1.4.7')

相当于Maven的groupId,artifactId,version

构建后应该引用了两个JAR:。如果第二个JAR没有的话,大家可以去Maven库找一下,就不多讲述了。

实现的源码如下,一般直接拿来就可以用了~

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
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.MimeMultipart;
import javax.mail.internet.MimeUtility;

/**
 * Java Mail 工具类
 *
 * @author XueQi
 * @version 1.0
 *
 */
public class MailUtils {
	private static String host;
	private static String username;
	private static String password;
	private static String from;
	private static String nick;

	static {
		try {
			// Test Data
			host = "smtp.163.com";
			username = "邮箱用户名";
			password = "邮箱密码";
			from = "[email protected]";
			nick = "测试admin";
			// nick + from 组成邮箱的发件人信息
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 发送邮件
	 *
	 * @param to
	 *            收件人列表,以","分割
	 * @param subject
	 *            标题
	 * @param body
	 *            内容
	 * @param filepath
	 *            附件列表,无附件传递null
	 * @return
	 * @throws MessagingException
	 * @throws AddressException
	 * @throws UnsupportedEncodingException
	 */
	public static boolean sendMail(String to, String subject, String body,
			List<String> filepath) throws AddressException, MessagingException,
			UnsupportedEncodingException {
		// 参数修饰
		if (body == null) {
			body = "";
		}
		if (subject == null) {
			subject = "无主题";
		}
		// 创建Properties对象
		Properties props = System.getProperties();
		// 创建信件服务器
		props.put("mail.smtp.host", host);
		props.put("mail.smtp.auth", "true"); // 通过验证
		// 得到默认的对话对象
		Session session = Session.getDefaultInstance(props, null);
		// 创建一个消息,并初始化该消息的各项元素
		MimeMessage msg = new MimeMessage(session);
		nick = MimeUtility.encodeText(nick);
		msg.setFrom(new InternetAddress(nick + "<" + from + ">"));
		// 创建收件人列表
		if (to != null && to.trim().length() > 0) {
			String[] arr = to.split(",");
			int receiverCount = arr.length;
			if (receiverCount > 0) {
				InternetAddress[] address = new InternetAddress[receiverCount];
				for (int i = 0; i < receiverCount; i++) {
					address[i] = new InternetAddress(arr[i]);
				}
				msg.addRecipients(Message.RecipientType.TO, address);
				msg.setSubject(subject);
				// 后面的BodyPart将加入到此处创建的Multipart中
				Multipart mp = new MimeMultipart();
				// 附件操作
				if (filepath != null && filepath.size() > 0) {
					for (String filename : filepath) {
						MimeBodyPart mbp = new MimeBodyPart();
						// 得到数据源
						FileDataSource fds = new FileDataSource(filename);
						// 得到附件本身并至入BodyPart
						mbp.setDataHandler(new DataHandler(fds));
						// 得到文件名同样至入BodyPart
						mbp.setFileName(fds.getName());
						mp.addBodyPart(mbp);
					}
					MimeBodyPart mbp = new MimeBodyPart();
					mbp.setText(body);
					mp.addBodyPart(mbp);
					// 移走集合中的所有元素
					filepath.clear();
					// Multipart加入到信件
					msg.setContent(mp);
				} else {
					// 设置邮件正文
					msg.setText(body);
				}
				// 设置信件头的发送日期
				msg.setSentDate(new Date());
				msg.saveChanges();
				// 发送信件
				Transport transport = session.getTransport("smtp");
				transport.connect(host, username, password);
				transport.sendMessage(msg,
						msg.getRecipients(Message.RecipientType.TO));
				transport.close();
				return true;
			} else {
				System.out.println("None receiver!");
				return false;
			}
		} else {
			System.out.println("None receiver!");
			return false;
		}
	}

	public static void main(String[] args) throws AddressException,
			UnsupportedEncodingException, MessagingException {
		List<String> filepath = new ArrayList<>();
		filepath.add("E:\\Resources\\Development Test\\AuctionServer\\src\\main\\java\\com\\auction\\dao\\IBaseDAO.java");
		filepath.add("E:\\Resources\\Development Test\\AuctionServer\\src\\main\\java\\com\\auction\\dao\\IMemcacheDAO.java");
		sendMail("[email protected],[email protected]", "注册信息邮件", "注册邮件,有附件",
				filepath);
	}
}

我这里用的是163的邮箱,测试是成功的~

可以看到两个收件人和两个附件

Java Mail多人群发与多附件发送

时间: 2024-08-08 14:29:37

Java Mail多人群发与多附件发送的相关文章

解决java mail发送TXT附件被直接显示在正文中的问题

这两天遇到一个问题,关于使用java mail发送邮件的问题. 详细是这样子的:我使用java mail发送异常报告邮件,邮件中有一个包含异常日志的附件,和关于设备信息的邮件正文.假设日志为log后缀名,那么在我的qq邮箱中显示正常.可是假设把附件的后缀名改为txt之后,就变成把附件中的内容直接显示在邮件正文中了.而我原来设置的邮件正文则不在了. 我的代码是这样写的: 加入附件: public void addAttachment(String filePath, String fileName

java mail邮件发送(带附件) 支持SSL

java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.util.Vector; public class MailSenderInfo { // 发送邮件的server的IP和端口 private String mailServerHost; private String mailServerPort = "25"; // 邮件发送者的地址 pr

java mail邮件发送(带附件)

java mail邮件发送(带附件)有三个类 MailSenderInfo.java package mail; import java.util.Properties; import java.util.Vector; public class MailSenderInfo { // 发送邮件的服务器的IP和端口 private String mailServerHost; private String mailServerPort = "25"; // 邮件发送者的地址 priva

Java mail发送邮件附件出现.eml文件夹

在使用JAVA MAIL发送邮件时,163邮箱和QQ邮箱收到PDF附件,格式错误如下图: 163邮箱: QQ邮箱: 经历了很长时间的研究和测试,错误原因为在邮件正文和邮件附件用的MimeBodyPart对象是同一个,进而导致上述现象,解决办法为正文是一个MimeBodyPart对象,一个附件是一个MimeBodyPart对象.正确代码如下: 原文地址:https://www.cnblogs.com/XH09/p/10981329.html

java mail

1 package com.lyz.mail; 2 3 import java.io.IOException; 4 import java.util.Date; 5 import java.util.Enumeration; 6 import java.util.Properties; 7 import java.util.Vector; 8 9 import javax.activation.DataHandler; 10 import javax.activation.FileDataSou

基于web的java Mail的邮件发送系统的详解

本系统是基于web的,引用了第三方的API:mail.jar开发包. 一.目录结构的介绍 我们可以到Oracle官网下载mail.jar开发包,我下载的版本是1.4.5.下载成功后,会得到一个javamail1_4_5.zip的文件,然后解压. 首先是根目录下的mail.jar是它的核心包 在lib子目录下有对应如下的jar包,其中mailapi.jar封装了创建邮件内容和面向普通开发人员调用邮件发送和接收的API类,其它三个jar文件(imap.jar.pop3.jar.smtp.jar)则是

《Java Mail》

<Java Mail> 文/冯皓林 完稿:2016.3.16--2016.3.19 "特定环境.一类问题.N个解决方案" 一.RFC821文档说明 核心: 邮件(Mail): 1.邮件头(Mail-Header):邮件头包含与传输.投递邮件有关的基本信息. 2.邮件体(Mail-Body):(1)邮件正文:(2)邮件附件 注:邮件头与邮件体之间以空行进行分隔,邮件头中不允许出现空行. RFC821文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件

JAVA MAIL基本功能

1. [代码][Java]代码package emailrobot; import java.io.*;import java.text.*;import java.util.*;import javax.mail.*;import javax.mail.internet.*; public class TestJavaMail {    private MimeMessage mimeMessage = null;    private String saveAttachPath = "&qu

java mail使用中遇到的500类型错误

前言 首先,需要说明的是,本错误来自于一个简单的基于java mail的api程序,邮件服务器是163的SMTP,即smtp.163.com. 程序 需要说明一下,下面这个程序,是来自于网络上,本人为了测试自己项目MUEAS中重置密码,通过邮件认证实现重置功能,临时用来测试用的,若有异议,请给我留言.我将会自己写一份. 1 package com.shihuc.demo; 2 3 import java.util.*; 4 import java.io.*; 5 import javax.mai