【java】javamail简介以及发送邮件
一、前言
最近和聚哥一起研究了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的授权码设置:
三、发送邮件
关于发邮件,小编曾经在《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简介以及发送邮件相关推荐
- java毕业设计——基于Java+Javamail的邮件收发系统设计与实现(毕业论文+程序源码)——邮件收发系统
基于Java+Javamail的邮件收发系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Java+Javamail的邮件收发系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...
- Java EE 简介
Java EE 简介 Java EE 基本架构 JavaEE 的诞生是为了解决传统 C/S 架构的弊端:客户端臃肿庞大,扩展性差等弊端. JavaEE 将传统的两层结构细分为了四层. 这四层分别是:C ...
- java程序包不存在_第一章 Java语言简介
Java语言简介 Java之父 James Gosling(詹姆斯·高斯林) 正式诞生时间 1995年,已有二十多年历史 三大方向 JavaSE(桌面版,基础需重点掌握) JavaME(移动版,现在基 ...
- (一:NIO系列)JAVA NIO 简介
出处:JAVA NIO 简介 Java 中 New I/O类库 是由 Java 1.4 引进的异步 IO.由于之前老的I/O类库是阻塞I/O,New I/O类库的目标就是要让Java支持非阻塞I/O, ...
- ibm java_IBM i 上Java 虚拟机简介
Abstract IBM i 上Java 虚拟机简介 Body Java在IT业界有多流行?google上搜索一下java, 结果一目了然(今天早上我搜索到的记录数是840000000条).Java之 ...
- Java异常(一) Java异常简介及其架构
概要 本章对Java中的异常进行介绍.内容包括: Java异常简介 Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.htm ...
- Java:计算机编程语言Java的简介、编程环境/工具、如何学习Java之详细攻略
Java:计算机编程语言Java的简介.编程环境/工具.如何学习Java之详细攻略 目录 Java的简介 1.Java的工作原理--基于Eclipse等编程Java语言→定义Java类→Java虚拟机 ...
- OpenCV Java开发简介
OpenCV Java开发简介 OpenCV Java开发简介 我们将在本指南中做什么 获得适当的OpenCV 下载 构建 Java示例与Ant Java和Scala的SBT项目 运行SBT样本 Op ...
- JDK14中的java tools简介
文章目录 故事发生了 java tools简介 jaotc jar jarsigner java javac javadoc javap jcmd jconsole jdb jdeprscan jde ...
最新文章
- SPI通信协议:单片机spi通信接口什么意思,spi接口干什么用的?
- php作为弱语言是最棒的~哈哈哈哈
- SAP Fiori element框架smart control运行时的生成原理
- 数据挖掘—Apriori算法(Java实现)
- 【包邮送书活动】20210924期-开奖通知
- vscode 调试 C++/JavaScript
- Windows Server 2012学习
- table合并单元格_element ui el-table 合并单元格
- mongodb 良贴
- java中卫语句详解
- Shell命令-线上查询及帮助之man、help
- Code Server 是什么?
- runtime error python 3.5_Python 3.5 RuntimeError: can't start new thread
- 一点资讯战略升级:否定百度收购同时与微博牵手
- 成为第一没有捷径:AI新势力MindSpore成长秘籍 | 源创者说
- 平衡二叉树的左旋右旋详解 看不懂你打我
- P1162 填涂颜色问题(广度优先搜索BFS)
- python import turtle as t_turtle库的学习笔记(python)
- Pcap4J抓包基本使用方法
- 推荐一款免费录屏软件