发送邮件的原理

概叙

邮件服务器:

要在 Internet 上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在 Internet 很多 提供邮件服务的厂商:sina、sohu、163 等等他们都有自己的邮件服务器。

这些服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投 递到邮件接收者的电子邮箱中。

邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器和接收邮件的服务器。

电子邮箱:

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

邮件协议

SMTP 协议-发邮件协议

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

端口号:25。

POP3 协议-收邮件协议

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

端口号:110。

发送邮件流程

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);

}

}

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

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

搭载本地环境

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

双击安装包,进行配置

设置域名

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

安装foxmail邮箱

双击安装包,进行配置

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

指定本地的邮件服务器

使用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邮箱中查看是否发送成功

java web 邮件_Java Web(十二) JavaMail发送邮件相关推荐

  1. java 包权限_Java基础(十二)之包和权限访问

    软件包 软件包解决了两个类名字一样的问题.软件包就是一个"文件夹". 包名的命名规范: 1.要求所有字母都小写: 2.包名一般情况下,是你的域名倒过来写.比如baidu.com,p ...

  2. java 操作窗口_java selenium (十二) 操作弹出窗口

    public static void testMultipleWindowsTitle(WebDriver driver) throws Exception { String url="E: ...

  3. Kali Linux Web 渗透测试— 第十二课-websploit

    Kali Linux Web 渗透测试- 第十二课-websploit 文/玄魂 目录 Kali Linux Web 渗透测试- 第十二课-websploit..................... ...

  4. Java NIO系列教程(十二) Java NIO与IO

    原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞 当学习了Java ...

  5. 【零基础学Java】—Java 日期时间(三十二)

    [零基础学Java]-Java 日期时间(三十二) DateFormat 是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间. 日期/时间格式化子类(如SimpleDateFor ...

  6. Java程序设计 图形用户界面 【十二】下拉列表JComboBox

    Java程序设计 图形用户界面 [十二]下拉列表JComboBox 下拉列表JComboBox JList是以列表框的形式进行显示的 有列表又可以自己输入数据这种组件就称为下拉列表框 JComboBo ...

  7. Web Hacking 101 中文版 十二、开放重定向漏洞

    十二.开放重定向漏洞 作者:Peter Yaworski 译者:飞龙 协议:CC BY-NC-SA 4.0 描述 根据 OWASP,开放重定向出现在应用接受参数并将用户重定向到该参数值,并且没有对该值 ...

  8. java 实现 web 客户端_Java web客户端和服务器端交互的原理

    Java web客户端和服务器端交互的原理 其实HTTP客户端和服务器端的交互原理很简单:即先是浏览器和服务器端建立Socket无状态连接,也就是短连接,然后通过IO流进行报文信息(这个报文是严格遵循 ...

  9. java web环境_java web

    HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerException HTTP ...

  10. java web 教程_Java Web服务教程

    java web 教程 Welcome to the Java Web Services Tutorial. Here we will learn about web services, useful ...

最新文章

  1. python获取excel某一列所有值-Python读取Excel一列并计算所有对象出现次数的方法...
  2. 用gdb调试core文件
  3. optee中添加一个中断以及底层代码的相关解读
  4. Oracle 的两种工作模式Dedicated Server 和 Shared Server
  5. Serializable的作用
  6. win7 VS2013 新建工程 编译lua5.1 静态库
  7. ubuntu系统中import h5py, ImportError: No module named h5py的解决方法
  8. 如何成功构建大规模 Web 搜索引擎架构?
  9. android studio 更改背景和设置字体大小
  10. cesium 取消光晕
  11. CVS update常用技巧
  12. Maven--可选依赖
  13. Advanced Javascript outlining插件说明
  14. 涨知识--地球自转会影响飞机飞行时间吗?
  15. Office2016 Visio2016 Project2016零售版转换VL版
  16. java学习之屌丝逆袭
  17. 阿里云--实人认证的接口
  18. win11文件夹里有却搜索不到了?
  19. 至联云为你解析Filecoin最新经济模型:180天线性释放是什么意思?
  20. python中花括号_震惊Python的精髓居然是方括号花括号和圆括号

热门文章

  1. Windows每月更新补丁离线安装包下载
  2. PowerBuilder9.0连接ORACLE数据库
  3. Python爬虫实战(二):爬取快代理构建代理IP池
  4. 五笔字根表识别码图_怎么学五笔 五笔字根表键盘图 【详细介绍】
  5. 百度实习1,2,3面-教育知心搜索前端项目组
  6. Hello!SCDN
  7. 浅谈“如何学习编程——学会用编程软件编程”
  8. 深度解析国内主流离线编程软件
  9. 互联网常用系统监控工具
  10. 工时分析软件哪个好用?ECRS工时分析软件-精益人都在用的IE分析软件