邮件Demo(SSL加密传输)

简介: private final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; private String smtpServer; // SMTP服务器地址 private String port; // 端口 private String username; // 登录SMTP服务器的用户名 private String password; // 登录SMTP服务器的密码 private List<String> recipients = new ArrayList<String>(); // 收件人地址集合

package javamail.zifangsky.com;

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Properties;

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.Address;

import javax.mail.BodyPart;

import javax.mail.Multipart;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

import javax.mail.internet.MimeUtility;

public class SendMailBySSL {

 private final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

 private String smtpServer; // SMTP服务器地址

 private String port; // 端口

 private String username; // 登录SMTP服务器的用户名

 private String password; // 登录SMTP服务器的密码

 private List<String> recipients = new ArrayList<String>(); // 收件人地址集合

 private String subject; // 邮件主题

 private String content; // 邮件正文

 private List<String> attachmentNames = new ArrayList<String>(); // 附件路径信息集合

 public SendMailBySSL() {

 }

 public SendMailBySSL(String smtpServer, String port, String username,

     String password, List<String> recipients, String subject,

     String content, List<String> attachmentNames) {

   this.smtpServer = smtpServer;

   this.port = port;

   this.username = username;

   this.password = password;

   this.recipients = recipients;

   this.subject = subject;

   this.content = content;

   this.attachmentNames = attachmentNames;

 }

 public void setSmtpServer(String smtpServer) {

   this.smtpServer = smtpServer;

 }

 public void setPort(String port) {

   this.port = port;

 }

 public void setUsername(String username) {

   this.username = username;

 }

 public void setPassword(String password) {

   this.password = password;

 }

 public void setRecipients(List<String> recipients) {

   this.recipients = recipients;

 }

 public void setSubject(String subject) {

   this.subject = subject;

 }

 public void setContent(String content) {

   this.content = content;

 }

 public void setAttachmentNames(List<String> attachmentNames) {

   this.attachmentNames = attachmentNames;

 }

 /**

  * 进行base64加密,防止中文乱码

  * */

 public String changeEncode(String str) {

   try {

     str = MimeUtility.encodeText(new String(str.getBytes(), "UTF-8"),

         "UTF-8", "B"); // "B"代表Base64

   } catch (UnsupportedEncodingException e) {

     e.printStackTrace();

   }

   return str;

 }

 /**

  * 正式发邮件

  * */

 public boolean sendMail() {

   Properties properties = new Properties();

   properties.put("mail.smtp.host", smtpServer);

   properties.put("mail.smtp.auth", "true");

   properties.put("mail.smtp.socketFactory.class", SSL_FACTORY); //使用JSSE的SSL socketfactory来取代默认的socketfactory

   properties.put("mail.smtp.socketFactory.fallback", "false"); // 只处理SSL的连接,对于非SSL的连接不做处理

                               

   properties.put("mail.smtp.port", port);

   properties.put("mail.smtp.socketFactory.port", port);

   Session session = Session.getInstance(properties);

   session.setDebug(true);

   MimeMessage message = new MimeMessage(session);

   try {

    // 发件人

     Address address = new InternetAddress(username);

     message.setFrom(address);

    // 收件人

     for (String recipient : recipients) {

       System.out.println("收件人:" + recipient);

       Address toAddress = new InternetAddress(recipient);

       message.setRecipient(MimeMessage.RecipientType.TO, toAddress); // 设置收件人,并设置其接收类型为TO

       /**

        * TO:代表有健的主要接收者。 CC:代表有健的抄送接收者。 BCC:代表邮件的暗送接收者。

        * */

     }

    // 主题

     message.setSubject(changeEncode(subject));

    // 时间

     message.setSentDate(new Date());

     Multipart multipart = new MimeMultipart();

    // 添加文本

     BodyPart text = new MimeBodyPart();

     text.setText(content);

     multipart.addBodyPart(text);

    // 添加附件

     for (String fileName : attachmentNames) {

       BodyPart adjunct = new MimeBodyPart();

       FileDataSource fileDataSource = new FileDataSource(fileName);

       adjunct.setDataHandler(new DataHandler(fileDataSource));

       adjunct.setFileName(changeEncode(fileDataSource.getName()));

       multipart.addBodyPart(adjunct);

     }

    // 清空收件人集合,附件集合

     recipients.clear();

     attachmentNames.clear();

     message.setContent(multipart);

     message.saveChanges();

   } catch (Exception e) {

     e.printStackTrace();

     return false;

   }

   try {

     Transport transport = session.getTransport("smtp");

     transport.connect(smtpServer, username, password);

     transport.sendMessage(message, message.getAllRecipients());

     transport.close();

   } catch (Exception e) {

     e.printStackTrace();

     return false;

   }

   return true;

 }

 public static void main(String[] args) {

   List<String> recipients = new ArrayList<String>();

//    recipients.add("123456789@qq.com");

   recipients.add("admin@zifangsky.cn");

   String subject = "这封邮件是为了测试SMTP的SSL加密传输";

   String content = "这是这封邮件的正文";

   List<String> attachmentNames = new ArrayList<String>();

   attachmentNames.add("C://Users//Administrator//Desktop//kali.txt");

   SendMailBySSL sendMailBySSL = new SendMailBySSL("smtp.163.com", "465",

       "youname@163.com", "youpassword", recipients, subject, content,

       attachmentNames);

   sendMailBySSL.sendMail();

 }

}


目录
相关文章
|
2天前
|
安全 网络协议 网络安全
SSL(Secure Sockets Layer)是一种安全协议,用于在客户端和服务器之间建立加密的通信通道。
SSL(Secure Sockets Layer)是一种安全协议,用于在客户端和服务器之间建立加密的通信通道。
4 0
|
14天前
|
安全 算法 Java
Java中的数据加密与安全传输
Java中的数据加密与安全传输
|
19天前
|
存储 安全 算法
RSA非对称加密算法中的密钥对生成与传输
RSA非对称加密算法的密钥对生成与传输是信息安全领域的核心问题之一。密钥生成过程需要保证随机性和安全性,而密钥的传输则需要选择适当的方式来确保其保密性和完整性。通过合理的密钥管理和保护措施,可以有效地利用RSA算法保护通信安全,防止信息泄露和篡改。在实际应用中,用户和系统管理员需要结合具体情况选择最佳的密钥生成和传输策略,以达到最佳的安全性和效率。
|
2月前
|
安全 网络协议 应用服务中间件
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
一文读懂HTTPS⭐揭秘加密传输背后的原理与Nginx配置攻略
|
1月前
|
前端开发 Java 网络安全
基于Java Socket实现的SMTP邮件客户端 - 全面支持SSL, TLS
基于Java Socket实现的SMTP邮件客户端 - 全面支持SSL, TLS
23 0
|
2月前
|
安全 网络安全 数据安全/隐私保护
SSL加密
【5月更文挑战第9天】SSL加密
25 1
|
27天前
|
安全 网络安全
如何给网站添加ssl安全证书
如何给网站添加ssl安全证书
37 1
|
2月前
|
存储 算法 安全
ssl 证书名词解释--crt和pem
ssl 证书名词解释--crt和pem
180 0
|
2月前
|
Linux 应用服务中间件 网络安全
linux ssl 证书 --本地制作数字证书并进行程序的数字签名
linux ssl 证书 --本地制作数字证书并进行程序的数字签名
44 0
|
13天前
|
运维 安全 数据建模
阿里云免费SSL证书与付费SSL证书区别及免费SSL证书申请教程参考
免费SSL证书是阿里云为个人网站、开发测试或企业网站建设之初提供的SSL证书,以便满足其对HTTPS数据加密传输的基本要求,从而提高数据传输的安全性。本文为大家详细介绍阿里云免费SSL证书与付费SSL证书区别以及免费SSL证书申请教程。
阿里云免费SSL证书与付费SSL证书区别及免费SSL证书申请教程参考