作者:拍友2502926823 | 来源:互联网 | 2023-09-15 17:03
7.1SMTPSMTP是一个简单的基于文本的邮件协议,在这个协议上我们可以指定一条邮件消息和一个或多个接受者,然后进行邮件输出。SMTP协议再加上一个服务器地址就组成一个邮件访
7.1 SMTP
SMTP是一个简单的基于文本的邮件协议,在这个协议上我们可以指定一条邮件消息和一个或多个接受者,然后进行邮件输出。SMTP协议再加上一个服务器地址就组成一个邮件访问方式。
比如:
- QQ邮箱:smtp.qq.com
- 163邮箱:smtp.163.com
通过地址和协议,我们便具有发送邮件的基础通道。使用Java或其他编程语言,可以使用SMTP完成邮件的发送,不必打开网页登录邮箱发送邮件了。
7.2 JavaMail邮件发送
SMTP应用
这一节我们将实现如何使用代码,利用自己的QQ邮箱发送邮件。在上一节中,我们大致了解的SMTP协议,在使用QQ邮箱发送邮件时,我们需要先进入QQ邮箱开启SMTP支持。
开启QQ邮箱设置:
1.打开QQ邮箱设置
2.在QQ邮箱头部找到邮箱设置,切换到账户下面,如图
3.往下边翻,开启和SMTP有关的服务。如图前两项
4.开启过程中可能会有各种验证,最终会得到授权码
注意:1.授权码没有空格,只是QQ邮箱为了分段显示而已。
2.授权码不是邮箱的登录密码,不要混淆。
JavaMail
在Java中我们可以调用JavaMail调用和接受邮件,我们首先配置maven依赖,如pom文件加入
<dependency>
<groupId>javax.mailgroupId>
<artifactId>mailartifactId>
<version>1.4version>
dependency>
然后 ,如下发送代码
import java.security.Security;
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.MimeMessage;
public class MailClient {
public static void main(String[] args) {
try {
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
//配置邮箱信息
Properties props = System.getProperties();
//邮件服务器
props.setProperty("mail.smtp.host", "smtp.qq.com");
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
//邮件服务器端口
props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
//鉴权信息
props.setProperty("mail.smtp.auth", "true");
//建立邮件会话
Session session = Session.getDefaultInstance(props, new Authenticator() {
//身份认证
protected PasswordAuthentication getPasswordAuthentication() {
//1.账户 授权码
return new PasswordAuthentication("xxxxxxx@qq.com", "xxxx");
}
});
//建立邮件对象
MimeMessage message = new MimeMessage(session);
//设置邮件的发件人
message.setFrom(new InternetAddress("xxxxxxx@qq.com"));
//2.设置邮件的收件人
message.setRecipients(Message.RecipientType.TO, "xxxxxxx@qq.com");
//设置邮件的主题
message.setSubject("通过javamail发出!!!");
//文本部分
message.setContent("文本邮件测试", "text/html;charset=UTF-8");
message.saveChanges();
//发送邮件
Transport.send(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
例:用自己的QQ邮箱给自己发一封邮件,注意一下约定条件
1.设置邮件主题为:HELLO
2.设置邮件主题内容是:HELLOWORLD
3.发送邮件完成后,在console打印:“Send complete”信息
先在pom.xml文件中添加依赖库。
然后完成Mail类
1 package com.youkeda.email;
2 import java.security.Security;
3 import java.util.Properties;
4 import javax.mail.Authenticator;
5 import javax.mail.Message;
6 import javax.mail.PasswordAuthentication;
7 import javax.mail.Session;
8 import javax.mail.Transport;
9 import javax.mail.internet.InternetAddress;
10 import javax.mail.internet.MimeMessage;
11
12 public class Mail {
13 public static void main(String[] args) {
14 try {
15 final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
16
17 //配置邮箱信息
18 Properties props = System.getProperties();
19 //邮件服务器
20 props.setProperty("mail.smtp.host", "smtp.qq.com");
21 props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
22 props.setProperty("mail.smtp.socketFactory.fallback", "false");
23 //邮件服务器端口
24 props.setProperty("mail.smtp.port", "465");
25 props.setProperty("mail.smtp.socketFactory.port", "465");
26 //鉴权信息
27 props.setProperty("mail.smtp.auth", "true");
28 //建立邮件会话
29 Session session = Session.getDefaultInstance(props, new Authenticator() {
30 //身份认证
31 protected PasswordAuthentication getPasswordAuthentication() {
32 //1.账户 授权码
33 return new PasswordAuthentication("1026509698@qq.com", "rdzdvorugfsxbebe");
34 }
35 });
36 //建立邮件对象
37 MimeMessage message = new MimeMessage(session);
38 //设置邮件的发件人
39 message.setFrom(new InternetAddress("1026509698@qq.com"));
40 //2.设置邮件的收件人
41 message.setRecipients(Message.RecipientType.TO, "1026509698@qq.com");
42 //设置邮件的主题
43 message.setSubject("HELLO");
44 //文本部分
45 message.setContent("HELLOWORLD", "text/html;charset=UTF-8");
46 message.saveChanges();
47 //发送邮件
48 Transport.send(message);
49 System.out.println("Send complete");
50 } catch (Exception e) {
51 e.printStackTrace();
52 }
53 }
54 }
不一会儿,就收到了自己发来的邮件,感觉不错。