• Java Web(十二) JavaMail发送邮件


    发送邮件的原理

    概叙

    邮件服务器:

    • 要在 Internet 上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在 Internet 很多 提供邮件服务的厂商:sina、sohu、163 等等他们都有自己的邮件服务器。
    • 这些服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投 递到邮件接收者的电子邮箱中。
    • 邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器和接收邮件的服务器。

    电子邮箱:

    • 电子邮箱(E-mail 地址)的获得需要在邮件服务器上进行申请,确切地说,电子邮箱其实就是用户在邮件服务器上申请的一个帐户。用户在邮件服务器上申请了一个帐号后,邮件服务器就会为这个帐号分配一定的空间,用户从而可以使用这个帐号以及空间,发送和接收电子邮件。

    邮件协议

    SMTP 协议-发邮件协议

    • 全称为 Simple Mail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与 SMTP 服务器之间、以及两台 SMTP 服务器之间的通讯规则。
    • 端口号:25。

    POP3 协议-收邮件协议

    • 全称为 Post Office Protocol(邮局协议),它定义了邮件客户端软件与 POP3 服务器的通讯规则。
    • 端口号:110。

    发送邮件流程

      img

    JavaMail

    JavaMail是提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。

    使用JavaMail需要导入两个jar包,mail.jar、activation.jar。

    使用qq邮箱发送邮件

    使用qq邮箱发送邮件必须联网,否则无效。

    package com.kindleheart.store.utils;
    
    import java.util.Properties;
    
    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.Message.RecipientType;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    
    public class MailTest {
    
        public static void main(String[] args) throws MessagingException {
            //服务器的设置
            Properties props = new Properties();
            props.setProperty("mail.host", "smtp.qq.com");//设置服务器地址
            props.setProperty("mail.smtp.auth", "true");//验证
    
            //邮箱帐号密码
            Authenticator authenticator = new Authenticator() {
                @Override
                public PasswordAuthentication getPasswordAuthentication() {
                    //必须使用授权码,而不是密码,去qq邮箱申请
                    return new PasswordAuthentication("873268974@qq.com","授权码");
                }
            };
    
            //1、与服务器建立连接:Session
            Session session = Session.getDefaultInstance(props, authenticator);
    
            //2、编写邮件:Message
            Message message = new MimeMessage(session);
            //2.1、发件人
            message.setFrom(new InternetAddress("873268974@qq.com"));
            //2.2、收件人 , to:收件人、cc :抄送、bcc:暗送(密送)。
            message.setRecipient(RecipientType.TO, new InternetAddress("kindleheart@qq.com"));
            //2.3、主题
            message.setSubject("测试");
            //2.4、正文
            String str = "哈哈,我发送了";
            message.setContent(str, "text/html;charset=UTF-8");
    
            //3、发送
            Transport.send(message);
        }
    
    }
    

    使用本地邮箱服务器和客户端发送邮件

    在没有联网的情况下可以使用该方法在自己的电脑上发送和接收邮件,可以用于测试项目。

    搭载本地环境

    1. 安装邮件服务器(易邮邮件服务器)

      双击安装包,进行配置

      • 设置域名

        img

      • 新建账户,新建aaa和bbb两个账户,用于发送和接收邮件

        img

    2. 安装foxmail邮箱

      双击安装包,进行配置

      • 我们刚刚在MailServer中创建了aaa,bbb两个账户,现在在foxmail邮箱中登入这两个账户

        img

      • 指定本地的邮件服务器

      img

    使用JavaMail在本地发送接受邮件

    package com.kindleheart.store.utils;
    
    import java.util.Properties;
    
    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.Message.RecipientType;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    
    public class MailTest {
    
        public static void main(String[] args) throws MessagingException {
            //服务器的设置
            Properties props = new Properties();
            props.setProperty("mail.host", "localhost");//设置服务器地址
            props.setProperty("mail.smtp.auth", "true");//权限验证
    
            //邮箱帐号密码
            Authenticator authenticator = new Authenticator() {
                @Override
                public PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("aaa@store.com","123");
                }
            };
    
            //1、与服务器建立连接:Session
            Session session = Session.getDefaultInstance(props, authenticator);
    
            //2、编写邮件:Message
            Message message = new MimeMessage(session);
            //2.1、发件人
            message.setFrom(new InternetAddress("aaa@store.com"));
            //2.2、收件人 , to:收件人、cc :抄送、bcc:暗送(密送)。
            message.setRecipient(RecipientType.TO, new InternetAddress("bbb@store.com"));
            //2.3、主题
            message.setSubject("测试");
            //2.4、正文
            String str = "哈哈,我发送了";
            message.setContent(str, "text/html;charset=UTF-8");
    
            //3、发送
            Transport.send(message);
        }
    
    }
    

    在foxmail邮箱中查看是否发送成功

    img

    作者:kindleheart
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    414. Third Maximum Number 第三大的数字
    java 正则表达式
    将含有逻辑运算符的字符串解析为逻辑符号
    ora-01830:日期格式图片在转换整个输入字符串之前结束
    mysql的字符拼接
    oracle执行计划详解
    oracle获取执行计划及优缺点 详解
    kmp算法中的nextval实例解释
    kmp算法中的next数组实例解释
    哈夫曼实例解释(哈夫曼编码)
  • 原文地址:https://www.cnblogs.com/kindleheart/p/9782623.html
Copyright © 2020-2023  润新知