JAVA项目发送邮件的工具类

package com.email;

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

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
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;

/**
 * 发送邮件的工具类
 * @author admin
 */
public class SendEmailUtil {
	/**
	 * 邮件发送
	 * @param smtpHost   邮件服务器
	 * @param fromEmail  邮件发送人的邮件地址
	 * @param fromEmailPwd 邮件发送人的授权码
	 * @param toEmail  邮件接收人的邮件地址
	 * @param subject  邮件主题
	 * @param context  邮件的内容
	 * @throws Exception  抛出异常
	 */
	 public static void sendMessage(String smtpHost,String fromEmail,String fromEmailPwd,String toEmail,String subject,String context) throws Exception{
		 
		 //创建参数配置, 用于连接邮件服务器的参数配置
		 Properties props = new Properties();
		 props.setProperty("mail.smtp.host", smtpHost);	//邮件服务器
		 props.setProperty("mail.transport.protocol", "smtp");	//使用的协议(JavaMail规范要求)
	     props.setProperty("mail.smtp.starttls.enable", "true");//使用 STARTTLS安全连接 
	     props.setProperty("mail.smtp.auth", "true"); // 使用验证
	     
	     //根据配置创建会话对象, 用于和邮件服务器交互
	     Session mailSession = Session.getInstance(props);
	     mailSession.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log
	     //根据 Session 获取邮件传输对象
	     Transport transport = mailSession.getTransport();
	     //创建一封邮件
	     MimeMessage message = createMessageFile(mailSession, fromEmail, toEmail, subject, context);
	     
	     transport.connect(fromEmail, fromEmailPwd);
	     // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
	     transport.sendMessage(message, message.getAllRecipients());
	     // 7. 关闭连接
	     transport.close();
	 }  
	 /**
	  * 单人的发送方法
	  * @param session
	  * @param sendMail
	  * @param receiveMail
	  * @param subject
	  * @param context
	  * @return
	  * @throws Exception
	  */
	 private static MimeMessage createMessageUserName(Session session, String sendMail, String receiveMail,String subject,String context) throws Exception {
	        // 1. 创建一封邮件
	        MimeMessage message = new MimeMessage(session);
	        // 2. From: 发件人 的名字和发件人
	        message.setFrom(new InternetAddress(sendMail, "宝网", "UTF-8"));
	        // 3. To: 收件人(可以增加多个收件人、抄送、密送)
	        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用户", "UTF-8"));
	        
	        // 4. Subject: 邮件主题
	        message.setSubject(subject, "UTF-8");
	        // 5. Content: 邮件正文(可以使用html标签)
	        message.setContent("163邮箱的发送和QQ邮箱的发送。。天天向上,军事博物馆。。。", "text/html;charset=UTF-8");
	        // 6. 设置发件时间
	        message.setSentDate(new Date());
	        // 7. 保存设置
	        message.saveChanges();
	        return message;
	    } 
	/**
	 * 多人的邮件发送方法
	 * @param session
	 * @param sendMail
	 * @param receiveMail
	 * @param subject
	 * @param context
	 * @return
	 * @throws Exception
	 */
	 
	 private static MimeMessage createMessageList(Session session, String sendMail, String receiveMail,String subject,String context) throws Exception {
	        // 1. 创建一封邮件
	        MimeMessage message = new MimeMessage(session);
	        // 2. From: 发件人
	        message.setFrom(new InternetAddress(sendMail));
	        // 3. To: 收件人(可以增加多个收件人、抄送、密送)
	        //message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail));
	        
	        //给多个人发送邮件
	        ArrayList<Object> list = new ArrayList<>();
	        
	        list.add(new InternetAddress("792126406@qq.com"));
	        list.add(new InternetAddress("1425574519@qq.com"));
	        
	        Address[] addresses = list.toArray( new Address[list.size()]);
	        
			message.setRecipients(MimeMessage.RecipientType.TO,addresses);
	        // 4. Subject: 邮件主题
	        message.setSubject(subject, "UTF-8");
	        // 5. Content: 邮件正文(可以使用html标签)
	        message.setContent(context, "text/html;charset=UTF-8");
	        // 6. 设置发件时间
	        message.setSentDate(new Date());
	        // 7. 保存设置
	        message.saveChanges();
	        return message;
	 }
	 /**
	  * 发送邮件,邮件中添加附件
	  * @param session
	  * @param sendMail
	  * @param receiveMail
	  * @param subject
	  * @param context
	  * @return
	  * @throws Exception
	  */
	 private static MimeMessage createMessageFile(Session session, String sendMail, String receiveMail,String subject,String context) throws Exception{
		// 创建一封邮件
        MimeMessage message = new MimeMessage(session);
        // 加载发件人地址
        message.setFrom(new InternetAddress(sendMail));
        // 加载收件人的邮件
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(receiveMail)); 
        // 添加主题										
        message.setSubject("测试邮件发送,添加附件发送");
        
        // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
        MimeMultipart multipart = new MimeMultipart();
        // 设置邮件的文本内容
        BodyPart bodyPart = new MimeBodyPart();
        bodyPart.setText("。。。添加附件的文本内容。。。");
        multipart.addBodyPart(bodyPart);
        
        // 添加附件
        MimeBodyPart filePart = new MimeBodyPart();
        FileDataSource fileSource = new FileDataSource(new File("E:\\文档资料\\基础信息.txt"));
        // 添加附加的内容
        filePart.setDataHandler(new DataHandler(fileSource));
        // 通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
        sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
        filePart.setFileName("=?GBK?B?"+ enc.encode("affixName.txt".getBytes()) + "?=");
        multipart.addBodyPart(filePart);
        
        // 将multipart对象放到message中
        message.setContent(multipart);
        // 保存邮件
        message.saveChanges();
        return message;
	}	
	
	public static void main(String[] args) {
		try {
			sendMessage("smtp.163.com", "邮件发送者的邮箱@163.com", "邮箱服务授权码", "接收者的邮箱", "邮件测试发送", "包含文本、图片、附件 的复杂邮件的创建请看下一篇");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 Java 发送邮件工具类,你可以根据自己的需求进行修改: ``` import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class MailUtil { private String host; // 邮件服务器主机名 private String username; // 发件人账号 private String password; // 发件人密码 public MailUtil(String host, String username, String password) { this.host = host; this.username = username; this.password = password; } /** * 发送邮件 * @param to 收件人邮箱地址 * @param subject 邮件主题 * @param content 邮件内容 */ public void sendMail(String to, String subject, String content) throws MessagingException { Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.host", host); props.setProperty("mail.smtp.auth", "true"); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(subject); message.setContent(content, "text/html;charset=utf-8"); Transport.send(message); } } ``` 使用示例: ``` public static void main(String[] args) { String host = "smtp.163.com"; String username = "your_email@163.com"; String password = "your_email_password"; MailUtil mailUtil = new MailUtil(host, username, password); String to = "recipient_email@example.com"; String subject = "测试邮件"; String content = "这是一封测试邮件,如果你收到了,请回复我。"; try { mailUtil.sendMail(to, subject, content); System.out.println("邮件发送成功!"); } catch (MessagingException e) { System.out.println("邮件发送失败:" + e.getMessage()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值