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.mailjavax.mail1.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() {@Overrideprotected 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() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {// TODO Auto-generated method stubreturn 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实现邮件发送的一些简单操作就这样结束了,希望对大家有帮助,后续有接受新的东西,也会来补充,欢迎提问和指导。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部