博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用JavaMail发送邮件
阅读量:6187 次
发布时间:2019-06-21

本文共 5789 字,大约阅读时间需要 19 分钟。

电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如果通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。

1. 电子邮件协议

  电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。

2. JavaMail

  我们平时通过 Java 代码打开一个 http 网页链接时,通常可以使用已经对 http 协议封装好的 HttpURLConnection 类来快速地实现。Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去 Java 或 Oracle 官网下载。

  下载地址:

  下载完毕后,解压下载文件,在根目录下找到mail.jar

 

   现在打开Java编辑软件(Eclipse或者MyEclipse),首先建立一个Java项目,把刚才下载好的mail.jar包导入到工程,最好建立一个lib文件夹,然后把jar包Build Path-->Add to Build Path加入环境变量中。

3. 创建一封一个简单的电子邮件

  邮件创建步骤:

  1. 创建一个邮件对象(Mimemessage);
  2. 设置发件人,收件人,可选增加多个收件人,抄送人,密送人;
  3. 设置邮件的主题(标题);
  4. 设置邮件的正文(内容);
  5. 设置显示的发送时间;
  6. 保存到本地。

  代码实现:

import javax.mail.Session;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import java.io.FileOutputStream;import java.io.OutputStream;import java.util.Date;import java.util.Properties;public class SimpleSendEmail {    public static void main(String[] args) throws Exception {        // 1. 创建一封邮件        Properties props = new Properties();//用于连接邮件服务器的参数配置(发送邮件时才需要用到)        Session session = Session.getDefaultInstance(props);//根据参数配置,创建会话对象(为了发送邮件准备的)        MimeMessage message = new MimeMessage(session);//创建邮件对象        /*         * 也可以根据已有的eml邮件文件创建 MimeMessage 对象         * MimeMessage message = new MimeMessage(session, new FileInputStream("MyEmail.eml"));         */        // 2. From: 发件人        //    其中 InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码        //    真正要发送时, 邮箱必须是真实有效的邮箱。        message.setFrom(new InternetAddress("aa@send.com", "USER_AA", "UTF-8"));        // 3. To: 收件人        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("cc@receive.com", "USER_CC", "UTF-8"));        //    To: 增加收件人(可选)        message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("dd@receive.com", "USER_DD", "UTF-8"));        //    Cc: 抄送(可选)        message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));        //    Bcc: 密送(可选)        message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("ff@receive.com", "USER_FF", "UTF-8"));        // 4. Subject: 邮件标题        message.setSubject("邮件标题", "UTF-8");        // 5. Content: 邮件正文(可以使用html标签)        message.setContent("这是邮件正文。。。", "text/html;charset=UTF-8");        // 6. 设置显示的发件时间        message.setSentDate(new Date());        // 7. 保存前面的设置        message.saveChanges();        // 8. 将该邮件保存到本地        OutputStream out = new FileOutputStream("MyEmail.eml");        message.writeTo(out);        out.flush();        out.close();    }}

  然后在你的项目路径下,产生了一个MyEmail.eml文件,打开文件如图显示:

4. 使用QQ发送电子邮件

  发送邮件首先需要有一个邮箱账号和密码,本文以腾讯QQ邮箱为例,邮箱账号必须要开启 SMTP 服务,在浏览器网页登录邮箱后一般在邮箱的“设置”选项中可以开启,并记下邮箱的 SMTP 服务器地址,如下所示(其他邮箱大同小异):

点击邮箱首页设置

  代码实现:

import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import java.security.GeneralSecurityException;import java.util.Date;import java.util.Properties;/** * 实现QQ邮箱发送的Demo */public class SendMail {    public static void main(String[] args) throws GeneralSecurityException {        final String from = "xxxxxxx@qq.com";//发送方邮箱,填写自己的真实邮箱        final String password = "这里填写刚才QQ邮箱拿到的授权码";        String host = "smtp.qq.com";//邮件服务器地址        Properties properties = new Properties();//参数键值对实例对象        properties.setProperty("mail.debug", "true");//设置开启debug模式        properties.setProperty("mail.smtp.host", host);//设置邮件服务器        properties.put("mail.smtp.ssl.enable", "true");//设置激活SSL验证        properties.put("mail.smtp.auth", true);//设置用户身份验证        properties.put("mail.transport.protocol", "smtp");//设置邮件协议        //得到默认的Session对象        Session session = Session.getDefaultInstance(properties, new Authenticator() {            @Override            protected PasswordAuthentication getPasswordAuthentication() {                //通过发送方邮箱号和邮箱授权码创建用户登录验证                return new PasswordAuthentication(from, password);            }        });//        session.setDebug(true);//设置开启dubug模式,和上面设置一样,会覆盖上面设置        MimeMessage mimeMessage = new MimeMessage(session);        try {            //InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码            mimeMessage.setFrom(new InternetAddress(from, "张三", "UTF-8"));//设置发送方邮件地址,必须真实有效            //设置收件人邮箱号,必须真实有效,不然报错            mimeMessage.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("xxxxx@outlook.com", "收件人", "UTF-8"));            //设置收件人,必须真实有效,不然报错            mimeMessage.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("xxxxx@139.com", "收件人1", "UTF-8"));            //增加设置收件人,必须真实有效,不然报错            mimeMessage.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("xxxxxx@qq.com", "收件人2", "UTF-8"));            //设置抄送人,必须真实有效,不然报错            mimeMessage.addRecipient(MimeMessage.RecipientType.CC, new InternetAddress("xxxxxx@163.com", "抄送人", "UTF-8"));            //设置密送人,必须真实有效,不然报错            mimeMessage.addRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("xxxxxx@foxmail.com", "密送人", "UTF-8"));            mimeMessage.setSentDate(new Date());//设置发送邮件时间            mimeMessage.setSubject("邮件标题", "UTF-8");//设置邮件标题和编码集            mimeMessage.setContent("邮件正文内容", "text/html;charset=UTF-8");//设置邮件正文内容和内容类型            Transport.send(mimeMessage);            System.out.println("邮件发送成功...");        } catch (Exception e) {            e.printStackTrace();            System.out.println("邮件发送失败...");        }    }}

现在查看收件人的邮箱,发现收到了邮件内容啦,恭喜你成功完成邮箱发送的功能。

转载于:https://www.cnblogs.com/blogzxl/p/6970455.html

你可能感兴趣的文章
架构搭建学习知识点一
查看>>
通过GitHub Page开通博客啦
查看>>
一步步学习ASP.NET MVC3 (13)——HTML辅助方法
查看>>
c++游戏编程书籍
查看>>
C++面向对象编程初步
查看>>
CentOS6.5下卸载自带的MySQL数据库安装MySQL5.6
查看>>
软件工程——团队答辩
查看>>
2014,为了梦想宁愿破釜沉舟
查看>>
《CLR via C#》读书笔记 之 程序集加载和反射
查看>>
工具WinSCP:windows和Linux中进行文件传输
查看>>
计算机说 - 原码、反码和补码
查看>>
一些常用的算法
查看>>
实用工具集
查看>>
sql server 的osql 使用例子
查看>>
[BZOJ 5390]: [Lydsy1806月赛]糖果商店
查看>>
POJ 1797 Heavy Transportation (最短路)
查看>>
深入浅出理解深拷贝(mutableCopy)和浅拷贝(Copy)
查看>>
自动化测试基础篇--Selenium弹出框alert
查看>>
网络子系统在链路层的收发过程剖析(一)【转】
查看>>
Linux系统调用--mmap/munmap函数详解【转】
查看>>