使用java发送电子邮件_使用Java发送电子邮件

使用java发送电子邮件

我开始使用Java作为简单的“如何发送电子邮件”来撰写这篇文章,但是后来我发现我需要简要解释更多事情。 因此,这是有关使用Java发送电子邮件的所有摘要。

在Java SE平台之外(但包含在JavaEE中), JavaMail软件包提供了一个用于构建邮件和消息传递应用程序的平台。 让我们举一个例子。

发送一条简单的短信

// Common variables
String host = "your_smtp_server";
String from = "from_address";
String to = "to_address";// Set properties
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.debug", "true");// Get session
Session session = Session.getInstance(props);try {// Instantiate a messageMessage msg = new MimeMessage(session);// Set the FROM messagemsg.setFrom(new InternetAddress(from));// The recipients can be more than one so we use an array but you can// use 'new InternetAddress(to)' for only one address.InternetAddress[] address = {new InternetAddress(to)};msg.setRecipients(Message.RecipientType.TO, address);// Set the message subject and date we sent it.msg.setSubject("Email from JavaMail test");msg.setSentDate(new Date());// Set message contentmsg.setText("This is the text for this simple demo using JavaMail.");// Send the messageTransport.send(msg);
}
catch (MessagingException mex) {mex.printStackTrace();
}

或者,改为使用:

msg.setText("This is the text for this simple demo using JavaMail.");

您可以使用next设置消息内容:

msg.setContent("This is the text for this simple demo using JavaMail.", "text/plain");

检查电子邮件地址

这是一个使用正则表达式检查电子邮件格式是否正确的小技巧:

Pattern rfc2822 = Pattern.compile("^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$");
if(rfc2822.matcher(EMAIL_ADDRESS).matches()) {// Well formed email
}

多部分消息

很好,但是通常您不会发送简单的短信。 相反,您可以发送带有粗体或斜体文本,图像等的漂亮HTML正文消息。

注意:请参阅下面的“参考”部分,以了解有关MIME格式的信息,该格式扩展了您可以附加到电子邮件的数据的范围,以允许多部分,附件等。

编写多部分消息时,内容由不同部分组成,例如,一部分是用简单文本编写的消息,而另一部分是使用HTML以增强方式编写的同一消息。 然后,读取消息的客户端负责根据其功能来渲染适当的部分。

...
// Here create two parts and set as message contect
// Create and fill first part
MimeBodyPart part1 = new MimeBodyPart();
part1.setText("This is part one of this multipart message.");// Create and fill second part
MimeBodyPart part2 = new MimeBodyPart();
part2.setText("This is part two of this multipart message.");// Create the Multipart.
Multipart mp = new MimeMultipart();
mp.addBodyPart(part1);
mp.addBodyPart(part2);// Set the message's content
msg.setContent(mp);
...

发送附件

太棒了,我们知道如何发送纯文本电子邮件以及更令人难以置信的内容,例如包含HTML内容的多部分消息。 下一步是发送附加了太多文件的电子邮件。

创建带有附件的电子邮件类似于创建多部分邮件,其中一部分可以是邮件的文本,另一部分可以是附件。 秘密在接下来的几行中:

...
// Create a new part for the attached file
MimeBodyPart part3 = new MimeBodyPart();// Put a file in the second part
FileDataSource fds = new FileDataSource("THE_FILE_NAME");
part3.setDataHandler(new DataHandler(fds));
part3.setFileName(fds.getName());// 'mp' is the previously created 'MimeMultipart' object
mp.addBodyPart(part3);// 'msg' is the previously created 'Message' object
msg.setContent(mp);
...

HTML消息

创建带有HTML内容的多部分消息非常简单,只需在setContent方法中指定MIME类型即可:

...
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<h1>Sample</h1><p>This is a sample HTML part</p>", "text/html");
...

在HTML代码中附加图像

如果您使用HTML编写丰富的消息,则可以使用'img'标签添加图像。 如果从外部服务器引用了图像,则没有问题,但是:如何将图像附加到消息并在HTML消息正文中呈现?

想法如下:

  • 首先,您需要附加图片文件并设置标识符,然后
  • 其次,您需要编写HTML代码并在“ img”标签中引用图片标识符。
...
// Create and fill html part
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<h1>Sample</h1><p>This is a sample HTML part with an attached image</p>" +"<img src='cid:some_image_id'>", "text/html");// Create a new part for the attached image and set the CID image identifier
MimeBodyPart imagePart = new MimeBodyPart();
FileDataSource fds = new FileDataSource("THE_IMAGE_FILE_NAME");
imagePart.setDataHandler(new DataHandler(fds));
imagePart.setHeader("Content-ID", "some_image_id");mp.addBodyPart(htmlPart);
mp.addBodyPart(imagePart);
...

还有什么要说的吗?

至此,您几乎是发送电子邮件的高手。 您知道如何发送简单的电子邮件,具有最丰富HTML内容的多部分电子邮件以及如何在邮件中附加文件和图像。

程序员还能期望什么?

可能是更易于使用的API,这就是Apache Commons Email项目为您提供的。 请参阅“用户指南”部分http://commons.apache.org/email/userguide.html以了解我的意思。 它提供了一个更抽象的API,它比协议更接近人类。

资源资源

  • JavaMail – JavaMail项目主页。
  • Apache Commons Email – Apache Commons子项目,用于简化JavaMail API的使用方式。 请参阅“ 用户指南 ”部分。
  • MIME(多用途Internet邮件扩展名) –多部分电子邮件的MIME格式说明。

参考:在“ A Curious Animal”博客上从我们的JCG合作伙伴 Antonio Santiago 发送Java电子邮件 。

相关文章 :
  • Spring,Quartz和JavaMail集成教程
  • 使用Spring使用Java发送电子邮件– GMail SMTP服务器示例
  • Spring MVC3 Hibernate CRUD示例应用程序
  • Spring MVC开发–快速教程
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/10/sending-emails-with-java.html

使用java发送电子邮件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp去掉右侧滚动条的解决办法?

用 uniapp 开发小程序,内容多的情况下,在微信开发者工具和真机调试下,右侧出现滚动条,有没有办法隐藏滚动条? 参考文档:https://uniapp.dcloud.net.cn/collocation/pages?id=app-plus 解决办法一: 参考文档:https://uniapp.dcloud.net.cn/collocation/pages?id=app-plus…

内网渗透工具CobaltStrike使用教程详解

文章目录 前言一、CobaltStrike本次实验环境 二、CobaltStrike详细使用1.启动CobaltStrike2.客户端连接团队服务端3.配置监听器4.生成木马5.权限提升&#xff0c;命令执行以及内网横线穿透等。6.插件加载7.命令执行等操作8.目标信息总结表&#xff08;自动记忆保存&#xff09…

日志长度_Kafka 日志存储详解

点击上方“Java知音”&#xff0c;选择“置顶公众号”技术文章第一时间送达&#xff01;作者&#xff1a;爱宝贝丶my.oschina.net/zhangxufeng/blog/3114166本文主要介绍kafka中日志的存储原理&#xff0c;主要内容包括kafka日志存储格式、日志文件的管理方式、日志索引文件的格…

怎样理解阻塞非阻塞与同步异步的区别?

本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接&#xff1a;http://www.linuxidc.com/Linux/2015-07/120338.htm “阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解&#xff0c;提供一个从分布式系统角度的回答。 1.同步与异步同…

【算法图解|1】js 实现一个函数,完成超过范围的两个大整数相加功能

这个问题中的两个数字&#xff0c;都是超出范围的&#xff0c;所以就不能简单的把两个数字&#xff0c;转为Number类型&#xff0c;进行相加。 需要取两个数字的每一位&#xff0c;进行相加&#xff0c;大于10&#xff0c;就进1&#xff0c;把结果保存在一个字符串中。 主要思路…

Apache Spark:更改架构之前必须解决的5个陷阱

迁移到Apache Spark之前需要了解的5件事 似乎每个人都只是在谈论最热门的新技术&#xff0c;而忽略采用它的真正含义。 但这是自然的&#xff0c;对吧&#xff1f; 新功能和承诺胜过其他一切&#xff0c;而艰巨的挑战和决​​定被抛在一边。 这次不行。 软件架构很难&#xf…

git config配置文件

设置 git status的颜色。 git config --global color.status auto 一.Git已经在你的系统中了&#xff0c;你会做一些事情来客户化你的Git环境。你只需要做这些设置一次&#xff1b;即使你升级了&#xff0c;他们也会绑定到你的环境中。你也可以在任何时刻通过运行命令来重新更改…

双清模式无命令_linux性能监控:IO性能监控命令之iotop命令

内存监控命令之iotop命令1概述&#xff1a;iotop命令 是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI&#xff0c;其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat&#xff0c;nmon等大多数是只能统计到per设备的读写情况&#xff0…

【算法图解|2】JavaScript 如何实现数组扁平化

数组的扁平化&#xff0c;就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。 举个例子&#xff0c;假设有个名为 flatten 的函数可以做到数组扁平化&#xff0c; var arr [1, [2, [3, 4]]]; console.log(flatten(arr)) // [1, 2, 3, 4] 我们最一开始…

质问微软 WP8.1开发HTTPS 真费劲

本人用C#多年,WPF2年,一直想做点应用为WP生态贡献一点力量,最近终于有机会接触了 家里的本子是2年前的低压I3,不支持虚拟化,一直没有真机.最近同事妈妈换下来一个820给我拿来做开发用,非常感谢!!! 作为C#开发,一直被其他语言看不起,我想你们中的很多人遇到这个问题的不在少数,但…

多生产者_通知:生产者补贴!打卡时间!定了

【生产者补贴&#xff01;打卡时间定了&#xff01;9月30日前&#xff01;】老道说&#xff1a;这几天吉林和黑龙江陆续下发了2020年玉米、大豆生产者补贴实施工作方案&#xff01;连日来关于生产者补贴方面的消息&#xff0c;也算是逐渐浮出水面&#xff01;根据黑龙江地区的方…

vaadin_Vaadin附加组件和Maven

vaadin介绍 我喜欢Vaadin的 &#xff08;其中很多&#xff09;一件事是它对Vaadin框架的“附加组件”社区-他们称之为Vaadin目录 。 “附加组件”是社区对框架的附加组件&#xff0c;可以是任何东西&#xff0c;例如从新的客户端小部件到数据表的延迟加载容器。 我一定会为Acti…

【算法图解|3】JavaScript 如何实现数组去重

数组去重方法老生常谈&#xff0c;既然是常谈&#xff0c;我也来谈谈。 也许我们首先想到的是使用 indexOf 来循环判断一遍&#xff0c;但在这个方法之前&#xff0c;让我们先看看最原始的方法&#xff1a; var array [1, 1, 1, 1];function unique(array) {// res用来存储结…

angular 数字逗号分隔_angular 实现的输入框数字千分位及保留几位小数点功能示例...

摘要&#xff1a;这篇AngularJS栏目下的“angular 实现的输入框数字千分位及保留几位小数点功能示例”&#xff0c;介绍的技术点是“angular、保留几位小数、千分位、小数点、输入框、示例”&#xff0c;希望对大家开发技术学习和问题解决有帮助。本文实例讲述了angular 实现的…

单页应用程序的Spring Boot静态Web资源处理

诸如gulp和grunt之类的Javascript构建工具确实让我大吃一惊&#xff0c;我看着这些工具的构建脚本之一&#xff0c;发现很难理解它&#xff0c;无法想象从头开始编写其中一个构建脚本。 这就是yeoman出现的地方&#xff0c;它是一种非常方便的工具&#xff0c;它可以使用无数种…

Beta版本冲刺第二天

队伍CleanCode 031302505 黄晓辉031302223 翁瀚帅031302511 林培兴031302632 张衍坤031302536 苏丽玲一.完成的情况&#xff1a; 继续熟悉了github的使用&#xff0c;开始配置Tomcat服务器环境&#xff0c;增加了号码百事通的号码和游玩福州的一些资料&#xff0c;想要改进α版…

华字后面配什么字比较好_女孩叫华什么名字好听 华字和什么字搭配取名最好...

女孩叫华什么名字好听华鹭 华朦 华芮 华云 华徘 华葛 华馥华苹 华闵 华松 华娴 华红 华幽 华枫华双 华娉 华媚 华蝴 华胭 华瑷 华瑶华任 华智 华妮 华菀 华嫙 华笙 华楚华寐 华萱 华葵 华岱 华勤 华湘 华宜华咏 华欣 华娓 华穎 华兰 华汐 …

【算法图解|4】JavaScript 如何求数组的最大值和最小值

取出数组中的最大值或者最小值是开发中常见的需求 最原始的方法&#xff0c;莫过于循环遍历一遍&#xff1a; var arr [6, 4, 1, 8, 2, 11, 23];var result arr[0]; for (var i 1; i < arr.length; i) {result Math.max(result, arr[i]); } console.log(result); 通过…

elf 取路径_c – 获取主要可执行文件的ELF标题

由dlopen(0,RTLD_LAZY)返回的void *指针给出一个对应于主可执行文件的struct link_map *.调用dl_iterate_phdr也会在首次执行回调时返回主可执行文件的条目.你可能会被链接映射中的.l_addr 0这个事实所困惑,而使用dl_iterate_phdr的那个dlpi_addr 0.这正在发生,因为l_addr(和…

【算法图解|5】javaScript求两个数的最大公约数

思路&#xff1a;采用辗转相除的方法&#xff0c;用大的数去除以小的那个数&#xff0c;然后再用小的数去除以的得到的余数&#xff0c;一直这样递归下去&#xff0c; 直到余数为0时&#xff0c;最后的被除数就是两个数的最大公约数。 function getMaxCommonDivisor(a, b) {if …