Java-邮件发送

在这里插入图片描述

邮件传输协议

SMTP协议:
  • 发送邮件
    我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
POP3协议:
  • 接受邮件
    我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。
邮件收发的原理

在这里插入图片描述

  • 第1步:
    用户一通过STMP协议连接STMP服务器,然后发一封邮件给QQ邮件服务器
  • 第2步:
    QQ分析发现还需要去QQ的邮件服务器,通过smtp协议将邮件转投给QQ的SMTP服务器
  • 第3步:
    QQ将接收到的邮件存储在 211516844@qq.com这个邮件账号的空间中
  • 第4步:
    用户二通过POP3协议连接POP3服务器收取邮件
  • 第5步:
    POP3邮件服务器从用户二的邮箱空间里拿取第3步保存到的邮件
  • 第6步:
    POP3服务器将拿到的邮件返回给用户二
需要注意的地方

可能你把邮件发出去了,但是收件人的收件箱里没有收到邮件(误认为你发的邮件是广告等类型的垃圾邮件),这时不妨去垃圾箱找找,可能会转角遇到爱(发现邮件被收在了垃圾箱里)

Java发送邮件

发送邮件前的准备

首先你应该准备 JavaMail API 和Java Activation Framework(即引入两个jar包:mail.jar、activation.jar)
自己建一个lib文件夹,将两个jar包放进去
在这里插入图片描述
接着将lib目录添加到项目输出目录中
在这里插入图片描述
发送邮件的三大步骤

  • 1.创建包含邮件服务器的网络连接信息的Session对象。
  • 2.创建代表邮件内容的Message对象
  • 3.创建Transport对象,连接服务器,发送Message,关闭连接

邮件发送主要有四个类,记住这四个类,就很容易写出邮件处理程序
在这里插入图片描述

发送纯文本邮件
  1. 如果给QQ邮箱发送邮件,则需获取相应的权限
    QQ邮箱–>邮箱设置–>账户安全
    在这里插入图片描述
    在这里插入图片描述
  2. 使用JavaMail发送邮件的5个步骤:
    1.开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
    2.通过session得到transport对象
    3.使用邮箱的用户名和授权码连上邮件服务器
    4.邮件对象:创建邮件对象–>指明邮件的发件人–>/指明邮件的收件人–>设置邮件的标题–>设置邮件的文本内容
    5.发送邮件
public class SendEmail {

    public static void main(String[] args) throws Exception {

        Properties prop = new Properties();
        prop.setProperty("mail.host", "smtp.qq.com");  设置QQ邮件服务器
        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);

        //使用JavaMail发送邮件的5个步骤

        //创建定义整个应用程序所需的环境信息的 Session 对象

        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                //发件人邮件用户名、授权码
                return new PasswordAuthentication("2285815484@qq.com", "授权码");
            }
        });


        //1、开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);

        //2、通过session得到transport对象
        Transport ts = session.getTransport();

        //3、使用邮箱的用户名和授权码连上邮件服务器
        ts.connect("smtp.qq.com", "2285815484@qq.com", "授权码");

        //4、创建邮件

        //创建邮件对象
        MimeMessage message = new MimeMessage(session);

        //指明邮件的发件人
        message.setFrom(new InternetAddress("2285815484@qq.com"));

        //指明邮件的收件人
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("211516844@qq.com"));

        //邮件的标题
        message.setSubject("只包含文本的简单邮件");

        //邮件的文本内容
        message.setContent("大王叫我来巡山,哈哈哈!", "text/html;charset=UTF-8");

        //5、发送邮件
        ts.sendMessage(message, message.getAllRecipients());

        ts.close();
    }

}
带图片和附件的邮件

先认识两个类和一个名词:

  1. MIME :(多用途互联网邮件扩展类型)
  2. MimeBodyPart类:
    javax.mail.internet.MimeBodyPart类 表示的是一个MIME消息,它和MimeMessage类一样都是从Part接口继承过来。
  3. MimeMultipart类:
    javax.mail.internet.MimeMultipart是抽象类 Multipart的实现子类,它用来组合多个MIME消息。一个MimeMultipart对象可以包含多个代表MIME消息的MimeBodyPart对象。
    在这里插入图片描述
发送包含图片的邮件
public class SendImageEmail {
    public static void main(String[] args) throws Exception {

        Properties prop = new Properties();
        prop.setProperty("mail.host", "smtp.qq.com");  设置QQ邮件服务器
        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);

        //使用JavaMail发送邮件的5个步骤

        //1、创建定义整个应用程序所需的环境信息的 Session 对象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                //发件人邮件用户名、授权码
                return new PasswordAuthentication("2285815484@qq.com", "授权码");
            }
        });


        //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);

        //2、通过session得到transport对象
        Transport ts = session.getTransport();

        //3、使用邮箱的用户名和授权码连上邮件服务器
        ts.connect("smtp.qq.com", "2285815484@qq.com", "授权码");

        //4、创建邮件

        //创建邮件
        MimeMessage message = new MimeMessage(session);

        // 设置邮件的基本信息
        //发件人
        message.setFrom(new InternetAddress("2285815484@qq.com"));
        //收件人
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("211516844@qq.com"));
        //邮件标题
        message.setSubject("带图片的邮件");

        // 准备邮件数据

        // 准备图片数据
        MimeBodyPart image = new MimeBodyPart();
        DataHandler dh = new DataHandler(new FileDataSource("src/resources/bz.jpg"));
        image.setDataHandler(dh);
        image.setContentID("bz.jpg");

        // 准备正文数据
        MimeBodyPart text = new MimeBodyPart();
        text.setContent("这是一封邮件正文带图片<img src='cid:bz.jpg'>的邮件", "text/html;charset=UTF-8");

        // 描述数据关系
        MimeMultipart mm = new MimeMultipart();
        mm.addBodyPart(text);
        mm.addBodyPart(image);
        mm.setSubType("related");

        //设置到消息中,保存修改
        message.setContent(mm);
        message.saveChanges();

        //5.发送邮件
        ts.sendMessage(message, message.getAllRecipients());
        ts.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值