`

java邮件发送工具

阅读更多

注:邮件发送的服务器地址和端口需要根据自己的实际情况选择,qq邮箱需要设置开启服务。

 

package com.lw.email.util;

import java.io.File;
import java.io.StringWriter;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Multipart;
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.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;

/**
 * 邮件发送器
 */
public class MailSendUtils {

	/**
	 * 邮箱发送,用模板设置内容
	 */
	public static void sendTemplateEmail(String email, String userName) {
		// 发送邮件类型
		String type = "2";
		// 发送到邮箱地址
		String toEmail = email;
		// 邮件标题
		String title = "喜中大奖";
		// 邮件内容
		String content = "测试邮箱发送接口,Hello!";
		// 附件
		// String[] files = { "D:\\123.txt" };

		// 模板名称
		String templateName = "template.vm";
		// 模板填充内容
		VelocityContext ctx = new VelocityContext();
		ctx.put("userName", userName);
		ctx.put("url", "https://www.baidu.com/");
		ctx.put("title", title);
		// 根据模板和内容生成邮件内容,如果不需要模板就直接发送contents
		try {
			content = MailSendUtils.getMailContent(templateName, ctx);
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 发送邮件
		MailSendUtils.sendEmail(type, toEmail, title, content, null);
	}

	/**
	 * 发送邮件接口
	 * 
	 * @param type
	 *            1:文本格式;2:HTML格式,
	 * @param toEmail
	 *            对方箱账号
	 * @param title
	 *            标题
	 * @param content
	 *            内容
	 * @param files
	 *            附件地址
	 */
	public static boolean sendEmail(String type, String toEmail, String title, String content, String[] files) {
		// 设置邮件信息
		MailBody mailInfo = new MailBody();
		mailInfo.setValidate(true);
		mailInfo.setToAddress(toEmail);
		mailInfo.setSubject(title);
		mailInfo.setContent(content);
		mailInfo.setAttachFileNames(files);

		// 这个类主要来发送邮件
		MailSendUtils sms = new MailSendUtils();
		try {
			if ("1".equals(type)) {
				return sms.sendTextMail(mailInfo);
			} else {
				return sms.sendHtmlMail(mailInfo);
			}
		} catch (Exception e) {
			System.out.println("邮件发送测试,失败!!!");
			e.printStackTrace();
			return false;
		}
	}

	/**
	 * 以文本格式发送邮件
	 * 
	 * @param mailInfo
	 *            待发送的邮件的信息
	 */
	public boolean sendTextMail(MailBody mailInfo) throws Exception {
		// 判断是否需要身份认证
		MailAuthenticator authenticator = null;
		Properties pro = mailInfo.getProperties();
		if (mailInfo.isValidate()) {
			// 如果需要身份认证,则创建一个密码验证器
			authenticator = new MailAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
		}
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
		// logBefore(logger, "构造一个发送邮件的session");

		// 根据session创建一个邮件消息
		Message mailMessage = new MimeMessage(sendMailSession);
		// 防止成为垃圾邮件,披上outlook的马甲
		mailMessage.addHeader("X-Priority", "3");
		mailMessage.addHeader("X-MSMail-Priority", "Normal");
		mailMessage.addHeader("X-Mailer", "Microsoft Outlook Express 6.00.2900.2869");
		mailMessage.addHeader("X-MimeOLE", "Produced By Microsoft MimeOLE V6.00.2900.2869");
		mailMessage.addHeader("ReturnReceipt", "1");
		// 创建邮件发送者地址
		Address from = new InternetAddress(mailInfo.getFromAddress());
		// 设置邮件消息的发送者
		mailMessage.setFrom(from);
		// 创建邮件的接收者地址,并设置到邮件消息中
		Address to = new InternetAddress(mailInfo.getToAddress());
		mailMessage.setRecipient(Message.RecipientType.TO, to);
		// 设置邮件消息的主题
		mailMessage.setSubject(mailInfo.getSubject());
		// 设置邮件消息发送的时间
		mailMessage.setSentDate(new Date());
		// 设置邮件消息的主要内容
		String mailContent = mailInfo.getContent();
		mailMessage.setText(mailContent);
		// 发送邮件
		Transport.send(mailMessage);
		System.out.println("邮件发送测试,成功!");
		return true;
	}

	/**
	 * 以HTML格式发送邮件
	 * 
	 * @param mailInfo
	 *            待发送的邮件信息
	 */
	public boolean sendHtmlMail(MailBody mailInfo) throws Exception {
		// 判断是否需要身份认证
		MailAuthenticator authenticator = null;
		Properties pro = mailInfo.getProperties();
		// 如果需要身份认证,则创建一个密码验证器
		if (mailInfo.isValidate()) {
			authenticator = new MailAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
		}
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
		// 设置session的调试模式,发布时取消
		// sendMailSession.setDebug(true);

		// 根据session创建一个邮件消息
		Message mailMessage = new MimeMessage(sendMailSession);
		// 防止成为垃圾邮件,披上outlook的马甲
		mailMessage.addHeader("X-Priority", "3");
		mailMessage.addHeader("X-MSMail-Priority", "Normal");
		mailMessage.addHeader("X-Mailer", "Microsoft Outlook Express 6.00.2900.2869");
		mailMessage.addHeader("X-MimeOLE", "Produced By Microsoft MimeOLE V6.00.2900.2869");
		mailMessage.addHeader("ReturnReceipt", "1");
		// 创建邮件发送者地址
		Address from = new InternetAddress(mailInfo.getFromAddress());
		// 设置邮件消息的发送者
		mailMessage.setFrom(from);
		// 创建邮件的接收者地址,并设置到邮件消息中
		Address to = new InternetAddress(mailInfo.getToAddress());
		// Message.RecipientType.TO属性表示接收者的类型为TO
		mailMessage.setRecipient(Message.RecipientType.TO, to);
		// 设置邮件消息的主题
		mailMessage.setSubject(mailInfo.getSubject());
		// 设置邮件消息发送的时间
		mailMessage.setSentDate(new Date());
		// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
		Multipart mainPart = new MimeMultipart();
		// 判断是否存在附件
		if (mailInfo.getAttachFileNames() != null) {
			for (String fileName : mailInfo.getAttachFileNames()) {
				// 创建一个包含附件内容的MimeBodyPart
				MimeBodyPart file = new MimeBodyPart();
				// 数据处理器
				DataHandler dataHandler = new DataHandler(new FileDataSource(fileName));
				// 设置附件数据
				file.setDataHandler(dataHandler);
				// 设置附件名称
				file.setFileName(MimeUtility.encodeText(dataHandler.getName()));
				mainPart.addBodyPart(file);
			}
		}
		// 创建一个包含HTML内容的MimeBodyPart
		MimeBodyPart html = new MimeBodyPart();
		// 设置HTML内容
		html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
		mainPart.addBodyPart(html);
		// 将MiniMultipart对象设置为邮件内容
		mailMessage.setContent(mainPart);
		// 发送邮件
		Transport.send(mailMessage);
		System.out.println("邮件发送测试,成功!");
		return true;
	}

	/**
	 * 生成模板内容
	 * 
	 * @param templateName
	 *            模板名称
	 * @param velocityContext
	 *            填充模板内容
	 * @return 合并模板内容
	 */
	public static String getMailContent(String templateName, VelocityContext velocityContext) throws Exception {
		// 从配置文件中获取模板路径
		String templatePath = "\\template\\vm";
		StringWriter stringWriter = new StringWriter();
		// velocity引擎
		VelocityEngine velocityEngine = new VelocityEngine();
		// 设置文件路径属性
		Properties properties = new Properties();
		// 通过类加载器获取模板文件夹路径
		String path = MailSendUtils.class.getResource("/").getPath();
		String templateFolder = new File(path).getParentFile().getParentFile().getCanonicalPath() + templatePath;
		
		// 设置模板文件夹路径
		properties.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, templateFolder);
		// 设置输入输出编码类型
		properties.setProperty(Velocity.ENCODING_DEFAULT, "utf-8");
		properties.setProperty(Velocity.INPUT_ENCODING, "utf-8");
		properties.setProperty(Velocity.OUTPUT_ENCODING, "utf-8");
		properties.setProperty("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.SimpleLog4JLogSystem");
		properties.setProperty("runtime.log.logsystem.log4j.category", "velocity");
		properties.setProperty("runtime.log.logsystem.log4j.logger", "velocity");
		// 引擎初始化属性配置
		velocityEngine.init(properties);
		// 加载指定模版
		Template template = velocityEngine.getTemplate(templateName, "utf-8");
		// 写到模板
		template.merge(velocityContext, stringWriter);
		return stringWriter.toString();
	}

}

 设置邮件会话属性:

	/**
	 * 获得邮件会话属性
	 */
	public Properties getProperties() {
		this.mailServerHost = "mail.junsisoft.com.cn"; // 邮件服务地址
		this.mailServerPort = "25"; // 端口,465端口开启ssl加密传输
		this.fromAddress = "liwei@junsisoft.com.cn"; // 邮件发送方
		this.userName = "liwei@junsisoft.com.cn"; // 用户名
		this.password = "111111"; // 密码

		Properties p = new Properties();
		p.put("mail.smtp.host", this.mailServerHost);
		p.put("mail.smtp.port", this.mailServerPort);
		p.put("mail.smtp.auth", validate ? "true" : "false");
        // 发送邮件协议名称  
        p.setProperty("mail.transport.protocol", "smtp"); 
		return p;
	}

 

分享到:
评论

相关推荐

    简易java邮件发送工具

    这个“简易java邮件发送工具”显然是基于JavaMail API构建的,旨在简化邮件发送的过程,尤其针对Yahoo、Sina、Sohu和163等常见邮件服务商。用户无需登录到这些网站的网页界面,只需在拥有Tomcat或WebLogic等应用...

    JAVA邮件发送工具类(支持同步和异步发送邮件以及附件信息)

    JAVA邮件发送工具类(支持同步和异步发送邮件以及附件信息),支持多个抄送邮件发送。

    java邮件发送工具类

    java邮件发送工具类java邮件发送工具类包含gmail

    java发送邮件工具

    java发送邮件工具类,用于java程序实现邮件的发送功能

    java邮件发送工具代码.zip

    Java邮件发送工具是Java开发中常见的一种功能,用于在应用程序中发送电子邮件。在这个"java邮件发送工具代码.zip"压缩包中,包含两个核心文件:SendMail.java和MailAuthenticator.java,它们分别实现了邮件发送的...

    mail.jar java邮件发送工具

    java mail支持,java邮件发送工具

    java一键发送邮件,封装好的工具类

    本教程将详细讲解一个已经封装好的Java邮件发送工具类——`EasyEmailUtil`,它使得邮件发送变得简单易行,无需繁琐的配置,只需一键调用即可完成。 首先,`EasyEmailUtil`类通常会包含以下几个核心功能: 1. **...

    java发送邮件工具类

    三、创建易用的Java邮件工具类 在实际开发中,我们可以封装一个工具类,简化上述步骤,让使用者只需提供必要的参数即可发送邮件。以下是一个简化的示例: ```java import javax.mail.*; import javax.mail.internet...

    java邮件发送组件

    Java邮件发送组件是Java开发中用于发送电子邮件的工具,它使得开发者能够轻松地在应用程序中实现邮件功能。Java Mail API是实现这一功能的核心库,它提供了丰富的接口和类,允许程序进行邮件的创建、发送以及处理。...

    java 发送邮件 小工具类+ mail.jar

    总之,Java发送邮件小工具结合JavaMail API提供了简单易用的邮件发送功能。无论是开发人员还是运维人员,都可以利用这个工具快速地实现邮件通信,提高了工作效率。在实际使用中,确保正确配置SMTP服务器信息,理解并...

    java版发送邮件工具类

    `SendJMail.java`文件很可能是一个已经封装好的邮件发送工具类,它可能包含了设置邮件服务器、发件人、收件人、主题、正文以及附件等功能。此类通常会提供静态方法,开发者只需要传入必要的参数,就可以方便地发送...

    java邮件发送客户端

    Java邮件发送客户端是一种利用JavaMail API开发的程序,它允许用户通过图形化的用户界面发送电子邮件。这个客户端可以作为个人或企业内部沟通的工具,也可以用于自动化邮件发送任务,例如发送通知、报告或订阅内容。...

    java 邮件发送源码

    Java邮件发送源码是Java开发者在进行自动化通信时经常需要用到的技术。邮件服务允许程序自动发送信息,例如通知、报告或客户服务交互,极大地提高了效率。在Java中,我们通常使用JavaMail API来实现这个功能。 ...

    java 基于javax.mail的邮件发送测试工具

    基于javax.mail的邮件发送测试工具

    java邮件发送

    总的来说,"java邮件发送jar包"为开发者提供了一个方便的工具,使得在Java应用程序中发送邮件变得简单。只要正确配置邮件服务器的参数,并按照上述步骤操作,就可以实现高效且可靠的邮件发送功能。在实际开发中,还...

Global site tag (gtag.js) - Google Analytics