一、 邮件服务器与传输协议

要在网络上实现邮件功能,必须要有专门的邮件服务器。主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

  • SMTP服务器地址:一般是 smtp.xxx.com,163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。
  • SMTP协议

    • 通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
  • POP3协议
    • 通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

二、 在发送人邮箱中开启POP3/SMTP服务

  • qq邮箱

    • 登录qq邮箱后 → 设置 → 账户 → POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 → POP3/SMTP服务点击开启(需要绑定手机号发送验证短信)→ 获得了一串授权码(后续发送邮件需要)
  • 163邮箱
    • 登录163邮箱 → 设置 → POP3/SMTP/IMAP → POP3/SMTP服务 点击开启(需要邮箱app认证) → 获取到一串授权码

三、 导入依赖

<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.5.0-b01</version>
</dependency>

四、 编写工具类

import lombok.extern.slf4j.Slf4j;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.*;
import java.util.Date;
import java.util.Properties;@Slf4j
public class EmailUtils {public static final String SenderEmail = "xxxxx@qq.com";//发送人邮箱public static final String senderCode = "ixxxxxxxxxxxdcd";//发送人邮箱授权码public static final String emailSMTPHost = "smtp.qq.com";//服务器地址public static final String receiveMailAccount = "xxxxx@qq.com";//收件人邮箱public static final String ccMailAccount = "xxxxx@163.com";//抄送人邮箱public static final String bccmailAccount = "xxxxxx@qq.com";//密送人邮箱/*发送邮件*/public static void sendMail() {try {Properties props = new Properties();props.setProperty("mail.transport.protocol", "smtp");// 使用的协议props.setProperty("mail.smtp.host", emailSMTPHost);// 发件人的邮箱的SMTP服务器地址props.setProperty("mail.smtp.auth", "true");// 需要请求认证Session session = Session.getInstance(props);//得到会话对象实例session.setDebug(false);//是否打印详细日志MimeMessage message = createMimeMessage(session);//获取邮件对象(封装了一个方法)Transport transport = session.getTransport();transport.connect(SenderEmail, senderCode);//连接发送人的邮箱账户// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人transport.sendMessage(message, message.getAllRecipients());// 7. 关闭连接transport.close();log.info("邮件发送成功");} catch (Exception e) {log.error("发送邮件失败");}}public static MimeMessage createMimeMessage(Session session) throws Exception {// 1. 创建一封邮件MimeMessage message = new MimeMessage(session);// 2. From: 发件人message.setFrom(new InternetAddress(SenderEmail, "发件人", "UTF-8"));// 3. 设置收件人、抄送人、密送人//MimeMessage.RecipientType.TO:收件类型;MimeMessage.RecipientType.CC:抄送类型;MimeMessage.RecipientType.BCC:密送类型message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "收件人", "UTF-8"));message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress(ccMailAccount, "抄送人", "UTF-8"));message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress(bccmailAccount, "密送人", "UTF-8"));// 4. Subject: 邮件主题message.setSubject("这是邮件的主题", "UTF-8");// 5. Content: 邮件正文(可以使用html标签)message.setContent("这是邮件正文", "text/html;charset=UTF-8");*****************以下部分为携带附件代码,不需要携带附件的可删除星号圈起的部分*************************MimeMultipart multipart = new MimeMultipart();MimeBodyPart file1 = new MimeBodyPart();DataHandler handler = new DataHandler(new FileDataSource("文件路径"));file1.setDataHandler(handler);//对文件名进行编码,防止出现乱码String fileName = MimeUtility.encodeWord("文件名", "utf-8", "B");file1.setFileName(fileName);multipart.addBodyPart(file1);message.setContent(multipart);
*******************************************************************************************// 6. 设置发件时间message.setSentDate(new Date());// 7. 保存设置message.saveChanges();return message;}
}

五、 最后

  • 在同时设置正文和附件时,导致发送邮件后正文不显示,请大佬们指点。

Java实现发送邮件并携带附件相关推荐

  1. Java实现发送邮件带多个附件,可以直接用

    需求: 使用JavaMail发送邮件,要求实现带多个附件功能. 下面代码可以直接使用,也可以按需优化,实现的功能如下: 自定义输出debug信息. 自定义开启SSL认证. *QQ邮箱会自动检测开启,也 ...

  2. 使用Java mail发送邮件附件出现附件上产生.eml文件夹的问题及附件名.bin结尾问题...

    近期,线上项目发出邮件是PDF附件但收到的邮件附件格式却不是PDF,发送邮件的技术为JAVA mail 经复现错误现象为下图: 163邮箱: QQ邮箱: eml问题排查思路: 1.首先,排除附件本身的 ...

  3. java实现发送邮件功能(可以添加附件)

    记录一下在java中发送邮件的实现方式,下面这个工具类是根据在网上查阅的资料自己整理出来的. 类中只有两个方法: 1.第一个就是普通的发送文本内容邮件的方法. 2.第二个是能发送附件邮件的方法.如果还 ...

  4. java soap附件_Axis2用法:soap消息携带附件

    1.附件类File2Attachments soap消息携带附件时,soap消息需要携带符合axis2规范的文件.那么我们需要将普通的文件转化成符合axis2的附件对象的类Attachments.这里 ...

  5. 使用Java Email发送邮件

    前言Email就是电子邮件.电子邮件的应用已经有几十年的历史了,我们熟悉的邮箱地址比如abc@example.com,邮件软件比如Outlook.网易闪电邮.Foxmail都是用来收发邮件的.当然,使 ...

  6. Java Email以及发送Email附件

    我们首先了解一下传统的邮件是如何进行发送的,首先把邮件发送到当地的邮局,当地的邮局又把邮件发送给目的地附近的邮局,最后目的地附近的邮局把邮件发送到目的地. 其实Email的发送方式也是类似,我们把类似 ...

  7. Android 发送邮件信息,附带附件

    直接上demo代码: MainActivity.java package com.example.androidemaildemo;import java.util.Properties;import ...

  8. ssm使用Transport.send发送邮件(带附件)

    使用Transport.send发送邮件(带附件) 最近做了一个邮件发送功能,遇到的坑不是一般的多,网上的例子大多数获取file都是测试时直接输入文件所在位置,不是从前端上传上来的.于是自己做了一个, ...

  9. 【java】实现发送带附件email

    一.目标 用java代码实现发送带附件email的功能 二.学习地址 http://wenku.baidu.com/view/0b5acc82e53a580216fcfe4e.html http:// ...

最新文章

  1. UOJ46. 【清华集训2014】玄学
  2. Java中的executeQuery,java连接数据库executeUpdate() 和executeQuery()
  3. Java调用WebService接口实现发送手机短信验证码功能
  4. IDEA_Spring Data JPA有关报错Cannot resolve table 'XXX'
  5. Python基础中一些高效的数据操作,可以提高你十倍工作效率
  6. 高可用系统设计 | 分布式限流策略:计数器算法、漏桶算法、令牌桶算法
  7. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...
  8. C++四种cast操作符
  9. 父母该不该把自己的收入告诉孩子?
  10. 64如何传入后台_如何保证API接口数据安全?
  11. GitHub 新手教程 四,Git GUI 新手教程(1),OpenSSH Public Key
  12. 如何批量将 Word 文档转为 TXT 文本文档格式
  13. 史上最简单,利用Spring-boot快速搭建邮件发送服务!
  14. office插件开发_PPT插件——OK之安装篇
  15. 重磅 | 死磕 Elasticsearch 方法论认知清单(2021年国庆更新版)
  16. 游戏修改器制作教程三:内存与Cheat Engine
  17. Linux的基础文件操作1
  18. iOS14 YYAnimatedImageView图片不显示,多数用在YYLabel的富文本中添加的图片
  19. 翻译翻译,什么叫他妈的惊喜?
  20. 高二学业水平测试计算机考试时间,2019高中学业水平考试时间 普通高中学业水平什么时候考试...

热门文章

  1. 南郑县天气预报软件测试,汉中 高速公路环境气象监测系统 24小时自动化监测...
  2. android安全学习之2—android中.pem和.pk8是什么文件?
  3. (黑)群晖设置Ping不通路由器自动关机 实现断电自动关机
  4. chrome 无法拖拽离线安装本地CRX格式插件的解决方法
  5. PCB设计软件之二:Mentor PADS Pro VX2.10版本安装使用
  6. 毫米波雷达,智能照明+人体存在感应
  7. Qt图片绘图类 QPixmap
  8. iOS应用内打开App Store应用详情界面
  9. 关于CAD字体打开乱码,字体自动替换LSP,默认simplex,hztxt
  10. Vue实现复制粘贴功能