JavaWeb-15-邮件发送

本文介绍了JavaWeb中如何实现邮件发送,包括SMTP和POP3协议的作用,邮件发送的原理,以及使用Java发送纯文本、带图片和附件的邮件。并提供了JavaMail API和Activation Framework的jar包依赖,以及JavaWeb注册成功后发送邮件的步骤。
摘要由CSDN通过智能技术生成

邮件发送

1、电子邮件

要实现网络上的邮件传输,就必须要有专门的邮件服务器

  • 邮件服务器,类似于生活中的邮局,负责接收用户传输过来的邮件,并且把邮件传输到接受者的邮箱中

SMTP 服务器地址 :一般都是 smtp.xxx.com,例如 QQ邮箱: smtp.qq.com

电子邮箱(E-mail 地址)的获得需要在邮件服务器上进行申请。例如要是用 QQ 邮箱,就要开通邮箱功能

2、传输协议

2.1 SMTP 协议(发送)

发送邮件:

  • 通常处理用户 smtp 请求(邮件发送请求)的服务器称之为 SMTP 服务器(邮件发送服务器)

2.2 POP3 协议(接收)

接收邮件:

  • 通常处理用户 pop3 请求(邮件接收请求)的服务器称之为 POP3 服务器(邮件接收服务器)

3、发送原理

邮件发送服务器:

在这里插入图片描述

协议:

在这里插入图片描述

  1. 张三通过 smtp 协议连接到 Smtp 服务器,然后发送一封邮件给 网易 的邮件服务器
  2. 网易 分析发现需要去 QQ 邮件服务器通过 smtp 协议将邮件转投给 QQ 的 Smtp服务器
  3. QQ 将接收到的邮件存储在 张三 的邮件账号的空间中
  4. 李四通过 Pop3协议连接到 pop3 服务器接收邮件
  5. 从 张三 的邮件账号空间中取出邮件
  6. pop3 服务器将取出来的邮件发送到 李四 那

注意:

  • 有时候你写的收件地址和发件地址等信息都是正确,控制台也打印了正确的信息,但对方的收件箱就是收不到信息
  • 这可能是收件箱服务器拒收了你发出的邮件(例如:认为你的邮件有毒,或者是广告)
  • 这时候可能在垃圾箱中找到,也有一定几率找不到
  • 所以重复邮件不要多次发送,或者更换收件箱

4、使用 Java 发送

4.1 需要的 jar 包依赖

使用 Java 发送 E-mail,需要准备 JavaMail API 和 Java Activation Framework

需要两个 jar 包:

  • mail.jar
  • activation.jar

在这里插入图片描述

4.2 纯文本邮件

  1. 导包

  2. 简单邮件传输实现

    1. 准备参数
    2. 获取 Session 对象
    3. 获取传输对象
    4. 登录授权(授权码)
    5. 编写邮件(邮件对象,发件人,收件人,标题,内容。。。)
    6. 发送邮件
    7. 关闭服务器资源
    package com.aze;
    
    import com.sun.mail.util.MailSSLSocketFactory;
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Properties;
    
    //发送一封简单的邮件
    public class simpleMail {
         
        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 对象
            //使用QQ邮箱的时候才需要,其他邮箱不需要这一段代码
            Session session = Session.getDefaultInstance(prop, new Authenticator() {
         //获取和SMTP服务器的连接对象
                public PasswordAuthentication getPasswordAuthentication() {
         
                    //发件人邮件用户名、授权码
                    return new PasswordAuthentication("XXXX@qq.com", "授权码");
                }
            });
    
            //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
            session.setDebug(true);
    
            //2、通过session得到transport对象
            Transport ts = session.getTransport();//通过这一次和SMTP服务器的连接对象获取发送邮件的传输对象
    
            //3、使用邮箱的用户名和授权码连上SMTP邮件服务器,即登陆
            ts.connect("smtp.qq.com", "XXXX@qq.com", "授权码");
    
            //4、创建邮件对象MimeMessage——点击网页上的写信
            //创建一个邮件对象
            MimeMessage message = new MimeMessage(session);
            //指明邮件的发件人——在网页上填写发件人
            message.setFrom(new InternetAddress("XXXX@qq.com"));//设置发件人
            //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发——在网页上填写收件人
            message.setRecipient(Message.RecipientType.TO, new InternetAddress("XXXX@qq.com"));//设置收件人
            //邮件的标题——在网页上填写邮件标题
            message.setSubject("简单邮件发送实现");//设置邮件主题
            //邮件的文本内容——在网页上填写邮件内容
            message.setContent("<h2 style='color:red'>你好啊!</h2>", "text/html;charset=UTF-8");//设置邮件的具体内容
    
            //5、发送邮件——在网页上点击发送按钮
            ts.sendMessage(message, message.getAllRecipients());
    
            //6、关闭连接对象,即关闭服务器上的连接资源
            ts.close();
        }
    }
    

4.3 带图片的邮件

package com.aze;

import com.sun.mail.util.MailSSLSocketFactory;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.security.GeneralSecurityException;
import java.util.Properties
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值