温馨提示×

如何用SSL加密邮件

SSL
小新
259
2021-02-15 10:36:43
栏目: 网络安全

如何用SSL加密邮件

使用SSL加密邮件的示例:

例如在JavaMail中使用SSL对邮件发送进行加密,源码如下:

package javamail.yisu.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 Listrecipients = new ArrayList(); // 收件人地址集合

private String subject; // 邮件主题

private String content; // 邮件正文

private Listp_w_uploadNames = new ArrayList(); // 附件路径信息集合

public SendMailBySSL() {

}

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

String password, Listrecipients, String subject,

String content, Listp_w_uploadNames) {

this.smtpServer = smtpServer;

this.port = port;

this.username = username;

this.password = password;

this.recipients = recipients;

this.subject = subject;

this.content = content;

this.p_w_uploadNames = p_w_uploadNames;

}

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(Listrecipients) {

this.recipients = recipients;

}

public void setSubject(String subject) {

this.subject = subject;

}

public void setContent(String content) {

this.content = content;

}

public void setAttachmentNames(Listp_w_uploadNames) {

this.p_w_uploadNames = p_w_uploadNames;

}

/**

* 进行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 : p_w_uploadNames) {

BodyPart adjunct = new MimeBodyPart();

FileDataSource fileDataSource = new FileDataSource(fileName);

adjunct.setDataHandler(new DataHandler(fileDataSource));

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

multipart.addBodyPart(adjunct);

}

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

recipients.clear();

p_w_uploadNames.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) {

Listrecipients = new ArrayList();

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

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

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

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

Listp_w_uploadNames = new ArrayList();

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

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

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

p_w_uploadNames);

sendMailBySSL.sendMail();

}

}


0