Java实现发送邮件

引入jar包

java 复制代码
	<dependency>
   		<groupId>com.sun.mail</groupId>
       	<artifactId>javax.mail</artifactId>
        <version>1.6.2</version>
    </dependency>
java 复制代码
# 发送邮件配置
mail:
  smtp:
    host: smtp.163.com
    port: 25
    auth: true
    username: 139*****@163.com
    password: *****
    from: 139*****@163.com
    name: *****
java 复制代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.util.ByteArrayDataSource;


@Component
@Slf4j
public class EmailUtil {

	private static Environment environment;

	@Autowired
	public void setEnvironment(Environment environment) {
		EmailUtil.environment = environment;
	}

	public static Session createSession() {

		//	账号信息
		String username = environment.getProperty("mail.smtp.username");//	邮箱发送账号
		String password = environment.getProperty("mail.smtp.password");//	邮箱授权码

		//	创建一个配置文件,并保存
		Properties props = new Properties();

		//	SMTP服务器连接信息
		props.put("mail.smtp.host", environment.getProperty("mail.smtp.host"));//	SMTP主机名
        //  126------25
        //  163------465 163也可以用的25
		props.put("mail.smtp.port", environment.getProperty("mail.smtp.port"));//	主机端口号
		props.put("mail.smtp.auth", environment.getProperty("mail.smtp.auth"));//	是否需要用户认证
//		props.put("mail.smtp.starttls.enale", "true");//	启用TlS加密 暂时不用

		//	创建session会话
		//	参数1:smtp服务器连接参数
		//	参数2:账号和密码的授权认证对象
		Session session = Session.getInstance(props, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				// TODO Auto-generated method stub
				return new PasswordAuthentication(username, password);
			}
		});
		//  控制台打印调试信息
		session.setDebug(true);
		return session;
	}


	/**
	 * 发送纯文本邮件信息
	 *
	 * @param receiver 接收方(邮箱账号)
	 * @param subject  邮件主题
	 * @param content  邮件内容(发送内容)
	 */
	public void sendMessage(String receiver, String subject, String content) {
		//1.创建Session
		try {
			Session session = createSession();
			System.out.println(session);

			//2.创建邮件对象
			MimeMessage message = new MimeMessage(session);
			//设置邮件主题
			message.setSubject(subject);
			//设置邮件内容
			message.setText(content);
			//设置发件人
			String from = environment.getProperty("mail.smtp.from");
			String name = environment.getProperty("mail.smtp.name");
			message.setFrom(new InternetAddress(from,name));
			//设置收件人
			message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiver));

			//3.发送邮件
			Transport.send(message);
		} catch (AddressException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

    }

	/**
	 * 发送带附件邮件信息
	 *
	 * @param receiver 接收方(邮箱账号)
	 * @param subject  邮件主题
	 * @param content  邮件内容(发送内容)
	 */
	public void sendAnnexMessage(String receiver, String subject, String content,String fileName, String filePath) {
		try {
			//1.创建Session会话
			Session session = createSession();

			//2.创建邮件对象
			MimeMessage message = new MimeMessage(session);
			message.setSubject(subject);
			//设置发件人
			String from = environment.getProperty("mail.smtp.from");
			String name = environment.getProperty("mail.smtp.name");
			message.setFrom(new InternetAddress(from,name));
			message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiver));

			//设置正文
			BodyPart textPart = new MimeBodyPart();
			//设置正文内容
			textPart.setText(content);

			//设置附件
			BodyPart filePart = new MimeBodyPart();
			filePart.setFileName(fileName);
			filePart.setDataHandler(
				new DataHandler(
					new ByteArrayDataSource(
						Files.readAllBytes(Paths.get(filePath)), "application/octet-stream")));

			//整合正文和附件
			Multipart part = new MimeMultipart();
			part.addBodyPart(textPart);
			part.addBodyPart(filePart);

			//添加正文和邮件
			message.setContent(part);
			//3.发送邮件
			Transport.send(message);
		} catch (AddressException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}


}
相关推荐
SL_staff23 分钟前
规则联动:给工厂装上‘自动化神经反射弧’——JVS·物联网平台规则引擎实战教程
java·人工智能·物联网
骑着蜗牛撵大象32731 分钟前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
WJ.Polar1 小时前
Java封装、继承、多态
java·开发语言
ly76891 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
摇滚侠1 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
weixin_307779131 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
奇牙coding1 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
爱读书的小胖2 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
小羊没烦恼!2 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
鸽鸽程序猿2 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python