java发送邮件,Authenticator,Session,Message,Multipart,BodyPart
发布日期:2021-05-08 09:45:29 浏览次数:19 分类:精选文章

本文共 4887 字,大约阅读时间需要 16 分钟。

使用java实现发送邮件功能,主要用到了Authenticator,Session,Message,Multipart,BodyPart。

Authenticator:抽象类,继承该类要实现getPasswordAuthentication方法,该方法主要是获取邮箱账户密码,用于用户验证。

Session:根据Properties属性,和用户验证信息创建MimeMessage;

Message:即MimeMessage,用户填写邮件的一些信息,如发送者,接收者,主题,内容,附件等;

Multipart:容器类,用于装作封装了邮件正文内容和附件的BodyPart;

BodyPart:封装邮件正文和附件及编写附件名称,有一点需要注意,如果邮件中有附件,一定要先添加附件后添加邮件正文,如果顺序颠倒,你编写的邮件正文内容会被附件覆盖掉;

以下为正式代码:

package cn.tongmap.global;import java.io.File;import java.io.IOException;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.Authenticator;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.Multipart;import javax.mail.PasswordAuthentication;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 Mail extends Authenticator{	//账号	private static String ACCOUNT_NUMBER;	//密码	private static String SECURITY_CODE;	//邮箱主机	private static String MAIL_SMTP_HOST;	//邮箱端口	private static int MAIL_SMTP_PORT;	//是否验证	private static boolean MAIL_SMTP_AUTH;		static {		Properties pro = null;		try {			pro = new Properties();			pro.load(Mail.class.getResourceAsStream("/mail.properties"));			//人流量数据SFTP服务器信息			ACCOUNT_NUMBER = pro.getProperty("ACCOUNT_NUMBER").trim();			SECURITY_CODE = pro.getProperty("SECURITY_CODE").trim();			MAIL_SMTP_HOST = pro.getProperty("MAIL_SMTP_HOST").trim();			MAIL_SMTP_PORT = Integer.parseInt(pro.getProperty("MAIL_SMTP_PORT").trim());			MAIL_SMTP_AUTH = Boolean.parseBoolean(pro.getProperty("MAIL_SMTP_AUTH").trim());		} catch (IOException e) {			e.printStackTrace();		}	}	//邮件主题	private String subject;	//邮件内容,可以使用html	private String content;	//附件源	private String fileDataSource;	//邮件接收者	private List
recipients; public Mail() { } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getFileDataSource() { return fileDataSource; } public void setFileDataSource(String fileDataSource) { this.fileDataSource = fileDataSource; } public List
getRecipients() { return recipients; } public void setRecipients(List
recipients) { this.recipients = recipients; } /** * 此方法一定要实现,否侧会连接出错,因为要进行用户名密码验证 */ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(ACCOUNT_NUMBER, SECURITY_CODE); } /** * 邮件发送,在实例化对象的时候会需要填写一些发送邮件必要参数 * 在发送邮件时不需要任何参数 * @return 返回内容为字符串,用于提示邮件发送结果或错误提示 * @throws Exception */ public String send() throws Exception { if(null == recipients || recipients.size() == 0) { return "请填写邮件接收者!"; } if(null == subject || "".equals(subject)) { return "请填写邮寄主题!"; } if(null == content || "".equals(content)) { return "请填写邮寄内容!"; } Authenticator auth = new Mail(); Properties pro = new Properties(); pro.put("mail.smtp.host", MAIL_SMTP_HOST); pro.put("mail.smtp.port", MAIL_SMTP_PORT); pro.put("mail.smtp.auth", MAIL_SMTP_AUTH); Session sendMailSession = Session.getDefaultInstance(pro, auth); // 根据session创建一个邮件消息 Message mailMessage = new MimeMessage(sendMailSession); // 创建邮件发送者地址 Address from = new InternetAddress(ACCOUNT_NUMBER); // 设置邮件消息的发送者 mailMessage.setFrom(from); // 创建邮件的接收者地址,并设置到邮件消息中 Address[] tos = new Address[recipients.size()]; for (int i = 0; i < tos.length; i++) { tos[i] = new InternetAddress(recipients.get(i)); } // Message.RecipientType.TO属性表示接收者的类型为TO mailMessage.setRecipients(Message.RecipientType.TO, tos); // 设置邮件消息的主题 mailMessage.setSubject(subject); // 设置邮件消息发送的时间 mailMessage.setSentDate(new Date()); // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象 Multipart mainPart = new MimeMultipart(); // 创建一个包含HTML内容的MimeBodyPart BodyPart html = new MimeBodyPart(); //是否存在附件 if(null != fileDataSource && !"".equals(fileDataSource)) { File file = new File(fileDataSource); if(file.exists()) { FileDataSource data = new FileDataSource(file); html.setDataHandler(new DataHandler(data)); //避免文件名中文乱码 String name = MimeUtility.encodeWord(file.getName()); html.setFileName(name); } else { return "邮件中存在无效附件!"; } } // 设置HTML内容,设置内容步骤要放在设置附件之后,以免内容被覆盖 html.setContent(content, "text/html; charset=utf-8"); mainPart.addBodyPart(html); // 将MiniMultipart对象设置为邮件内容 mailMessage.setContent(mainPart); // 发送邮件 Transport.send(mailMessage); return "邮件发送成功!"; }}

 其中mail.properties为邮件配置文件,单独放出来便于管理:

ACCOUNT_NUMBER = You Email@163.comSECURITY_CODE = You Email PasswordMAIL_SMTP_HOST = smtp.163.comMAIL_SMTP_PORT = 25MAIL_SMTP_AUTH =true

 

上一篇:修改mysql字符集
下一篇:Javascript中String支持使用正则表达式的四种方法

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月09日 23时11分26秒