赞
踩
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。
邮箱的使用权限
网易邮箱–>设置–>QQ邮箱–>邮箱设置–>账户–>POP3/SMTP/IMAP
开启POP3/SMTP服务,然后获取16位授权码(注意不要将授权码泄露,一个账户可以拥有多个授权码)
使用jar包
JavaMail (javaee.github.io)https://javaee.github.io/javamail/或者
- <dependencies>
- <dependency>
- <groupId>com.sun.mail</groupId>
- <artifactId>javax.mail</artifactId>
- <version>1.6.2</version>
- </dependency>
- </dependencies>
代码如下(示例):
- // 账号信息
- 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加密
代码如下(示例):
- // 创建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;
-
- }
- }
- // 创建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);
- 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();
- }
- 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("<img src=\"cid:自定义id\"/>");
- 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实现邮件发送的一些简单操作就这样结束了,希望对大家有帮助,后续有接受新的东西,也会来补充,欢迎提问和指导。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。