java发送邮件

  <dependency>
     <groupId>javax.mail</groupId>
     <artifactId>mail</artifactId>
     <version>1.4.7</version>
  </dependency>
public static void main(String[] args) {
		try {
			Properties prop = new Properties();
			// 设置QQ邮件服务器
			prop.setProperty("mail.host", "mail.xxxxx.com");
			// 当使用公司内部邮箱,可以设置端口
			//prop.setProperty("mail.smtp.port", "25");
			// 当使用公司内部邮箱,可以设置服务器
			//prop.setProperty("mail.smtp.host", "smtp.qq.com");
			// 邮件发送协议
			prop.setProperty("mail.transport.protocol", "smtp");
			// 需要验证用户名密码
			prop.setProperty("mail.smtp.auth", "true");

			// QQ邮箱设置SSL加密(可以不改)
			MailSSLSocketFactory sf = new MailSSLSocketFactory();
			sf.setTrustAllHosts(true);
			prop.put("mail.smtp.ssl.enable", "true");
			prop.put("mail.smtp.ssl.socketFactory", sf);

			//1、创建定义整个应用程序所需的环境信息的 Session 对象
			Session session = Session.getDefaultInstance(prop, new Authenticator() {
				@Override
				protected PasswordAuthentication getPasswordAuthentication() {
					//传入发件人的姓名和授权码
					return new PasswordAuthentication("xxxxx@xxxxx.com", "xxxxxx");
				}
			});

			//2、通过session获取transport对象
			Transport transport = session.getTransport();

			//3、通过transport对象邮箱用户名和授权码连接邮箱服务器
			transport.connect("mail.xxxx.com", "xxx@xxx.com", "xxxx");

			//4、创建邮件,传入session对象
			MimeMessage mimeMessage = complexEmail(session);
            //邮件发送太慢,有错误地址停止发送
	        transport.addTransportListener(new CustomTransportListener(transport));
			//5、发送邮件
			transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());

			//6、关闭连接
			transport.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


	public static MimeMessage complexEmail(Session session) throws MessagingException {
		//消息的固定信息
		MimeMessage mimeMessage = new MimeMessage(session);

		//发件人
		mimeMessage.setFrom(new InternetAddress(username));
		List<ChatGPTMailAddress> mailList = statisticsDao.selectAllMail();
		List<String> toList = new ArrayList<>();
		List<String> ccList = new ArrayList<>();
		if (CollectionUtils.isNotEmpty(mailList)) {
			mailList.forEach(o -> {
				if ("1".equals(o.getMailType())) {
					toList.add(o.getMailAddress());
				} else if ("2".equals(o.getMailType())) {
					ccList.add(o.getMailAddress());
				}

			});
		}
		if (CollectionUtils.isNotEmpty(toList)) {
			Address[] tos = new InternetAddress[toList.size()];
			for (int i = 0; i < toList.size(); i++) {
				tos[i] = new InternetAddress(toList.get(i));
			}
			//收件人
			mimeMessage.setRecipients(Message.RecipientType.TO, tos);
		}

		if (CollectionUtils.isNotEmpty(ccList)) {
			Address[] ccs = new InternetAddress[ccList.size()];
			for (int i = 0; i < ccList.size(); i++) {
				ccs[i] = new InternetAddress(ccList.get(i));
			}
			//收件人
			mimeMessage.setRecipients(Message.RecipientType.CC, ccs);
		}

		//邮件标题
		mimeMessage.setSubject("儿童对话体验数据分析同步");

		//邮件内容
		//准备图片数据
//		MimeBodyPart image = new MimeBodyPart();
//		DataHandler handler = new DataHandler(new 
//      FileDataSource("D:\\picture\\test1.jpg"));
//		image.setDataHandler(handler);
//		image.setContentID("test1.jpg"); //设置图片id

		String html = HtmlTableTemplate.generateHtml(list, charLength.toString(),questionRate.toString());
		//准备文本
		MimeBodyPart text = new MimeBodyPart();
		text.setContent(html, "text/html;charset=utf-8");


		//拼装邮件正文
		MimeMultipart mimeMultipart = new MimeMultipart();
//		mimeMultipart.addBodyPart(image);
		mimeMultipart.addBodyPart(text);
		mimeMultipart.setSubType("related");

		//将拼装好的正文内容设置为主体
		MimeBodyPart contentText = new MimeBodyPart();
		contentText.setContent(mimeMultipart);

		//拼接附件
		MimeMultipart allFile = new MimeMultipart();
		//正文
		allFile.addBodyPart(contentText);
		if (StringUtils.isNotBlank(txtPath)) {
			//附件
			MimeBodyPart appendix = new MimeBodyPart();
			appendix.setDataHandler(new DataHandler(new FileDataSource(txtPath)));
			appendix.setFileName("chatGPT统计.txt");
			//附件
			allFile.addBodyPart(appendix);
		}
		if (StringUtils.isNotBlank(path)) {
			//附件
			MimeBodyPart appendix = new MimeBodyPart();
			appendix.setDataHandler(new DataHandler(new FileDataSource(path)));
			appendix.setFileName("用户统计.xlsx");
			//附件
			allFile.addBodyPart(appendix);
		}
		//正文和附件都存在邮件中,所有类型设置为mixed
		allFile.setSubType("mixed");


		//放到Message消息中
		mimeMessage.setContent(allFile);
		mimeMessage.saveChanges();//保存修改

		return mimeMessage;
	}
class CustomTransportListener extends TransportAdapter {
	Transport transport;

	CustomTransportListener(Transport transport) {
		this.transport = transport;
	}

	@Override
	public void messageNotDelivered(TransportEvent transportEvent) {
		Address[] addresses = transportEvent.getValidUnsentAddresses();
		Message message = transportEvent.getMessage();
		try {
			transport.sendMessage(message, addresses);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值