java发送邮件(javamail)

本文详细介绍如何使用JavaMail API通过SMTP协议发送HTML格式的电子邮件,包括必要的jar包引入、邮箱配置信息设置、正则表达式验证邮箱合法性,以及两种发送邮件的方法:普通方式和SSL加密方式。

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

前文:

java利用javamail发送邮件,利用SMTP网络邮件传输协议。首先需要引入两个jar包:

<!-- email -->
<dependency>
	<groupId>javax.mail</groupId>
	<artifactId>mail</artifactId>
	<version>1.4.7</version>
</dependency>
<dependency>
	<groupId>javax.activation</groupId>
	<artifactId>activation</artifactId>
	<version>1.1.1</version>
</dependency>

需要邮箱的四个配置信息:host地址,port端口,account账号,password授权码(密码)。

账号需要开启smtp服务,qq邮箱和163邮箱都在账号设置那里开启,开启后验证后去授权码。有的邮箱服务商授权码就是密码,host地址一般而言是(smtp.xxx.cn),端口一般是25和465。

提供两种发送邮件的工具类(当第一种方法与邮箱服务器建立不了连接的话,使用第二种ssl的方式建立连接):

先给你一个后台java正则验证邮箱是否合法的方法:

public static boolean isEmail(String email) {
        if (email == null)
            return false;
        String regEx1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
        Pattern p;
        Matcher m;
        p = Pattern.compile(regEx1);
        m = p.matcher(email);
        if (m.matches())
            return true;
        else
            return false;
    }
	    

第一种:

private static final String HOST= "";
private static final String ACCOUNT= "";
private static final String PASSWORD= "";
private static final Integer PROT= "";

/**
与邮件服务器建立连接
*/
public static JavaMailSenderImpl createJavaMailSender(){
		JavaMailSenderImpl sender=new JavaMailSenderImpl();
		sender.setDefaultEncoding("utf-8");
		//设置邮件服务器的host地址
		sender.setHost(HOST);
		//设置账号
		sender.setUsername(account);
		//设置密码,,授权码
		sender.setPassword(PASSWORD);
		//设置端口号,可以不设置,默认是25
		sender.setPort(PROT);
		Properties pro=new Properties();
		pro.setProperty("mail.smtp.auth", "true");
		pro.setProperty("mail.smtp.timeout", "40000");
		sender.setJavaMailProperties(pro);
		return sender;
	}
/**
	 * 发送html邮件。邮件内容可以包含html标签和css样式
	 * 传两个参数,一个是收件人账号,一个是发送的内容
	 * @throws MessagingException 
	 */
public static boolean sendHtmlMail(String to,String html,String theme) throws             MessagingException{
	if (StringUtils.isBlank(to)) {
		return false;
	}
	//创建邮件服务器
	JavaMailSenderImpl sender=createJavaMailSender();
	try {
		//创建邮件消息模版
		MimeMessage mess=sender.createMimeMessage();
		//创建消息模板帮助类,当后面加上true的时候,代表当前类可以支持发送附件
		MimeMessageHelper helper=new MimeMessageHelper(mess, true);
		//设置发件人,注意要和登陆人账号保持一致
		helper.setFrom(ACCOUNT);
		//设置收件人,支持发送多个
		helper.setTo(to);
		//设置抄送名称,即头标题.主题
		helper.setSubject(theme);
		//设置邮件内容,当后面为true的时候可以发送html内容
		helper.setText(html,true);
		//设置附件,附件路径有本地和网路路径之分new UrlResource(filepath)处理网络文件的
		//MimeUtility.encodeWord解决中文名称乱码问题
//	helper.addAttachment("图片.jpg", new FileDataSource("D:/image/a0.jpg"));
		sender.send(mess);
		return true;
	} catch (Exception e) {			
		 try {
	               Thread.sleep(1000 * 1000);
	               sendHtmlMail(to, html,theme);
	            } catch (InterruptedException e1) {
	                system.out.prinln("第二次报错:"+e.getMessage());
	               return false;
	            }
		 system.out.prinln("第一次报错:"+e.getMessage());
		}
		return false;
	}
   /**
    测试方法
    */
 public static void main(String[] args) {
	String content = "我们轻易的去吧";
	        
	endHtmlMail("1274832887@qq.com", content, "主題");
	  }

第二种(用ssl的方式与邮件服务器建立连接):


private static final String HOST= "";
private static final String ACCOUNT= "";
private static final String PASSWORD= "";
private static final Integer PROT= "";
 /**
	     * 发送邮件(灵活度高,通用版)
	     * @param from 发件人
	     * @param to 收件人, 多个Email以英文逗号分隔
	     * @param subject 主题
	     * @param content 内容
	     * @return
	     */
	    public static boolean sendHtmlMail(String to,  String content,String subject){
	    	if (StringUtils.isBlank(to)) {
				return false;
			}
	         try {
	             Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
	             final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
	             final Properties p = System.getProperties() ;
	             p.setProperty("mail.smtp.host", Global.getConfig("email.host"));
	             p.setProperty("mail.smtp.auth", "true");
	             p.setProperty("mail.smtp.user", Global.getConfig("email.account"));
	             p.setProperty("mail.smtp.pass", Global.getConfig("email.password"));
	             
	             p.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
	             p.setProperty("mail.smtp.socketFactory.fallback", "false");
	             //邮箱发送服务器端口,这里设置为465端口
	             p.setProperty("mail.smtp.port", "465");
	             p.setProperty("mail.smtp.socketFactory.port", "465");
	    
	            // 根据邮件会话属性和密码验证器构造一个发送邮件的session
	            Session session = Session.getInstance(p, new Authenticator(){
	                protected PasswordAuthentication getPasswordAuthentication() {
	                    return new PasswordAuthentication(p.getProperty("mail.smtp.user"),p.getProperty("mail.smtp.pass"));
	                }
	            });
	            session.setDebug(true);
	            Message message = new MimeMessage(session);
	            //消息发送的主题
	            message.setSubject(subject);
	            //接受消息的人
	            message.setReplyTo(InternetAddress.parse(Global.getConfig("email.account")));
	            //消息的发送者
	            message.setFrom(new InternetAddress(p.getProperty("mail.smtp.user"),"开易样品"));
	            // 创建邮件的接收者地址,并设置到邮件消息中
	            String[] split = to.split(",");
	            InternetAddress []tos = new InternetAddress[split.length];
	            for (int i = 0; i < split.length; i++) {
	                tos[i]=new InternetAddress(split[i]);
	            }
	            message.setRecipients(Message.RecipientType.TO, tos);
	            // 消息发送的时间
	            message.setSentDate(new Date());
	            Multipart mainPart = new MimeMultipart();
	            // 创建一个包含HTML内容的MimeBodyPart
	            BodyPart html = new MimeBodyPart();
	            // 设置HTML内容
	            html.setContent(content, "text/html; charset=utf-8");
	            mainPart.addBodyPart(html);
	            // 将MiniMultipart对象设置为邮件内容
	            message.setContent(mainPart);
	            message.setContent(mainPart); 
	            message.saveChanges(); 
	            Transport.send(message);
	         } catch (MessagingException e) {
	             e.printStackTrace();
	             return false;
	         } catch (UnsupportedEncodingException e) {
	            e.printStackTrace();
	            return false;
	        }
	        return true;
	    }
    /**
    测试方法
    */
 public static void main(String[] args) {
	String content = "我们轻易的去吧";
	        
	endHtmlMail("992336338@qq.com", content, "主題");
	  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值