Java Mail 邮件发送(一):入门Demo
本文首发于简书,Java Mail 邮件发送(一):Demo
上周公司的项目要求开发邮件发送功能。自己在网上跟着教程边学边做了一下午,现在基本开发完成了。由于一个同事也想看下该怎么写,顺便学习下。所以我就写成了一遍教程,顺便巩固下邮件发送里面的内容。
邮件发送Demo
第一步,我们先写个Demo,用最快的方式最少的代码向你展示Java Mail 是如何工作的。 我的开发环境是:
- JDK1.6
- java-mail.jar 1.45
构建一个简单的邮件发送,一共需要四步:
1.配置发件人邮箱信息以及创建一个存放SMTP服务器地址等参数的Java 配置类。
String sendEmailAccount = "Example@outlook.com"; //发件人邮箱String sendEmailPassword = "password"; //发件人密码String sendEmailSMTPHost = "smtp-mail.outlook.com"; // 发件人邮箱的 SMTP 服务器地址, 此处为Outlook邮箱的SMTP服务器String receiveMailAccount = "Example@163.com"; // 收件人邮箱final String smtpPort = "587"; //默认端口号设置为587,也可以设置为465,具体取决于SMTP服务器要求的端口号Properties props = new Properties(); // 使用Java配置类进行配置props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)props.setProperty("mail.smtp.host", sendEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址props.setProperty("mail.smtp.auth", "true"); // 需要请求认证props.setProperty("mail.smtp.port", smtpPort);props.setProperty("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.smtp.starttls.enable", "true");props.setProperty("mail.smtp.socketFactory.port", smtpPort );
复制代码
2.创建一个同邮件服务器交互的session
Session session = Session.getDefaultInstance(props);session.setDebug(true); // debug模式下会在控制台打印出日志,如果不想看日志应该设置为false
复制代码
3.创建一封格式化的邮件
// 1. 创建一封邮件MimeMessage message = new MimeMessage(session);// 2. From: 发件人message.setFrom(new InternetAddress(sendEmailAccount , "ExampleFrom", "UTF-8"));// 3. To: 收件人message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "ExampleUser", "UTF-8"));// 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)message.setSubject("", "UTF-8");// 5. Content: 邮件正文message.setContent("<h3>This is a test email.</h3>", "text/html;charset=UTF-8");// 6. 设置邮件发件时间message.setSentDate(new Date());// 7. 保存设置message.saveChanges();
复制代码
4.发送邮件
// 1. 根据 Session 获取邮件传输对象Transport transport = session.getTransport();// 2. 使用 邮箱账号 和 密码 连接邮件服务器transport.connect(myEmailAccount, myEmailPassword);// 3. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人transport.sendMessage(message, message.getAllRecipients());// 4. 关闭连接transport.close();
复制代码
完整代码
整合以上步骤的完整代码如下:
import java.util.Date;
import java.util.Properties;import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;public class MailExample {public static void main(String[] args) throws Exception {/*** 1.配置发件人邮箱信息以及创建一个Java 配置类存放SMTP服务器地址等参数。*/String sendEmailAccount = "Example@outlook.com"; // 发件人邮箱String sendEmailPassword = "password"; // 发件人密码String sendEmailSMTPHost = "smtp-mail.outlook.com"; // 发件人邮箱的 SMTP 服务器地址, 此处为Outlook邮箱的SMTP服务器String receiveMailAccount = "Example@163.com"; // 收件人邮箱Properties props = new Properties(); // 使用Java配置类进行配置props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)props.setProperty("mail.smtp.host", sendEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址props.setProperty("mail.smtp.auth", "true"); // 需要请求认证final String smtpPort = "465"; // 默认端口号设置为587,也可以设置为465,具体取决于SMTP服务器要求的端口号props.setProperty("mail.smtp.port",smtpPort );props.setProperty("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.smtp.starttls.enable", "true");props.setProperty("mail.smtp.socketFactory.port", smtpPort ); /*** 2.创建一个同邮件服务器交互的session*/Session session = Session.getDefaultInstance(props);session.setDebug(true);MimeMessage message = new MimeMessage(session); // 1. 创建一封邮件message.setFrom(new InternetAddress(sendEmailAccount, "ExampleFrom", "UTF-8")); // 2. From: 发件人message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "ExampleUser", "UTF-8")); // 3. To: 收件人message.setSubject("", "UTF-8"); // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)message.setContent("<h3>This is a test email.</h3>", "text/html;charset=UTF-8"); // 5. Content: 邮件正文message.setSentDate(new Date()); // 6. 设置邮件发件时间message.saveChanges(); // 7. 保存设置/*** 3.创建一封格式化的邮件*/Transport transport = session.getTransport(); // 1. 根据 Session 获取邮件传输对象transport.connect(sendEmailAccount, sendEmailPassword); // 2. 使用 邮箱账号 和 密码 连接邮件服务器transport.sendMessage(message, message.getAllRecipients()); // 3. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人,transport.close(); // 4. 关闭连接}
}
复制代码
这样一个简单的JavaMail的Demo就完成了。快去测试下吧。
Java Mail 邮件发送(一):入门Demo相关推荐
- Java mail 邮件发送 附件文件名过长的问题 版本1.5及以上
在使用javamail 1.5版本的时候,如果附件文件名过长,会错误显示为"未命名的附件 00439.dat" 解决方案如下: 一.Javamail jar包退回1.4版本 或者 ...
- Java mail模板发送高级邮件(二)
Java mail模板发送高级邮件 一.见贤思齐焉 我们之前自己发的邮件,大家又没有感觉比较丑呢???毫无美感可言,只有空洞的文字,甚至连基础的排版都没有.如果这是给女娃表白的邮件,那我只能陪你一 ...
- 用java实现邮件发送验证码
java实现邮件发送验证码 网易邮箱开通POP3SMTP服务的步骤 java实现邮件发送验证码 建议不要用qq邮箱,我使用qq邮箱直接一直给我报530错误,我一直认为我代码写的有错误或者POP3/SM ...
- java实现邮件发送, 抄送及多附件发送
java实现邮件发送, 抄送及多附件发送 所需的jar包 mailapi.jar和smtp.jar 或 javax-mail-xxx.jar(如javax.mail-1.5.6.jar) ht ...
- 用java实现邮件发送
电子邮件 1.基础知识铺垫 要在网络上实现邮件功能,必须要有专门的邮件服务器. 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过的邮件,并把邮件投递到邮件接收者的电子邮箱中. SMTP服 ...
- 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】
一.邮件发送 1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示. SMTP协议使用的端口号:25 rfc821详细记载了该协议的相关信息 (1)使用telnet发送邮件(使用12 ...
- [Java工具] 邮件发送工具
注册邮箱 去163邮箱(或其他邮箱)注册一个邮箱,并开启SMTP授权码. 程序 需要注意的是,由于阿里云服务器不让使用默认的25端口,所以会出现Windows下测试发送邮件成功,Linux服务器下发送 ...
- java实现邮件发送_基于JavaMail的Java实现简单邮件发送功能
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本 ...
- Java实现邮件发送 超详细!!!(以QQ邮箱个人版和企业版为例)
Java实现发送邮件 超详细!!!(以QQ邮箱个人版和企业版为例) 文章目录 Java实现发送邮件 超详细!!!(以QQ邮箱个人版和企业版为例) 个人邮箱示例 配置依赖 简单了解涉及的两个传输协议 Q ...
最新文章
- linux文件移出目录命令_Linux 文件与目录管理详解
- 怎么用计算机计算出选手最后得分,计算选手最后得分(限制分的值,且最后按n或N键结束,其他键继续)...
- Exchange ActiveSyn身份验证类型
- 【3】数据筛选3 - BeautifulSoup4
- VC6.0创建文件夹
- 在c语言程序中可把整型数,C语言程序设计(2).doc
- 关于基类和子类构造函数的问题
- 2017-05-24
- JQ实现 todolist案例(记事本)
- sql integer字置为空_请写一个函数来检查用户提交的数据是否为整数
- Codeforces 490F Treeland Tour(离散化 + 线段树合并)
- hashmap扩容机制 jdk1.7
- 忘记mysql密码 重置密码
- JSP基础教程【1】
- 自定义一个腾讯云短信验证码接口spring-starter
- 服务器和桌面操作系统有什么区别,服务器和桌面操作系统的区别
- Win10更新系统,VirtualBox与win10不兼容处理办法
- D2大会资源分享(解决了GitHub下载限速)
- mysql_query('set names gbk')_mysql_query(SET NAMES 'GBK');SET NAMES 'GBK'是干什么的?什么意思?...
- 机器人运动学仿真笔记
热门文章
- Facebook更名“元宇宙”遭质疑,外媒提出三大现实问题
- 重磅!脑机接口突破登Nature封面,脑中“笔迹”转屏幕文字破纪录,准确率超99%...
- LoRa VS NB-IoT,一场物联网时代C位争夺战
- 院士论坛|李德仁:测绘遥感与智能驾驶
- Nature:揭示人大脑类器官为何缺乏正常人脑特有的细胞亚型和复杂回路
- 一幅图读懂量子力学(数学的判决)
- 人工智能让育种“物美价廉”
- 微软 CEO 纳德拉访谈:人工智能的大方向与未来是什么?
- Java 面试高频题:Spring Boot+Sentinel+Nacos高并发已撸完
- TIOBE 1 月编程语言:Python 摘得 2020 年度编程语言!