一、前言

最近和聚哥一起研究了javamail,因为在开发的系统中需要使用一个发送邮件的功能,所以就想到了javamail。当然在以前做的项目中也用到过发送邮件的功能,但是没有这么深入的研究过。所以就不太清楚了。下面就向大家介绍一下Javamail。

二、什么是javamail

JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。【From 百科】

所以我们可以用javamail来开发一个邮件服务器。

在具体操作之前呢,小编先向大家分享一些关于邮件的知识:

  • 邮件服务器

    在国内,我们常用的邮箱有网易、新浪、QQ邮箱等。这些基本都是主流。他们有这不同的邮件服务器。
    
  • pop3 收信 110

    全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。POP服务器是用来收信的,而且每个Email地址一般只有一个。如果你要同时收取多个邮箱的信件,就必须挨个设置每个邮箱的POP3服务器地址。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件,提供了SSL加密。
    
  • SMTP 发信 25

      SMTP则是负责邮件服务器与邮件服务器之间的寄信的通讯协定。简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
    
  • 授权码

    第三方客户端(如hiibook等,不包括自己的客户端)登录邮箱的话,就会收到一个错误消息:“需要用授权码登录”,或者提示“无法连接到服务器”。
    这是一个新的策略,为了使得邮箱更加的保密。
    

下面提供网页和QQ的授权码设置:

网易授权码设置
QQ授权码设置

三、发送邮件

关于发邮件,小编曾经在《windows下使用cmd(命令行)发送邮件》中向大家介绍过了,我们通过远程网易的邮件服务器。然后在对服务器打招呼,向服务器表明身份,登录认证,编写邮件,邮件发送等步骤。操作还是可以的。其实这个就是javamail的原理。我们输入的操作,都是javamail运行产生输出的。下面就用java语言向大家展示一下过程:

环境说明:

  • JDK 1.6 以上

  • 需要jar包,mail.jar和activation.jar。附:JavaMail下载地址

3.1 建立java web项目

导入jar包:

3.2 建立发送邮件的方法

建立包com.dmsd.mail,在此包下建立发送邮件的类EmailUtil。其中的一个方法如下:

package com.dmsd.mail;import java.io.UnsupportedEncodingException;
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.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;import org.omg.CORBA.PRIVATE_MEMBER;public class EmailUtil {/***发件正文***/private static String link = "http://www.baihe.com/betatest/betatest_newlandpage.html";private static String getContent(String link){String content = "<h3>皮皮虾我们走,一起去找女朋友!</h3>"+ "<a href='"+ link +"'>点此去找</a>";return content ;}/*** 给单个人或者多个人发送邮件(不带附件)* @param to 收件人邮箱,类似"XXX@163.com,xxx@qq.com"* @param content 邮件信息* @param host 邮件服务器地址  ,例如smtp.163.com* @param port 邮件服务器端口,例如smtp 25  pop3 110* @param from 发件人邮箱,类似XXX@163.com、xxx@qq.com* @param password 发件人邮箱的授权码,注意第三方登录邮箱使用的是授权码* @param sendName 发件人姓名* @param subject 主题* @throws UnsupportedEncodingException */public static void sendEmail(String to, String content,String host,String port,String sendName, String from, String password,String subject) throws UnsupportedEncodingException {/*** 1、创建Session ***/Properties props = new Properties();// 开启调试模式props.setProperty("mail.debug", "true");// 发送主机需要身份验证props.setProperty("mail.smtp.auth", "true");// 设置邮件服务器名称props.setProperty("mail.host", host);// 设置邮件服务器端口props.setProperty("mail.port", port);// 发送协议名称props.setProperty("mail.transport.protocol", "smtp");final String  fromstr = from;final String passwordstr =password;// 环境信息Session session = Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {// 在session中设置账户信息,Transport发送邮件时会使用return new PasswordAuthentication( fromstr, passwordstr);}});/*** 2、创建邮件对象 ***/Message msg = new MimeMessage(session);try {// 设置发件人msg.setFrom(new InternetAddress("\"" + MimeUtility.encodeText(sendName) + "\" <"+from+">"));// 设置标题msg.setSubject(subject);// 设置内容msg.setContent(content, "text/html;charset=UTF-8");/*** 3、发送邮件 ***/Transport.send(msg, InternetAddress.parse(to) );} catch (MessagingException e) {System.out.println("发送邮件失败!!");e.printStackTrace();}System.out.println("发送邮件成功!!");}public static void main(String[] args) throws UnsupportedEncodingException {sendEmail("18333602097@163.com,1102716752@qq.com", getContent(link ),"smtp.163.com","25","ARES","18333602097@163.com","这是授权码","百合网");}
}

当我们运行发送邮件的main方法的时候,就会在控制台中输出如下信息:

EHLO Ares-PC
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFp_6efUCa0xDrUUUUj
250-STARTTLS
250 8BITMIME
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "coremail", arg "1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFp_6efUCa0xDrUUUUj"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 dXNlcm5hbWU6
xxxxxxxxx==
334 UGFzc3dvcmQ6
xxxxxxxxxxx==
235 Authentication successful
DEBUG SMTP: use8bit false
MAIL FROM:<18333602097@163.com>
250 Mail OK
RCPT TO:<18333602097@163.com>
250 Mail OK
RCPT TO:<1102716752@qq.com>
250 Mail OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   18333602097@163.com
DEBUG SMTP:   1102716752@qq.com
DATA
354 End data with <CR><LF>.<CR><LF>
From: ARES <18333602097@163.com>
Message-ID: <1943435117.0.1495432896861.JavaMail.Ares@smtp.163.com>
Subject: =?GBK?B?sNm6z834?=
MIME-Version: 1.0
Content-Type: text/html;charset=UTF-8
Content-Transfer-Encoding: quoted-printable<h3>=E7=9A=AE=E7=9A=AE=E8=99=BE=E6=88=91=E4=BB=AC=E8=B5=B0=EF=BC=8C=E4=B8=
=80=E8=B5=B7=E5=8E=BB=E6=89=BE=E5=A5=B3=E6=9C=8B=E5=8F=8B=EF=BC=81</h3><a h=
ref=3D'http://www.baihe.com/betatest/betatest_newlandpage.html'>=E7=82=B9=
=E6=AD=A4=E5=8E=BB=E6=89=BE</a>
.
250 Mail OK queued as smtp11,D8CowADHDkzCfiJZB+cFGw--.6501S2 1495432900
QUIT
221 Bye
发送邮件成功!!

在以上的这些信息中,就是我们在dos中输入的命令,对其中的数据进行了操作,我们使用的javamail就相当是对dos的这些命令进行了封装,更加的容易让人立即。

下面是我收到的邮件,上面的是使用的是”18333602097@163.com,1102716752@qq.com”所以会给这两个账号发送,如果只是“18333602097@163.com”就只会给一个人发送了这样就达到了群发的功能更:

四、小结

通过研究发送邮件,对其中的路子更加的熟悉了,基本没有什么难度了,操作也比较简答了,使用也更加的方便。

这里我需要向大家点击的是使用授权码。才可以授权成功哦!另外就是可以达到给单个人发,也可以给多人发邮件,操作简单,朋友们可以在我的基础上修改,把我传入的参数序列化,可能会更加的方便了。

下一篇博客将向大家介绍使用JavaMail发送带附件的邮件,敬请期待。

【java】javamail简介以及发送邮件相关推荐

  1. java毕业设计——基于Java+Javamail的邮件收发系统设计与实现(毕业论文+程序源码)——邮件收发系统

    基于Java+Javamail的邮件收发系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Java+Javamail的邮件收发系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

  2. Java EE 简介

    Java EE 简介 Java EE 基本架构 JavaEE 的诞生是为了解决传统 C/S 架构的弊端:客户端臃肿庞大,扩展性差等弊端. JavaEE 将传统的两层结构细分为了四层. 这四层分别是:C ...

  3. java程序包不存在_第一章 Java语言简介

    Java语言简介 Java之父 James Gosling(詹姆斯·高斯林) 正式诞生时间 1995年,已有二十多年历史 三大方向 JavaSE(桌面版,基础需重点掌握) JavaME(移动版,现在基 ...

  4. (一:NIO系列)JAVA NIO 简介

    出处:JAVA NIO 简介 Java 中 New I/O类库 是由 Java 1.4 引进的异步 IO.由于之前老的I/O类库是阻塞I/O,New I/O类库的目标就是要让Java支持非阻塞I/O, ...

  5. ibm java_IBM i 上Java 虚拟机简介

    Abstract IBM i 上Java 虚拟机简介 Body Java在IT业界有多流行?google上搜索一下java, 结果一目了然(今天早上我搜索到的记录数是840000000条).Java之 ...

  6. Java异常(一) Java异常简介及其架构

    概要 本章对Java中的异常进行介绍.内容包括: Java异常简介 Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.htm ...

  7. Java:计算机编程语言Java的简介、编程环境/工具、如何学习Java之详细攻略

    Java:计算机编程语言Java的简介.编程环境/工具.如何学习Java之详细攻略 目录 Java的简介 1.Java的工作原理--基于Eclipse等编程Java语言→定义Java类→Java虚拟机 ...

  8. OpenCV Java开发简介

    OpenCV Java开发简介 OpenCV Java开发简介 我们将在本指南中做什么 获得适当的OpenCV 下载 构建 Java示例与Ant Java和Scala的SBT项目 运行SBT样本 Op ...

  9. JDK14中的java tools简介

    文章目录 故事发生了 java tools简介 jaotc jar jarsigner java javac javadoc javap jcmd jconsole jdb jdeprscan jde ...

最新文章

  1. SPI通信协议:单片机spi通信接口什么意思,spi接口干什么用的?
  2. php作为弱语言是最棒的~哈哈哈哈
  3. SAP Fiori element框架smart control运行时的生成原理
  4. 数据挖掘—Apriori算法(Java实现)
  5. 【包邮送书活动】20210924期-开奖通知
  6. vscode 调试 C++/JavaScript
  7. Windows Server 2012学习
  8. table合并单元格_element ui el-table 合并单元格
  9. mongodb 良贴
  10. java中卫语句详解
  11. Shell命令-线上查询及帮助之man、help
  12. Code Server 是什么?
  13. runtime error python 3.5_Python 3.5 RuntimeError: can't start new thread
  14. 一点资讯战略升级:否定百度收购同时与微博牵手
  15. 成为第一没有捷径:AI新势力MindSpore成长秘籍 | 源创者说
  16. 平衡二叉树的左旋右旋详解 看不懂你打我
  17. P1162 填涂颜色问题(广度优先搜索BFS)
  18. python import turtle as t_turtle库的学习笔记(python)
  19. Pcap4J抓包基本使用方法
  20. 推荐一款免费录屏软件

热门文章

  1. linux下jdk安装步骤_jdk下载安装步骤
  2. ios友盟错误_iOS 2017友盟错误统计及分析
  3. upper_bound和lower_bound用法(史上最全)
  4. 五姐妹因没嫁妆集体自杀 绝望跳河
  5. 把OctoberCMS的web服务器由Apache更换为Nginx
  6. 常用的几种PPT做图小技巧!
  7. Qt数据库应用21-数据分组导出
  8. 简单工厂—工厂方法—抽象工厂
  9. 应用消息队列设计可以解决哪些实际问题?
  10. altera系列fifo和ram