Java实现邮件的发送

数年前,邮件的发送是经过人为的运输,从发件人---当地邮局---收件地邮局---收件人,付出的人力物力是非常大的。随着时代的进步,科技的发展,如今我们的生活中出现更高级发送邮件的方式,最常用的就是从(邮箱--邮箱),当然中间会经过多个邮箱服务器的转载,称为电子邮箱。此篇文章的内容就是简单的通过java程序发送邮件。

1.首先我们先了解邮件的协议

POP3

POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

SMTP

SMTP 的全称是 “ Simple Mail Transfer Protocoli,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议族,它帮助每台计算机在发送或中转信件时找到下一 个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可登录 SMTP 服务器,这就使得那些垃圾邮件散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

IMAP

IMAP全称是Internet Mail Access Protocol, 即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之间不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端 软件登录邮箱,看到的邮件以及状态都是

一致的。

IMAP和POP3有什么区别?

POP3协议介许电子邮件客户端下载服务器上的邮件,但是在客户端的操作 (如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的。

IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

当我们了解了邮件协议后,接下来准备发送一个简单的邮件

  1. 到qq邮箱的设置的账户里面开启 POP3/SMTP 和 IMAP/SMTP 服务
  1. 生成授权码

  1. 得到授权码

  1. 依赖
 <dependencies>

        <!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>javax.mail-api</artifactId>
            <version>1.6.2</version>
        </dependency>

    </dependencies>

5.邮件工具类,准备STMP登录的信息 (以qq邮箱为例)
//发邮件工具类
public class MainUtils {

    // 发件人邮箱地址
    private static final String USER = "fjq229@foxmail.com";
    // 授权码
    private static final String PASSWORD ="pnwqmnbbkhqcdfje";


    /**
     * @param addressee  收件人
     * @param text       内容
     * @param title      标题
     * @return
     */
    public static boolean sendMail(String addressee,String text,String title){

        try {
            //创建Properties集合
            final Properties  pros = new Properties();
            pros.put("mail.smtp.auth","true");          // 用户认证
            pros.put("mail.smtp.host","smtp.qq.com");   // 主机名      这里是qq邮箱  如果是163  就把qq改为163

            // 发件人的账号
            pros.put("mail.user",USER);
            // 发件人的授权码
            pros.put("mail.password",PASSWORD);

            // 构建授权码信息  用于进行SMTP身份验证
            Authenticator authenticator = new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    //用户名 密码(授权码)
                    String userName = pros.getProperty("mail.user");
                    String password = pros.getProperty("mail.password");
                    return new PasswordAuthentication(userName,password);
                }
            };

            // 创建邮件会话
            Session session = Session.getInstance(pros, authenticator);
            // 创建邮件信息
            MimeMessage message = new MimeMessage(session);
            // 创建发件人
            String name = pros.getProperty("mail.user");
            InternetAddress address = new InternetAddress(name);
            message.setFrom(address);

            // 设置收件人
            InternetAddress ToAddressee = new InternetAddress(addressee);
            message.setRecipient(Message.RecipientType.TO,ToAddressee);

            // 设置邮件标题
            message.setSubject(title);

            // 设置邮件内容
            message.setContent(text,"text/html;charset=UTF-8");

            

            // 发送邮件
            Transport.send(message);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public static void main(String[] args) {
        MainUtils.sendMail("3181404297@qq.com","吴斌这是你入职offer,欢迎入职xxx公司","offer");
        System.out.println("send success");
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值