Java实现邮件的发送(E-mail)

Java实现邮件的发送(E-mail)

文章目录

前言

一、简单概念介绍

一、邮件服务器与传输协议

二、Java发送邮件

二、使用步骤

1.导入jar包

2.连接至SMTP服务器

3.创建Session会话

4.纯文本消息发送

5.含附件的邮件发送

5.附件图片显示的邮件发送

总结

前言

电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。

一、简单概念介绍

一、邮件服务器与传输协议

要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。SMTP协议:通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。POP3协议:通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

二、Java发送邮件

邮箱的使用权限

网易邮箱–>设置–>QQ邮箱–>邮箱设置–>账户–>POP3/SMTP/IMAP

开启POP3/SMTP服务,然后获取16位授权码(注意不要将授权码泄露,一个账户可以拥有多个授权码)

二、使用步骤

1.导入jar包

使用jar包

JavaMail (javaee.github.io)https://javaee.github.io/javamail/或者

com.sun.mail

javax.mail

1.6.2

2.连接至SMTP服务器

代码如下(示例):

// 账号信息

String username = "邮箱账号";// 邮箱发送账号

String password = "邮箱授权码";// 邮箱授权码

// 创建一个配置文件,并保存

Properties props = new Properties();

// SMTP服务器连接信息

// 126——smtp.126.com

// 163——smtp.163.com

// qqsmtp.qq.com"

props.put("mail.smtp.host", "smtp.126.com");// SMTP主机名

// 126——25

// 163——465

props.put("mail.smtp.port", "25");// 主机端口号

props.put("mail.smtp.auth", "true");// 是否需要用户认证

props.put("mail.smtp.starttls.enale", "true");// 启用TlS加密

3.创建Session会话

代码如下(示例):

// 创建session会话

// 参数1:smtp服务器连接参数

// 参数2:账号和密码的授权认证对象

Session session = Session.getInstance(props,new Authenticator() {

@Override

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(username,password);

}

});

System.out.println(session);

为了方便使用,将连接和创建会话封装至一个工具类中:

package demo.until;

import java.util.Properties;

import javax.mail.Authenticator;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

public final class JavaMailUntil {

private JavaMailUntil() {}

public static Session createSession() {

// 账号信息

String username = "邮箱账号";// 邮箱发送账号

String password = "邮箱授权码";// 邮箱授权码

// 创建一个配置文件,并保存

Properties props = new Properties();

// SMTP服务器连接信息

// 126——smtp.126.com

// 163——smtp.163.com

// qqsmtp.qq.com"

props.put("mail.smtp.host", "smtp.126.com");// SMTP主机名

// 126——25

// 163——645

props.put("mail.smtp.port", "25");// 主机端口号

props.put("mail.smtp.auth", "true");// 是否需要用户认证

props.put("mail.smtp.starttls.enale", "true");// 启用TlS加密

Session session = Session.getInstance(props,new Authenticator() {

@Override

protected PasswordAuthentication getPasswordAuthentication() {

// TODO Auto-generated method stub

return new PasswordAuthentication(username,password);

}

});

// 控制台打印调试信息

session.setDebug(true);

return session;

}

}

4.纯文本消息发送

// 创建Session会话

Session session = JavaMailUntil.createSession();

// 创建邮件对象

MimeMessage message = new MimeMessage(session);

message.setSubject("主题");

message.setText("文本信息");

message.setFrom(new InternetAddress("发送的邮箱"));

message.setRecipient(RecipientType.TO, new InternetAddress("接受的邮箱"));

// 发送

Transport.send(message);

5.含附件的邮件发送

try {

// 创建会话

Session session = JavaMailUntil.createSession();

// 创建邮件

MimeMessage message = new MimeMessage(session);

message.setFrom("发送的邮箱");

message.setRecipient(RecipientType.TO, new InternetAddress("主要发送人邮箱"));

message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("抄送人邮箱"),new InternetAddress("抄送人邮箱")});

message.setSubject("主题");

// 邮件主体

BodyPart textPart = new MimeBodyPart();

textPart.setContent("文件内容","text/html;charset=utf-8");

// 邮件附件

BodyPart filePart = new MimeBodyPart();

filePart.setFileName("附件显示名字.类型名");

// 提交附件文件

filePart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("本地文件路径")),"application/octet-stream")));

Multipart multipart = new MimeMultipart();

multipart.addBodyPart(textPart);

multipart.addBodyPart(filePart);

// 将邮件装入信封

message.setContent(multipart);

Transport.send(message);

} catch (AddressException e) {

e.printStackTrace();

} catch (MessagingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

5.附件图片显示的邮件发送

try {

// 创建邮件

MimeMessage message = new MimeMessage(session);

message.setFrom("发送的邮箱");

message.setRecipient(RecipientType.TO, new InternetAddress("主要发送人邮箱"));

message.setRecipients(RecipientType.CC, new InternetAddress[] {new InternetAddress("抄送人邮箱"),new InternetAddress("抄送人邮箱")});

message.setSubject("主题");

// 邮件主体

BodyPart textPart = new MimeBodyPart();

StringBuilder stringBuilder = new StringBuilder();

stringBuilder.append("文字");

stringBuilder.append("文字");

stringBuilder.append("");

textPart.setContent(stringBuilder.toString(),"text/html;charset=utf-8");

// 邮件附件

BodyPart filePart = new MimeBodyPart();

filePart.setFileName("图片名称.jpg");

// 提交附件文件

filePart.setDataHandler(

new DataHandler(

new ByteArrayDataSource(

Files.readAllBytes(

Paths.get("本地路径")),

"application/octet-stream")));

filePart.setHeader("Content-ID","自定义id");

Multipart multipart = new MimeMultipart();

multipart.addBodyPart(textPart);

multipart.addBodyPart(filePart);

// 将邮件装入信封

message.setContent(multipart);

Transport.send(message);

} catch (AddressException e) {

e.printStackTrace();

} catch (MessagingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

总结

Java实现邮件发送的一些简单操作就这样结束了,希望对大家有帮助,后续有接受新的东西,也会来补充,欢迎提问和指导。

相关推荐