Java给单个或多个用户发送邮件

这篇博客详细介绍了如何使用Java进行邮件发送,包括解决高版本JDK中java.mail冲突的方法,以及通过MailAuthenticator和Message类实现用户连接、设置邮件信息和发送过程。内容涵盖了Message类的使用,如设置收件人、主题和内容,以及如何将不同类型的收件人地址转换为Address数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 》Java给用户发送邮件   作者:左轩、Shiny

  Jar包:

           mail.jar 同时高版本JDK中可能存在java.mail冲突。解决方案  找到 EE_5 下的目录 删除 javaee.jar下的mail文件夹。

     一、思路详解:

           1、一个继承用户连接的类MailAuthenticator继承于MailAuthenticator.为后面的session实例化 作为参数 获取用户连接服务器

           2、Message类实例化依赖于session.然后设置发件人、收件人、发件主题、发件内容

           3、Transport类用户发送邮件

    二、技术详解

           1、message.setRecipients(RecipientType.TO, addresses); 中第二个参数是Address[] address  所以要把String,List<String>,String[]

                向其转型、可以用多台实现。

 MailAuthenticator.java

 

package com.huawei.ssi.util;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
 * 
 * @author Shiny
 *
 */

public class MailAuthenticator extends Authenticator {

	
	private String uemail;
	private String upass;
	
	
	
	
	public MailAuthenticator() {
		// TODO Auto-generated constructor stub
	}
	
	
	
	public MailAuthenticator(String uemail,String upass) {
		
		this.uemail = uemail;
		this.upass = upass;
		
	}
	
	
	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
		
		
		return new PasswordAuthentication(uemail, upass);
		
	
	};
	
	
	
	
	
	
	
	
	public String getUemail() {
		return uemail;
	}
	public void setUemail(String uemail) {
		this.uemail = uemail;
	}
	public String getUpass() {
		return upass;
	}
	public void setUpass(String upass) {
		this.upass = upass;
	}
	
	
	
	
	
	
}


 

SimpleMailSender.java

 

 

package com.huawei.ssi.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SimpleMailSender {

	
	private final transient Properties pros = System.getProperties();
	
	private transient MailAuthenticator mailAuthenticator;
	
	//与邮箱服务器的会话
	private transient Session session;
	
	
	/**
	 * 
	 * @param smtpHostName   "smtp.qq.com" || "smtp.sina.com"
	 * @param uemail		 "1197407855@qq.com"
	 * @param upass			 "******"	
	 */
	public SimpleMailSender(final String smtpHostName,final String uemail,final String upass) {
	
		init(uemail, upass, smtpHostName);
	
	}
	
	
	/**
	 * 
	 * @param uemail  邮箱账号
	 * @param upass	     邮箱密码
	 */
	public SimpleMailSender(final String uemail,final String upass) {
		//通过邮箱获取到smtp 
		final String smtpHostName = "smtp."+uemail.split("@")[1];
		
		init(uemail, upass, smtpHostName);
	
	}
	
	
	
	
	/**
	 * 初始化
	 * @param uemail
	 * @param upass
	 * @param smtpHostName
	 */
	private void init(String uemail,String upass,String smtpHostName){
		
		pros.put("mail.smtp.auth", "true");
		
		pros.put("mail.smtp.host", smtpHostName);
		
		
		mailAuthenticator = new MailAuthenticator(uemail,upass);
		
		//实例化会话
		session = Session.getInstance(pros,mailAuthenticator);
		
	}
		
	
	
	
	
	/**
	 * 
	 * @param recpient
	 * @return
	 * @throws Exception
	 */
	public Address[] getRecipientAddresses(String[] recpient) throws Exception{
		
		Address[] address=new Address[recpient.length];
		for(int i=0;i<recpient.length;i++){
			address[i]=new InternetAddress(recpient[i]);
		}
		
		return address;
	}
	
	/**
	 * 
	 * @param recpient
	 * @return
	 * @throws AddressException
	 */
	public Address[] getRecipientAddresses(List<String> recpient) throws Exception{
		
		Address[] address=new Address[recpient.size()];
		for(int i=0;i<recpient.size();i++){
			address[i]=new InternetAddress(recpient.get(i));
		}
		
		return address;
	}
	
	
	/**
	 * 
	 * @param recpient
	 * @return
	 * @throws Exception
	 */
	public Address[] getRecipientAddresses(String recpient) throws Exception{
		
		Address[] addresses = {new InternetAddress(recpient)};
		
		return addresses;
	
	}
	
	
	
	/**
	 * 
	 * @param recipient
	 * @param subject
	 * @param content
	 * @throws Exception
	 */
	@SuppressWarnings("unused")
	private void sendMail(String recipient,String subject,String content) throws Exception{
			this.sendMail(this.getRecipientAddresses(recipient), subject, content);
	}
	
	/**
	 * 
	 * @param recipient
	 * @param subject
	 * @param content
	 * @throws Exception
	 */
	private void sendMail(String[] recipient,String subject,String content) throws Exception{
		this.sendMail(this.getRecipientAddresses(recipient), subject, content);
	}
	
	/**
	 * 
	 * @param recipient
	 * @param subject
	 * @param content
	 * @throws Exception
	 */
	@SuppressWarnings("unused")
	private void sendMail(List<String> recipient,String subject,String content) throws Exception{
		this.sendMail(this.getRecipientAddresses(recipient), subject, content);
	}
	
	
	
	/**
	 * 实现方法  发送邮件  可发送单个用户 也可以发送多个
	 * @param addresses
	 * @param subject
	 * @param content
	 * @throws Exception
	 */
	public void sendMail(Address[] addresses,String subject,String content) throws Exception{
		//通过session实例化message 即一封邮件
		final MimeMessage message = new MimeMessage(session);
		//设置发邮件人
		message.setFrom(new InternetAddress(mailAuthenticator.getUemail()));
		//设置收件人
		message.setRecipients(RecipientType.TO, addresses); 
		//邮件标题
		message.setSubject(subject);
		//邮件内容
		message.setContent(content,"text/html;charset=utf-8");
		//发送
		Transport.send(message);	
	}
	
	
	
	
	public static void main(String[] args)throws Exception {
		
		SimpleMailSender sms = new SimpleMailSender("1197407855@qq.com", "*******");//******密码
		
		String[] str={"1197407855@qq.com","1259099190@qq.com"};
		
		//sms.sendMail("1259099190@qq.com", "SB", "你是sb!");
		sms.sendMail(str, "SB11", "你是sb22!");
		
//		List<String> list = new ArrayList<String>();
//		
//		list.add("1197407855@qq.com");
//		list.add("1259099190@qq.com");
//		sms.sendMail(list, "333773344", "aaaaaa");	
		
	}
	
	
	
	
}



 


 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值