Java使用javax.mail.jar发送邮件例题

引言

  • java发送邮件
  • 使用QQ邮箱 给126邮箱发送一封邮件

一、导包

mail.jar下载
提取码:0nxi

基础知识

首先

  1. 邮件传输有两个协议:POP3和SMTP
  2. 发送邮件协议smtp
  3. 查收邮件协议pop3
    来看QQ邮箱QQ邮箱
    从发邮件的界面可以看到,要发送邮件,要先登录上qq邮箱,准备邮件(包含收件人、主题、正文),再发送邮件
    在这里插入图片描述

1. 创建Session会话: Session.getDefaultInstance()

  1. 使用session对象连接上我们qq邮箱的服务器,
  2. 再准备邮件发送上去
  3. 创建sessin会话之前,要为这个session对象设置一些参数
    定义在Properties属性文件中

 		Properties properties = new Properties();
        //“stmp.qq.com"可以改比如改成stmp.163.com
        properties.setProperty("mail.host","stmp.qq.com");
        //mail.transport.protocol邮件传输协议,这里是smtp传输协议
        properties.setProperty("mail.transport.protocol","smtp");
        properties.setProperty("mail.smtp.port","587");
        properties.setProperty("mail.smtp.auth","true");
        properties.setProperty("mail.debug","true");
        //设置key和value
        Session session = Session.getDefaultInstance(properties);

2. 获取一个传输对象(ts):session.getTransport()

  1. 通过session.getTransport()
    代码如下
        Transport ts = null;
        try {
            //获取到传输的对象 发送邮件
            ts = session.getTransport();
        } catch (Exception e) {
            e.printStackTrace();
        }

3. 通过传输对象(ts) 连接qq服务器:ts.connect()

  1. ts.connect()方法给3个参数,
  2. 一个host(就是属性文件里面的mail.host), 一个QQ账号(2823600378@qq.com)、一个授权码
  3. 授权码在QQ邮箱->设置->账户->(往下翻找到:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务)->点击黄色框[获取授权码登录第三方客户端邮箱] 里面的”生成授权码“
  ts.connect(properties.getProperty("mail.host"),"3504164084@qq.com","pxxebkqkejiqcjei");//两个参数,一个账号,一个密码

4. 构建一封邮件:MimeMessage

  MimeMessage message = new MimeMessage(session);

5. 为message配置发件人、收件人、主题、正文等信息

  1. 发件人:message.setFrom();//给定参数是一个new InternetAddress()对象,再把文我的账号给他
  2. 收件人:message.setRecipient();
    //Message.RecipientType.TO表示收件人
    //Message.RecipientType.CC抄送//A发邮件给B,但希望领导C也看见,就抄送给C
    //Message.RecipientType.BCC暗送
  3. 主题:message.setSubject();
  4. 正文:message.setContent();//还要给个编码格式
//发件人
            message.setFrom(new InternetAddress("3000064084@qq.com"));
            //收件人
            //Message.RecipientType.TO表示收件人
            //Message.RecipientType.CC抄送//A发邮件给B,但希望领导C也看见,就抄送给C
            //Message.RecipientType.BCC暗送
            message.setRecipient(Message.RecipientType.TO,new InternetAddress("203965846@qq.com"));
            //把文件抄送给xxx@qq.com
//            message.setRecipient(Message.RecipientType.CC,new InternetAddress("xxx@qq.com"));
            //主题
            message.setSubject("革命人永远是年轻");
            //设置正文(给个编码格式)
            message.setContent("我们万众一心去远航,凝聚情,凝聚爱,同心创未来","text/html;charset=utf-8");
          

6. 保存message、传输对象ts发送

			 //保存邮件
            message.saveChanges();
            //发送邮件
            ts.sendMessage(message,message.getAllRecipients());

7. 关闭传输对象ts

finally {
            if(ts!=null){
                try {
                    ts.close();
                } catch (MessagingException e) {
                    e.printStackTrace();
                }
            }
        }

完整代码

package com.itqf.utils;


import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;


//注册成功验证邮件发送
public class EmailUtils {
    public static void main(String[] args) {
        //
        Properties properties = new Properties();
        //“smtp.qq.com"可以改比如改成smtp.163.com
        properties.setProperty("mail.host","smtp.qq.com");
        //mail.transport.protocol邮件传输协议,这里是smtp传输协议
        properties.setProperty("mail.transport.protocol","smtp");
        properties.setProperty("mail.smtp.port","587");
        properties.setProperty("mail.smtp.auth","true");
        properties.setProperty("mail.debug","true");
        //设置key和value
        Session session = Session.getDefaultInstance(properties);
        Transport ts = null;
        try {
            //获取到传输的对象 发送邮件
            ts = session.getTransport();
            //pxxebkqkejiqcjei
            //发送邮件之前,校验账号和密码(这个密码不是qq号的密码,而是授权码)
            ts.connect(properties.getProperty("mail.smtp.host"),"3000064084@qq.com","pxxebkqkejiqcjei");//两个参数,一个账号,一个密码

            //构建一封邮件
            MimeMessage message = new MimeMessage(session);
            //发件人
            message.setFrom(new InternetAddress("3000064084@qq.com"));
            //收件人
            //Message.RecipientType.TO表示收件人
            //Message.RecipientType.CC抄送//A发邮件给B,但希望领导C也看见,就抄送给C
            //Message.RecipientType.BCC暗送
            message.setRecipient(Message.RecipientType.TO,new InternetAddress("203960056@qq.com"));
            //把文件抄送给xxx@qq.com
//            message.setRecipient(Message.RecipientType.CC,new InternetAddress("xxx@qq.com"));
            //主题
            message.setSubject("革命人永远是年轻");
            //设置正文(给个编码格式)
            message.setContent("我们万众一心去远航,凝聚情,凝聚爱,同心创未来","text/html;charset=utf-8");
            //保存邮件
            message.saveChanges();
            //发送邮件
            ts.sendMessage(message,message.getAllRecipients());

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(ts!=null){
                try {
                    ts.close();
                } catch (MessagingException e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

封装成一个Utils工具类

  1. 可以通过传一个user类,里面定义了邮箱地址u_email,也就是收件人的邮箱账号
  2. 邮件的正文message.setContent发送的是给这个user类一个激活连接
  String ip = InetAddress.getLocalHost().getHostAddress();
  String url = "http://"+ip+":8080/user?method=active&c="+user.getUcode();
  message.setContent(user.getUname()+",您好<br>欢迎注册myshop商城!请点击连接进行激活:<a href='"+url+"'>"+url+"</a>","text/html;charset=utf-8");
  1. MimeMessage对象通过写一个creatMsg方法,返回message
  2. private static MimeMessage createMsg(Session session,String myAccount,User user){}

完整代码EmailUtils工具类


import com.itqf.entity.User;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Properties;


//注册成功验证邮件发送
public class EmailUtils {
    public static void sendEmail(User user) {
        //qq账户
        String myAccount = "3500004084@qq.com";
        //授权码
        String myAuthorizationCode = "pxxebkqkejiqcjei";
        //发件人邮箱的smtp服务器地址。也可以写smtp.163.com
        String smtpHost = "smtp.qq.com";
        //
        Properties properties = new Properties();
        //“smtp.qq.com"可以改比如改成smtp.163.com
        properties.setProperty("mail.host",smtpHost);
        //mail.transport.protocol邮件传输协议,这里是smtp传输协议
        properties.setProperty("mail.transport.protocol","smtp");
        properties.setProperty("mail.smtp.port","587");
        properties.setProperty("mail.smtp.auth","true");
        properties.setProperty("mail.debug","true");
        //设置key和value
        Session session = Session.getDefaultInstance(properties);
        Transport ts = null;
        try {
            //获取到传输的对象 发送邮件
            ts = session.getTransport();
            //pxxebkqkejiqcjei
            //发送邮件之前,校验账号和密码(这个密码不是qq号的密码,而是授权码)
            ts.connect(properties.getProperty("mail.host"),myAccount,myAuthorizationCode);//两个参数,一个账号,一个密码

            //邮件
            MimeMessage message = createMsg(session,myAccount,user);
            //发送邮件
            ts.sendMessage(message,message.getAllRecipients());

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(ts!=null){
                try {
                    ts.close();
                } catch (MessagingException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    private static MimeMessage createMsg(Session session,String myAccount,User user){
        //构建一封邮件
        MimeMessage message = new MimeMessage(session);
        //发件人
        try {
            message.setFrom(new InternetAddress(myAccount));
            //收件人
            //Message.RecipientType.TO表示收件人
            //Message.RecipientType.CC抄送//A发邮件给B,但希望领导C也看见,就抄送给C
            //Message.RecipientType.BCC暗送
            message.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getUemail()));
            //把文件抄送给xxx@qq.com
//            message.setRecipient(Message.RecipientType.CC,new InternetAddress("xxx@qq.com"));
            //主题
            message.setSubject("myshop商城账号激活邮件");
            //设置正文(给个编码格式)
            String ip = InetAddress.getLocalHost().getHostAddress();
            String url = "http://"+ip+":8080/user?method=active&c="+user.getUcode();
            message.setContent(user.getUname()+",您好<br>欢迎注册myshop商城!请点击连接进行激活:<a href='"+url+"'>"+url+"</a>","text/html;charset=utf-8");
            //保存邮件
            message.saveChanges();
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return message;
    }

}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素心如月桠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值