下载地址: https://github.com/javaee/javamail/releases
除了jar包(复习),还有sample,以及source code,无微不至啊!
配合git演示:在eclipse中引入javax.mail.jar包
封装连接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);
实际开发中,通常是将上述信息写入一个.properites文件(复习:配置文件)中:(演示:eclipse项目中添加一个config.properties文件)
mail.smtp.host=smtp.163.com mail.transport.protocol=smtp然后调用类库方法将其读出
Properties properties = new Properties(); //获取当前项目路径 String dir = System.getProperty("user.dir"); //加载config.properties中所有内容 properties.load(new FileInputStream(dir+"\\config.properties")); System.out.println(properties.getProperty("mail.smtp.host"));
会话,代表着一次(客户端到SMTP服务器的)连接。(以后会经常用到)
将上述Properties作为构造函数参数传入,获得一个session对象:Session session = Session.getDefaultInstance(props);可以开启调试模式,得到更多的信息:
session.setDebug(true);
封装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"));
如果想要email的正文按HTML格式显示,就需要使用setContent()方法
message.setContent( "<a href='https://17bang.ren'>一起帮</a>大神小班,拎包入住,………………", "text/html;charset=UTF-8" );
在第二个参数中指明
但是,最终收件人收到的email文本是否能够按HTML格式显示,我们无法控制。因为有些POP服务器或收件客户端工具基于安全考虑,会拒绝使用HTML
┐(゚~゚)┌
一切准备就绪!准备发送。
首先根据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()){
可以下载相应的jar包,但从现在开始,我们开始使用Maven。
演示:
</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>
多快好省!前端后端,线上线下,名师精讲
更多了解 加: