本文首发于简书,Java Mail 邮件发送(一):Demo


上周公司的项目要求开发邮件发送功能。自己在网上跟着教程边学边做了一下午,现在基本开发完成了。由于一个同事也想看下该怎么写,顺便学习下。所以我就写成了一遍教程,顺便巩固下邮件发送里面的内容。

邮件发送Demo

第一步,我们先写个Demo,用最快的方式最少的代码向你展示Java Mail 是如何工作的。 我的开发环境是:

  1. JDK1.6
  2. 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相关推荐

  1. Java mail 邮件发送 附件文件名过长的问题 版本1.5及以上

    在使用javamail 1.5版本的时候,如果附件文件名过长,会错误显示为"未命名的附件 00439.dat" 解决方案如下: 一.Javamail jar包退回1.4版本 或者 ...

  2. Java mail模板发送高级邮件(二)

    Java mail模板发送高级邮件 一.见贤思齐焉   我们之前自己发的邮件,大家又没有感觉比较丑呢???毫无美感可言,只有空洞的文字,甚至连基础的排版都没有.如果这是给女娃表白的邮件,那我只能陪你一 ...

  3. 用java实现邮件发送验证码

    java实现邮件发送验证码 网易邮箱开通POP3SMTP服务的步骤 java实现邮件发送验证码 建议不要用qq邮箱,我使用qq邮箱直接一直给我报530错误,我一直认为我代码写的有错误或者POP3/SM ...

  4. java实现邮件发送, 抄送及多附件发送

    java实现邮件发送, 抄送及多附件发送 所需的jar包  mailapi.jar和smtp.jar  或  javax-mail-xxx.jar(如javax.mail-1.5.6.jar)  ht ...

  5. 用java实现邮件发送

    电子邮件 1.基础知识铺垫 要在网络上实现邮件功能,必须要有专门的邮件服务器. 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过的邮件,并把邮件投递到邮件接收者的电子邮箱中. SMTP服 ...

  6. 【Java EE 学习 21 下】【使用java实现邮件发送、邮件验证】

    一.邮件发送 1.邮件发送使用SMTP协议或者IMAP协议,这里使用SMTP协议演示. SMTP协议使用的端口号:25 rfc821详细记载了该协议的相关信息 (1)使用telnet发送邮件(使用12 ...

  7. [Java工具] 邮件发送工具

    注册邮箱 去163邮箱(或其他邮箱)注册一个邮箱,并开启SMTP授权码. 程序 需要注意的是,由于阿里云服务器不让使用默认的25端口,所以会出现Windows下测试发送邮件成功,Linux服务器下发送 ...

  8. java实现邮件发送_基于JavaMail的Java实现简单邮件发送功能

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

  9. Java实现邮件发送 超详细!!!(以QQ邮箱个人版和企业版为例)

    Java实现发送邮件 超详细!!!(以QQ邮箱个人版和企业版为例) 文章目录 Java实现发送邮件 超详细!!!(以QQ邮箱个人版和企业版为例) 个人邮箱示例 配置依赖 简单了解涉及的两个传输协议 Q ...

最新文章

  1. linux文件移出目录命令_Linux 文件与目录管理详解
  2. 怎么用计算机计算出选手最后得分,计算选手最后得分(限制分的值,且最后按n或N键结束,其他键继续)...
  3. Exchange ActiveSyn身份验证类型
  4. 【3】数据筛选3 - BeautifulSoup4
  5. VC6.0创建文件夹
  6. 在c语言程序中可把整型数,C语言程序设计(2).doc
  7. 关于基类和子类构造函数的问题
  8. 2017-05-24
  9. JQ实现 todolist案例(记事本)
  10. sql integer字置为空_请写一个函数来检查用户提交的数据是否为整数
  11. Codeforces 490F Treeland Tour(离散化 + 线段树合并)
  12. hashmap扩容机制 jdk1.7
  13. 忘记mysql密码 重置密码
  14. JSP基础教程【1】
  15. 自定义一个腾讯云短信验证码接口spring-starter
  16. 服务器和桌面操作系统有什么区别,服务器和桌面操作系统的区别
  17. Win10更新系统,VirtualBox与win10不兼容处理办法
  18. D2大会资源分享(解决了GitHub下载限速)
  19. mysql_query('set names gbk')_mysql_query(SET NAMES 'GBK');SET NAMES 'GBK'是干什么的?什么意思?...
  20. 机器人运动学仿真笔记

热门文章

  1. Facebook更名“元宇宙”遭质疑,外媒提出三大现实问题
  2. 重磅!脑机接口突破登Nature封面,脑中“笔迹”转屏幕文字破纪录,准确率超99%...
  3. LoRa VS NB-IoT,一场物联网时代C位争夺战
  4. 院士论坛|李德仁:测绘遥感与智能驾驶
  5. Nature:揭示人大脑类器官为何缺乏正常人脑特有的细胞亚型和复杂回路
  6. 一幅图读懂量子力学(数学的判决)
  7. 人工智能让育种“物美价廉”
  8. 微软 CEO 纳德拉访谈:人工智能的大方向与未来是什么?
  9. Java 面试高频题:Spring Boot+Sentinel+Nacos高并发已撸完
  10. TIOBE 1 月编程语言:Python 摘得 2020 年度编程语言!