通过TLS发送的Java邮件

抽象

本博客的目的是演示如何使用Java Mail通过具有TLS连接的SMTP服务器发送电子邮件。

免责声明

这篇文章仅供参考。 在使用所提供的任何信息之前,请认真思考。 从中学到东西,但最终自己做出决定,风险自负。

要求

我使用以下主要技术完成了本文的所有工作。 您可能可以使用不同的技术或版本来做相同的事情,但不能保证。

  • NetBeans 11.2
  • Maven 3.3.9(与NetBeans捆绑在一起)
  • Java 11(zulu11.35.15-ca-jdk11.0.5-win_x64)
 <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version> 1.4 </version> <scope>test</scope>  </dependency> 

下载

访问我的GitHub页面https://github.com/mjremijan以查看我所有的开源项目。 这篇文章的代码位于thoth-email-via-tls模块中的https://github.com/mjremijan/thoth-email 。

物产

本示例使用smtp-tls-outlook.properties文件保存SMTP服务器信息。 我用我个人的Outlook帐户进行测试,因此使用这个词的outlook属性文件中的名称。 重要的是文件的内容,如清单1所示。

清单1 –属性文件

 # This is the name of the SMTP host machine.  host=  # This is the port number of the SMTP host machine.  # The same host may support both SSL and TLS but on  # different ports. So make sure you get the TLS port.  port=  # This is what you use in the “username” field when  # you login. Typically # you login. Typically this is the same as your email  # address, but this isn't always the case .  username=  # This is what you use in the “password” field when  # you login. This value is CLEAR TEXT, so keep # you login. This value is CLEAR TEXT, so keep this  # properties file safe.  password=  # This is the email address you want for the  # email's FROM field. Enter the value using  # the format shown below. Typically # the format shown below. Typically this is  # just your email address for the account.  from=FIRSTNAME LASTNAME <ADDRESS @EMAIL .COM>  # This is the email address you want for the  # email's REPLY_TO field. Enter the value using  # the format shown below. Typically # the format shown below. Typically this is  # just your email address for the account. Also the account. Also  # typically this is the same as `from` above.  # But be warned, if an email's FROM and REPLY_TO  # are different, that's may be flagged as spam  # and never be delivered. So keep `from` and  # `reply` the same for initial testing  reply=FIRSTNAME LASTNAME <ADDRESS @EMAIL .COM>  # This is the email address you want to send  # the email to. For testing, it's a good idea  # to send it to yourself first.  to=FIRSTNAME LASTNAME <ADDRESS @EMAIL .COM> 

现在您有了属性文件,接下来让我们看一下代码。

这是一个JUnit测试,演示了如何使用Java Mail通过具有TLS连接的SMTP服务器发送电子邮件。 清单2显示了代码。

注意对于初始测试,请始终检查您的SPAM文件夹。 可以始终添加一条规则以将其传送到您的INBOX。

清单2 – Java Mail示例

 package org.thoth.email.via.tls;  import java.net.InetAddress;  import java.text.SimpleDateFormat;  import java.util.Date;  import java.util.Properties;  import javax.mail.Authenticator;  import javax.mail.Message;  import javax.mail.PasswordAuthentication;  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 org.junit.jupiter.api.BeforeEach;  import org.junit.jupiter.api.Test;  public class TlsTest { public TlsTest() { } String now, hostname; protected String now, hostname; protected Properties outlook; @BeforeEach public void setUp() throws Exception { now = new SimpleDateFormat( "MM-dd-yyyy hh:mm:ss a" ).format( new Date()); hostname = InetAddress.getLocalHost().getHostName(); outlook = new Properties(); outlook.load( this .getClass().getResourceAsStream( "/smtp-tls-outlook.properties" )); } @Test public void a_test() throws Exception { // Create MimeMultipart MimeMultipart content = new MimeMultipart( "related" ); // html part { MimeBodyPart textPart = new MimeBodyPart(); textPart.setText( "<html><body>" + "<p>Time: " +now+ "</p>" + "<p>From: " +hostname+ "</p>" + "</body></html>" , "UTF8" , "html" ); content.addBodyPart(textPart); } // properties Properties props = new Properties(); { props.setProperty( "mail.smtp.auth" , "true" ); props.setProperty( "mail.smtp.host" , outlook.getProperty( "host" )); props.setProperty( "mail.smtp.port" , outlook.getProperty( "port" )); props.setProperty( "mail.smtp.starttls.enable" , "true" ); } Session smtp = null ; { smtp = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication( outlook.getProperty( "username" ) , outlook.getProperty( "password" ) ); } }); smtp.setDebug( true ); smtp.setDebugOut(System.out); } MimeMessage m = new MimeMessage(smtp); { m.setRecipient(Message.RecipientType.TO, new InternetAddress(outlook.getProperty( "to" ))); m.setSubject( "thoth-email TLS test " + now); InternetAddress from = null ; { from = new InternetAddress(outlook.getProperty( "from" )); from.setPersonal( "Thoth Email" ); m.setFrom(from); } InternetAddress reply = null ; { reply = new InternetAddress(outlook.getProperty( "reply" )); m.setReplyTo( new InternetAddress[] {reply}); } m.setContent(content); } Transport.send(m); }  } 

摘要

发送邮件的代码不是很困难。 成功接收电子邮件而不将其标记为垃圾邮件是另一回事。 但是,如果您遵循此示例,请使用有效的帐户,并且不要过度使用它,则应该可以。 该博客显示了如何使用Java Mail通过具有TLS连接的SMTP服务器发送电子邮件。

翻译自: https://www.javacodegeeks.com/2020/02/java-mail-sent-over-tls.html

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

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

相关文章

html实体转化字符串 php_php将字符串转为HTML的实体引用的一个类

class HtmlEncode {static $_convertToHtmlEntitiesSrcEncodingUTF-8;/*** 将非ASCII字符串转换成HTML实体** example HtmlEncode::encode("我信了"); //输出:我信了* param string $s 要进行编码的字符串* return string 返回HTML实体引用*/public static function …

arcgis导入excel字段不显示_ArcGIS从excel中导入坐标出现空白无法选择字段

怎样将PDF转成EXCEL怎样将PDF转成EXCEL EXCEL和PDF这两种文档大家应该都比较熟悉&#xff0c;EXCEL表格是使用于数据图表得整理&#xff0c;而PDF文件是用于扫描或者存档&#xff0c;但是这两者之间经常需要进行转换得&#xff0c;比如说经常需要将归档的PDF文件转换成EXCEL表格…

atomic java_在Java中添加@atomic操作

atomic java总览 原子操作如何在Java中工作&#xff0c;OpenJDK / Hotspot中是否存在可以转换为原子的当前替代方法。 反馈 在我以前的文章中&#xff0c; 对可变字段进行原子操作。 有几次指出&#xff0c;不管善意如何&#xff0c;“修复”先前的行为都不太可能继续进行。 …

a4988 脉宽要求_Allegro MicroSystems - A4988: 带转换器和过流保护的 DMOS 微步驱动器

A4988 是一款完全的微步电动机驱动器&#xff0c;带有内置转换器&#xff0c;易于操作。该产品可在全、半、1/4、1/8 及 1/16 步进模式时操作双极步进电动机&#xff0c;输出驱动性能可达 35 V 及 2 A。A4988 包括一个固定关断时间电流稳压器&#xff0c;该稳压器可在慢或混合…

磁盘支持的阵列列表

有时&#xff0c;您的列表可能会变得太大而无法容纳在内存中&#xff0c;因此您必须采取一些措施以避免内存不足。 做到这一点的正确方法是流传输–而不是将所有内容都放入内存中&#xff0c;您应该从源流传输数据并丢弃已经处理的条目。 但是&#xff0c;在某些情况下&#…

apache图片cache容量_apache利用mod_cache缓存图片等

一&#xff0c;引言以前我写过二篇有关图片&#xff0c;静态文件的缓存文章&#xff0c;一个是用varnish来缓存&#xff0c;一个用squid来缓存&#xff0c;apache当然也可以用来做图片&#xff0c;静态文件的缓存&#xff0c;下面我将详细说明一下&#xff0c;怎么完装和配置二…

艾特某人代码实现_Vue@某人,At某人,仿新浪微博@某人,@user,艾特,艾特某人...

atuser.vue展开更多群成员import getCaretCoordinates from textarea-caretexport default {props: {value: { //输入框初始值type: String,default: null},suffix: { //插入字符链接type: String,default: },loop: { //上下箭头循环type: Boolean,default: true},avoidEmail:…

spring batch_Spring Batch作为Wildfly模块

spring batch长期以来&#xff0c;Java EE规范缺少批处理API。 今天&#xff0c;这对于企业应用程序来说是必不可少的。 这是最后固定与JSR-352批处理应用程序的Java平台现在的Java EE提供7 JSR-352得到了它的的灵感Spring Batch的对手。 两者涵盖相同的概念&#xff0c;尽管生…

h3c 链路聚合测试_良无磐石固,虚名复何益?- 链路聚合协议互通测试

一、描述链路聚合是将多条链路聚合在一起形成一个汇聚组&#xff0c;以实现负荷在各成员链路中的分担&#xff0c;同时也提供了更高的连接可靠性。Cisco的链路聚合有几种方式&#xff1a;手工、LACP(包括active和passive两种)、PAgP(Port-aggregation Protocol)&#xff0c;其中…

Spring@懒惰注释

介绍&#xff1a; 默认情况下&#xff0c; Spring框架在应用程序启动时加载并热切初始化所有bean。 在我们的应用程序中&#xff0c;我们可能有一些非常消耗资源的bean。 我们宁愿根据需要加载此类bean。 我们可以使用Spring Lazy批注实现此目的 。 在本教程中&#xff0c;我们…

变压器符号_行输出变压器的结构、符号及电路分析

行输出变压器又称逆程变压器、回扫变压器&#xff0c;俗称行输出&#xff0c;它是电视机、显示器中的一个重要变压器。1.行输出变压器结构行输出变压器的全部绕组和高压整流管均密封在其中&#xff0c;底部引出各个绕组的引脚&#xff0c;高压输出采用高压引线直接送至显像管的…

西南医院微服务咋查得到_#全国最好医院排行榜#发布:成都这4家牛了!四川31个专科排全国前十(总榜)...

病急不能乱投医&#xff01;近日&#xff0c;一年一度、令人期待的——复旦版《2018年度中国医院排行榜&#xff08;总榜&#xff09;》全新揭晓了~这份榜单不仅是是中国医院学科建设的一个标杆也是大众疑难杂症寻找好医院的重要参考四川4家医院入百强&#xff01;华西全国第二…

jit 和 jvm_关于JVM和JIT的一点点

jit 和 jvm如您所知&#xff0c;JVM&#xff08;Java Virtusal Machine&#xff09;使Java能够遵循“一次写入&#xff0c;随处运行”的范例。 JVM的核心包括以下组件&#xff1a; 堆 叠放 PermGen和方法区域 JIT编译器 代码缓存 堆是在应用程序代码开发阶段为您使用的每…

voxelnet_ue4商城资源Voxel Sandbox Toolkit体素沙盒工具箱

Unreal Engine虚幻游戏引擎素材资源 Unreal Engine Marketplace –Voxel Sandbox Toolkit体素沙盒工具箱体素沙盒工具箱是一个新的改进版本的体素生成从2016年适应4.22的需要。它用不同类型的立方体、树和拾取网格生成无限世界。因为额外的代码实现比以前的版本快得多。理想的创…

Pub / Sub本地模拟器

发布/订阅是GCP提供的不错的工具。 它非常方便&#xff0c;可以帮助您解决应用程序可能面临的消息传递难题。 实际上&#xff0c;如果您使用GCP&#xff0c;则可以使用托管消息解决方案。 如预期的那样&#xff0c;使用实际的发布/订阅解决方案需要一定的配额&#xff0c;因此…

mysql 写入随机字中文符_MySQL产生随机字符

MySQL产生随机字符UUID简介UUID含义是通用唯一识别码 (Universally Unique Identifier)&#xff0c;这是一个软件建构的标准&#xff0c;也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份…

mysql建表时外检怎么创建_MySQL创建表时加入的约束以及外键约束的的意义

1&#xff0c;创建表时加入的约束a) 非空约束&#xff0c;not nullb) 唯一约束&#xff0c;uniquec) 主键约束&#xff0c;primary keyd) 外键约束&#xff0c;foreign key1&#xff0c;非空约束&#xff0c;针对某个字段设置其值不为空&#xff0c;如&#xff1a;学生的姓名不…

minecraft_MineCraft和堆外内存

minecraft总览 MineCraft是一个很好的例子&#xff0c;说明何时使用堆外内存确实可以提供帮助。 关键要求是&#xff1a; 保留的数据大部分是一个简单的数据结构&#xff08;在Minecraft的情况下&#xff0c;其很多字节[]&#xff09; 堆外内存的使用可以隐藏在抽象中。 考试…

win2008 mysql_mysql5.7.17在win2008R2的64位系统安装与配置实例

脚本之家已经给大家讲解过MYSQL其他版本在各种环境中的安装过程&#xff0c;大家可以参阅正文下面的相关文章&#xff0c;今天一起来学习下mysql5.7.17的实例安装教学&#xff0c;配置上稍微不同&#xff0c;希望能够帮助到你。安装MySql操作系统&#xff1a;Windows Server 20…

结构性错误

团队成员在使用以下代码时遇到了麻烦&#xff1a; void extractData(String targetUri) { Path tempFile createTempFilePath(); extractDataToPathAndUpload(tempFile, targetUri); cleanUp(tempFile); } void extractDataToPathAndUpload(Path tempFile, String targetUr…