Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java 发送邮件添加附件_java发送邮件 发送带附件的邮件详解[通俗易懂]

java 发送邮件添加附件_java发送邮件 发送带附件的邮件详解[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-08-28 01:41:31
发布于 2022-08-28 01:41:31
2.5K0
举报

大家好,又见面了,我是你们的朋友全栈君。

import java.io.File;

import java.util.Date;

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.Address;

import javax.mail.BodyPart;

import javax.mail.Message;

import javax.mail.Multipart;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

import javax.mail.internet.MimeUtility;

/**

* 发送带附件的邮件

*

* 需要导入mail.jar

*/

public class AttachmentMailSender {

public static boolean sendMail(MailSenderInfo mailInfo) {

// 判断是否需要身份认证

MyAuthenticator authenticator = null;

if (mailInfo.isValidate()) {

// 如果需要身份认证,则创建一个密码验证器

authenticator = new MyAuthenticator(mailInfo.getUserName(),

mailInfo.getPassword());

}

// 根据邮件发送的属性和密码验证器构造一个发送邮件的session

Session sendMailSession = Session.getInstance(mailInfo.getProperties(),

authenticator);

try {

// 根据session创建一个邮件消息

Message mailMessage = new MimeMessage(sendMailSession);

// 创建邮件发送者地址

Address from = new InternetAddress(mailInfo.getFromAddress());

// 设置邮件消息的发送者

mailMessage.setFrom(from);

// 创建邮件的接收者地址,并设置到邮件消息中

Address to = new InternetAddress(mailInfo.getToAddress());

mailMessage.setRecipient(Message.RecipientType.TO, to);

// 设置邮件消息的主题

mailMessage.setSubject(mailInfo.getSubject());

// 设置邮件消息发送的时间

mailMessage.setSentDate(new Date());

// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象

Multipart mainPart = new MimeMultipart();

// 创建一个包含HTML内容的MimeBodyPart

BodyPart html = new MimeBodyPart();

// 设置HTML内容

html.setContent(mailInfo.getContent(), “text/html; charset=GBK”);

mainPart.addBodyPart(html);

// 为邮件添加附件

String[] attachFileNames = mailInfo.getAttachFileNames();

if (attachFileNames != null && attachFileNames.length > 0) {

// 存放邮件附件的MimeBodyPart

MimeBodyPart attachment = null;

File file = null;

for (int i = 0; i < attachFileNames.length; i++) {

attachment = new MimeBodyPart();

// 根据附件文件创建文件数据源

file = new File(attachFileNames[i]);

FileDataSource fds = new FileDataSource(file);

attachment.setDataHandler(new DataHandler(fds));

// 为附件设置文件名

attachment.setFileName(MimeUtility.encodeWord(

file.getName(), “GBK”, null));

mainPart.addBodyPart(attachment);

}

}

// 将MiniMultipart对象设置为邮件内容

mailMessage.setContent(mainPart);

// 发送邮件

Transport.send(mailMessage);

return true;

} catch (Exception e) {

e.printStackTrace();

return false;

}

}

public static void main(String[] args) {

// 创建邮件信息

MailSenderInfo mailInfo = new MailSenderInfo();

mailInfo.setMailServerHost(“smtp.sina.com.cn”);

mailInfo.setMailServerPort(“25”);

mailInfo.setValidate(true);

mailInfo.setUserName(“***”);

mailInfo.setPassword(“***”);

mailInfo.setFromAddress(“[email protected]”);

mailInfo.setToAddress(“[email protected]”);

mailInfo.setSubject(“MyMail测试”);

mailInfo.setContent(“我的邮件测试\n\rMy test mail\n\r”);

String[] fileNames = new String[3];

fileNames[0] = “C:/temp/new.txt”;

fileNames[1] = “C:/temp/test.wav”;

fileNames[2] = “C:/temp/mary_photo.jpg”;

mailInfo.setAttachFileNames(fileNames);

AttachmentMailSender.sendMail(mailInfo);

}

}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146644.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C#中的HTTP客户端:专家级最佳实践与性能优化指南
在微服务架构中,或与外部API通信时,HTTP客户端是必不可少的组件。然而,许多开发人员在实现HTTP客户端时未能充分考虑性能和可用性。
郑子铭
2025/04/21
1120
C#中的HTTP客户端:专家级最佳实践与性能优化指南
asp.net core 使用HttpClientFactory Polly实现熔断降级
在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用using包装块的方式通常不是最好的选择。
梁规晓
2019/09/24
9270
asp.net core 使用HttpClientFactory Polly实现熔断降级
.NET Core 3.0深入源码理解HttpClientFactory之实战
前面两篇文章透过源码角度,理解了HttpClientFactory的内部实现,当我们在项目中使用时,总会涉及以下几个问题:
AI.NET 极客圈
2019/08/06
1.3K0
Asp.net Core Flurl.Http 结合IHttpClientFactory管理HttpClient生命周期
不过它因为出现的比较早,并没有使用asp.net core中的IHttpClientFactory 管理HttpClient实例,而是自己管理。一般是根据host来缓存一个HttpClient实例,比如你请求所有的https://www.baidu.com/ 都用一个缓存的实例,这样可能会有些问题,比如Dns更新等;
乔达摩@嘿
2021/08/05
9980
ASP.NET Core 6框架揭秘实例演示[17]:利用IHttpClientFactory工厂来创建HttpClient
在一个采用依赖注入框架的应用中,我们一般不太推荐利用手工创建的HttpClient对象来进行HTTP调用,使用的HttpClient对象最好利用注入的IHttpClientFactory工厂来创建。前者引起的问题,以及后者带来的好处,将通过如下这几个演示程序展现出来。IHttpClientFactory类型由“Microsoft.Extensions.Http”这个NuGet包提供,“Microsoft.NET.Sdk.Web”SDK具有该包的默认引用。如果采用“Microsoft.NET.Sdk”这个SDK,需要添加该包的引用。(本篇提供的实例已经汇总到《ASP.NET Core 6框架揭秘-实例演示版》)
蒋金楠
2022/05/09
8630
ASP.NET Core 6框架揭秘实例演示[17]:利用IHttpClientFactory工厂来创建HttpClient
asp.net core之HttpClient
本文介绍了ASP.NET Core中的HttpClient和HttpClientFactory的作用、用法以及最佳实践。通过示例代码的展示,读者可以了解如何使用HttpClient发送HTTP请求并处理响应,以及如何使用HttpClientFactory来解决HttpClient的一些问题,如资源泄漏和性能问题。同时,本文还强调了HttpClientFactory的优势,如更好的性能、资源管理和可配置性。通过深入理解和应用HttpClient和HttpClientFactory,开发人员可以更好地与外部服务进行通信。
饭勺oO
2023/10/18
4980
asp.net core之HttpClient
基于 keyed DI 的 HttpClient
.NET 8 中依赖注入引入了 keyed service 的支持 可以参考 .NET 8 中的 KeyedService,.NET 9 中改进了 HttpClient 基于名称的 HttpClient 依赖注入,使用基于名称的 HttpClient 的时候可以直接使用 keyed service 来解析了
郑子铭
2025/03/29
420
基于 keyed DI 的 HttpClient
.NET使用HttpClientFactory和Polly 替代直接调用HttpClient的优势
在 .NET 开发中,发出高效、可靠、且可伸缩的 Web 请求至关重要。过去,开发人员习惯直接使用 HttpClient 发出请求,这种方法看似简单:
郑子铭
2024/12/05
1660
.NET使用HttpClientFactory和Polly 替代直接调用HttpClient的优势
HttpClientFactory的套路,你知多少?
ASP.NET Core 在 2.1 之后推出了具有弹性 HTTP 请求能力的 HttpClient 工厂类 HttpClientFactory。
有态度的马甲
2020/04/15
1.5K0
.NET Core 3.0之深入源码理解HttpClientFactory(一)
创建HttpClient实例的时候,在内部会创建HttpMessageHandler链,我们知道HttpMessageHandler是负责建立连接的抽象处理程序,所以HttpClient的维护实际上就是维护HttpMessageHandler的使用,释放HttpClient并不会及时释放连接,而通常情况下一般是创建全局使用的HttpClient实例,以减少重复连接的次数。当然这种方式所带来的的弊端也是显而易见的,因为当前的HttpClient实例所指向的服务器发生问题或者DNS发生变更,那么该实例是无法做到自动更新指向的。
AI.NET 极客圈
2019/07/25
1K0
.NET Core 3.0之深入源码理解HttpClientFactory(一)
Asp.Net Core中HttpClient的使用方式
在.Net Core应用开发中,调用第三方接口也是常有的事情,HttpClient使用人数、使用频率算是最高的一种了,在.Net Core中,HttpClient的使用方式随着版本的升级也发生了一些变化,本次就讲解一下Asp.Net Core2.1前后使用的两种方式。
心莱科技雪雁
2019/03/11
1.3K0
Asp.Net Core中HttpClient的使用方式
.NET Core 3.0之深入源码理解HttpClientFactory(二)
上一篇文章讨论了通过在ConfigureServices中调用services.AddHttpClient()方法,并基于此进一步探讨了DefaultHttpClientFactory是如何创建HttpClient实例和HttpMessageHandler实例的,并了解了DefaultHttpClientFactory内部维护者一个定时器和两个HttpMessageHandler对象集合,以定期清理无效的 HttpMessageHandler对象,详细的内容可以点击链接跳转,接下来我会接着前一篇文章继续展开相关讨论。
AI.NET 极客圈
2019/07/30
8780
精:在 .NET 8中使用 Polly 处理瞬态故障
在本文中,我们将学习如何在与服务交互时实现重试机制,尤其当服务出现一些瞬态故障时。
郑子铭
2024/12/10
2680
精:在 .NET 8中使用 Polly 处理瞬态故障
.NET 9 的网络改进
继续我们的传统,我们很高兴分享一篇博客文章,重点介绍新 .NET 发布版本中网络领域的最新和最有趣的变更。今年,我们在 HTTP 领域引入了更新,新增了 HttpClientFactory API,改进了 .NET Framework 的兼容性等。
郑子铭
2025/03/27
750
.NET 9 的网络改进
HttpClient 调用WebAPI时—传参的三种方式(ASP.NET MVC&CORE均适用)
代码里有注释: 方法一,传json参数 方法二,传表单参数 方法三,传字节流 public void Post() { //方法一,传json参数 var d = new { username = " ", password = " ", grant_type = "password", appcode = " ",
红目香薰
2022/11/29
1.1K0
.NetCore 2.1以后的HttpClient最佳实践
ASP.NET Core 2.1中出现一个新的HttpClientFactory功能,
leon公众号精选
2022/04/27
1.2K0
.NetCore 2.1以后的HttpClient最佳实践
.net core HttpClient 使用之消息管道解析(二)
前面分享了 .net core HttpClient 使用之掉坑解析(一),今天来分享自定义消息处理HttpMessageHandler和PrimaryHttpMessageHandler 的使用场景和区别
Jlion
2022/04/07
7060
.net core HttpClient 使用之消息管道解析(二)
.net core HttpClient 使用之掉坑解析(一)
在我们开发当中经常需要向特定URL地址发送Http请求操作,在.net core 中对httpClient使用不当会造成灾难性的问题,这篇文章主要来分享.net core中通过IHttpClientFactory 工厂来使用HttpClient的正确打开方式。
Jlion
2022/04/07
9890
.net core HttpClient 使用之掉坑解析(一)
基于PaddleOCR实现AI发票识别的Asp.net Core应用
用户批量上传需要识别的照片,上传成功后,系统会启动Hangfire后台Job开始调用PaddleOCR服务返回结果,这个过程有点类似微服务的架构模型。
阿新
2021/10/09
1.6K0
基于PaddleOCR实现AI发票识别的Asp.net Core应用
.Net Core with 微服务 - Polly 服务降级熔断
在我们实施微服务之后,服务间的调用变的异常频繁。多个服务之间可能是互相依赖的关系。某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败。某一个服务调用失败轻则造成当前相关业务无法处理;重则可能耗尽资源而拉垮整个应用。为了尽可能的保证我们生产环境的可用性,至少是部分可用性我们就需要一些策略来保护我们的服务。
MJ.Zhou
2021/07/28
7030
推荐阅读
相关推荐
C#中的HTTP客户端:专家级最佳实践与性能优化指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档