Java实现发送邮件并携带附件
一、 邮件服务器与传输协议
要在网络上实现邮件功能,必须要有专门的邮件服务器。主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。
- 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实现发送邮件并携带附件相关推荐
- Java实现发送邮件带多个附件,可以直接用
需求: 使用JavaMail发送邮件,要求实现带多个附件功能. 下面代码可以直接使用,也可以按需优化,实现的功能如下: 自定义输出debug信息. 自定义开启SSL认证. *QQ邮箱会自动检测开启,也 ...
- 使用Java mail发送邮件附件出现附件上产生.eml文件夹的问题及附件名.bin结尾问题...
近期,线上项目发出邮件是PDF附件但收到的邮件附件格式却不是PDF,发送邮件的技术为JAVA mail 经复现错误现象为下图: 163邮箱: QQ邮箱: eml问题排查思路: 1.首先,排除附件本身的 ...
- java实现发送邮件功能(可以添加附件)
记录一下在java中发送邮件的实现方式,下面这个工具类是根据在网上查阅的资料自己整理出来的. 类中只有两个方法: 1.第一个就是普通的发送文本内容邮件的方法. 2.第二个是能发送附件邮件的方法.如果还 ...
- java soap附件_Axis2用法:soap消息携带附件
1.附件类File2Attachments soap消息携带附件时,soap消息需要携带符合axis2规范的文件.那么我们需要将普通的文件转化成符合axis2的附件对象的类Attachments.这里 ...
- 使用Java Email发送邮件
前言Email就是电子邮件.电子邮件的应用已经有几十年的历史了,我们熟悉的邮箱地址比如abc@example.com,邮件软件比如Outlook.网易闪电邮.Foxmail都是用来收发邮件的.当然,使 ...
- Java Email以及发送Email附件
我们首先了解一下传统的邮件是如何进行发送的,首先把邮件发送到当地的邮局,当地的邮局又把邮件发送给目的地附近的邮局,最后目的地附近的邮局把邮件发送到目的地. 其实Email的发送方式也是类似,我们把类似 ...
- Android 发送邮件信息,附带附件
直接上demo代码: MainActivity.java package com.example.androidemaildemo;import java.util.Properties;import ...
- ssm使用Transport.send发送邮件(带附件)
使用Transport.send发送邮件(带附件) 最近做了一个邮件发送功能,遇到的坑不是一般的多,网上的例子大多数获取file都是测试时直接输入文件所在位置,不是从前端上传上来的.于是自己做了一个, ...
- 【java】实现发送带附件email
一.目标 用java代码实现发送带附件email的功能 二.学习地址 http://wenku.baidu.com/view/0b5acc82e53a580216fcfe4e.html http:// ...
最新文章
- UOJ46. 【清华集训2014】玄学
- Java中的executeQuery,java连接数据库executeUpdate() 和executeQuery()
- Java调用WebService接口实现发送手机短信验证码功能
- IDEA_Spring Data JPA有关报错Cannot resolve table 'XXX'
- Python基础中一些高效的数据操作,可以提高你十倍工作效率
- 高可用系统设计 | 分布式限流策略:计数器算法、漏桶算法、令牌桶算法
- mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...
- C++四种cast操作符
- 父母该不该把自己的收入告诉孩子?
- 64如何传入后台_如何保证API接口数据安全?
- GitHub 新手教程 四,Git GUI 新手教程(1),OpenSSH Public Key
- 如何批量将 Word 文档转为 TXT 文本文档格式
- 史上最简单,利用Spring-boot快速搭建邮件发送服务!
- office插件开发_PPT插件——OK之安装篇
- 重磅 | 死磕 Elasticsearch 方法论认知清单(2021年国庆更新版)
- 游戏修改器制作教程三:内存与Cheat Engine
- Linux的基础文件操作1
- iOS14 YYAnimatedImageView图片不显示,多数用在YYLabel的富文本中添加的图片
- 翻译翻译,什么叫他妈的惊喜?
- 高二学业水平测试计算机考试时间,2019高中学业水平考试时间 普通高中学业水平什么时候考试...
热门文章
- 南郑县天气预报软件测试,汉中 高速公路环境气象监测系统 24小时自动化监测...
- android安全学习之2—android中.pem和.pk8是什么文件?
- (黑)群晖设置Ping不通路由器自动关机 实现断电自动关机
- chrome 无法拖拽离线安装本地CRX格式插件的解决方法
- PCB设计软件之二:Mentor PADS Pro VX2.10版本安装使用
- 毫米波雷达,智能照明+人体存在感应
- Qt图片绘图类 QPixmap
- iOS应用内打开App Store应用详情界面
- 关于CAD字体打开乱码,字体自动替换LSP,默认simplex,hztxt
- Vue实现复制粘贴功能