Java:JavaMail / properties / log4j

更多
2021年09月17日 11点36分 作者:叶飞 修改

复习:J&C:Email和短信:SMTP / 服务接口


JavaMail类库

下载地址: https://github.com/javaee/javamail/releases

除了jar包(复习),还有sample,以及source code,无微不至啊!

配合git演示:在eclipse中引入javax.mail.jar包

  1. 复制粘贴到当前项目文件夹下(推荐:好习惯)
  2. Build Path设置


Properties

封装连接SMTP服务器所需的各种信息(和谁连接,怎么连接),例如邮件服务器的主机名(host)、端口号(port)、采用的邮件协议(protocol)等

继承自HashTable,可以直接new出来:

Properties props = new Properties();
键值都是String类型。不太好,但也没有办法,唯一的优势就是灵活:
props.setProperty("mail.smtp.host", "smtp.163.com");
props.setProperty("mail.transport.protocol", "smtp");

有些SMTP服务器需要认证,指定用户名和密码:

props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.user", "feige_20200214");
props.setProperty("mail.password", "yz17bang");
还有如果需要SSL加密,加上以下代码即可:
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);


Session

会话,代表着一次(客户端到SMTP服务器的)连接。(以后会经常用到)

将上述Properties作为构造函数参数传入,获得一个session对象:
Session session = Session.getDefaultInstance(props);
可以开启调试模式,得到更多的信息:
session.setDebug(true);


MimeMessage

封装email本身的相关信息。

mime:媒体类型Multipurpose Internet Mail Extensions)是一种标准,用来表示文档、文件或字节流的性质和格式

根据上文中session对象创建:

MimeMessage message = new MimeMessage(session);

设置标题、正文等:

message.setSubject("源栈欢迎您!");
message.setText("大神小班,拎包入住,………………");

发件人需要使用 InternetAddress对象:

message.setSender(new InternetAddress("feige_20200214@163.com"));

收件人可以通过RecipientType指定抄送(RecipientType.CC)和密送(RecipientType.BCC):

message.setRecipient(RecipientType.TO,     //收件人,正主
		new InternetAddress("2282636022@qq.com"));


HTML格式

如果想要email的正文按HTML格式显示,就需要使用setContent()方法

message.setContent(
		"<a href='https://17bang.ren'>一起帮</a>大神小班,拎包入住,………………",
		"text/html;charset=UTF-8"
		);

在第二个参数中指明

  • text/html:包含了HTML标签
  • charset=UTF-8:使用utf-8编码

但是,最终收件人收到的email文本是否能够按HTML格式显示,我们无法控制。因为有些POP服务器或收件客户端工具基于安全考虑,会拒绝使用HTML

┐(゚~゚)┌


Transport

一切准备就绪!准备发送。

首先根据session对象获取邮件传输对象Transport:

Transport transport = session.getTransport();
然后调用connect()方法,连接SMTP服务器。如果连接有账户验证要求,还需要传入用户名和密码:
transport.connect("feige_20200214","yz17bang");

这里再次传入用户名和密码看起来和Properties中的设置重复,但是不同的SMTP服务器有不同的要求。经过测试,163邮箱要求在connect()中设置即可。

调用sendMessage()方法,收件人可以直接从message中获取(有重复了,^_^)

transport.sendMessage(message, message.getAllRecipients());
最后,Transport是实现了Closable的,不要忘了调用close()方法,或者直接使用try块:
transport.close();
//或者干脆:
try(Transport transport = session.getTransport()){


log4j

可以下载相应的jar包,但从现在开始,我们开始使用Maven

演示:

  1. 将项目转换成maven项目:右键 -> configure -> convert to Maven
  2. pom.xml中添加添加dependencies节点和一个dependency:
    </build><!-- 和build节点并列 -->
    <dependencies>
    	<dependency>
    		<groupId>org.apache.logging.log4j</groupId>
    		<artifactId>log4j-core</artifactId>
    		<version>2.8.2</version>
    	</dependency>
    	<dependency>
    		<groupId>org.apache.logging.log4j</groupId>
    		<artifactId>log4j-api</artifactId>
    		<version>2.8.2</version>
    	</dependency>
    </dependencies>
  3. 右键 -> maven -> Update Project :从远程下载/更新jar包到本地


作业

见:J&C:Email和短信:SMTP / 服务接口
email 电子邮件 javamail
赞: 0 踩: 0

打赏
已收到打赏的 帮帮币

你的 打赏 非常重要!
为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
没有“帮帮币”,作者无法发布新的文章。

全系列阅读
评论 / 0

后台开发


其他:WebForm和WebApi

其他ASP.NET框架,如WebForm、WebApi……

RazorPages(Core)

微软推荐的、最新的、基于Razor页面和.NET core的新一代Web项目开发技术,包括Razor Tag Helper、Model绑定和Validation、Session/Cookie、内置依赖注入等……

MVC(Framework)

过去两年间最流行的、基于.NET Framework和MVC模式的ASP.NET MVC框架,主要用于讲解安全、性能、架构和各种实战功能演示……

C#语法

从入门的变量赋值、分支循环、到面向对象,以及更先进的语言特性,如:泛型、Lambda、Linq、异步方法等…………

Java语法

面向过程的变量赋值、分支循环和函数封装;面向对象的封装、继承和多态;以及更高阶的常用类库(集合/IO/多线程……)、lambda等

Java Web开发

分层架构和综合实战

J&C

Java和C#共有的语法

全部
关键字



帮助

反馈