使用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();
}
}