Java发送邮件的简单实现

来源:互联网 发布:电梯运行优化 编辑:程序博客网 时间:2024/06/06 11:41

Java发送邮件的简单实现


JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。JavaMail是可选包,目前并没有被加载到jdk中,使用时需要额外引入。

一、JavaMail引入

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>


二、实现步骤

1、自定义UserAuthenticator继承抽象类Authenticator,用于用户鉴权

2、设置SMTP服务器地址、端口等信息

3、创建邮件会话,即登录邮箱

4、创建邮件消息,即编写邮件内容

5、发送邮件


三、实现代码

Java类描述
    UserAuthenticator(用于用户鉴权,即验证登录信息)
    MailSenderInfo(用于邮件消息,如:发送内容、发送邮箱、接收邮箱等)
    MailSender(发送邮件的代码)
    MailUtils(用来组装邮件消息)

UserAuthenticator

import javax.mail.*;class UserAuthenticator extends Authenticator {String userName = null;String password = null;public UserAuthenticator() {}public UserAuthenticator(String username, String password) {this.userName = username;this.password = password;}protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(userName, password);}}

MailSenderInfo

import java.util.Properties;class MailSenderInfo {// 发送邮件的服务器的IP和端口private String mailServerHost;private String mailServerPort = "25";// 邮件发送者的地址private String fromAddress;// 邮件接收者的地址private String toAddress;// 登陆邮件发送服务器的用户名和密码private String userName;private String password;// 是否需要身份验证private boolean validate = false;// 邮件主题private String subject;// 邮件的文本内容private String content;// 邮件附件的文件名private String[] attachFileNames;/** * 获得邮件会话属性 */public Properties getProperties() {Properties p = new Properties();p.put("mail.smtp.host", this.mailServerHost);p.put("mail.smtp.port", this.mailServerPort);p.put("mail.smtp.auth", validate ? "true" : "false");return p;}public String getMailServerHost() {return mailServerHost;}public void setMailServerHost(String mailServerHost) {this.mailServerHost = mailServerHost;}public String getMailServerPort() {return mailServerPort;}public void setMailServerPort(String mailServerPort) {this.mailServerPort = mailServerPort;}public boolean isValidate() {return validate;}public void setValidate(boolean validate) {this.validate = validate;}public String[] getAttachFileNames() {return attachFileNames;}public void setAttachFileNames(String[] fileNames) {this.attachFileNames = fileNames;}public String getFromAddress() {return fromAddress;}public void setFromAddress(String fromAddress) {this.fromAddress = fromAddress;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getToAddress() {return toAddress;}public void setToAddress(String toAddress) {this.toAddress = toAddress;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getContent() {return content;}public void setContent(String textContent) {this.content = textContent;}}

MailSender

import java.util.Date;import java.util.Properties;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.MessagingException;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;class MailSender {/** * 以文本格式发送邮件 *  * @param mailInfo *            待发送的邮件的信息 */public boolean sendTextMail(MailSenderInfo mailInfo) {// 判断是否需要身份认证UserAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();if (mailInfo.isValidate()) {// 如果需要身份认证,则创建一个密码验证器authenticator = new UserAuthenticator(mailInfo.getUserName(),mailInfo.getPassword());}// 根据邮件会话属性和密码验证器构造一个发送邮件的sessionSession sendMailSession = Session.getDefaultInstance(pro, authenticator);try {// 根据session创建一个邮件消息Message mailMessage = new MimeMessage(sendMailSession);// 创建邮件发送者地址Address from = new InternetAddress(mailInfo.getFromAddress());// 设置邮件消息的发送者mailMessage.setFrom(from);// 创建邮件的接收者地址,并设置到邮件消息中Address to = new InternetAddress(mailInfo.getToAddress());mailMessage.setRecipient(Message.RecipientType.TO, to);// 设置邮件消息的主题mailMessage.setSubject(mailInfo.getSubject());// 设置邮件消息发送的时间mailMessage.setSentDate(new Date());// 设置邮件消息的主要内容String mailContent = mailInfo.getContent();mailMessage.setText(mailContent);// 发送邮件Transport.send(mailMessage);return true;} catch (MessagingException ex) {ex.printStackTrace();}return false;}/** * 以HTML格式发送邮件 *  * @param mailInfo *            待发送的邮件信息 */public static boolean sendHtmlMail(MailSenderInfo mailInfo) {// 判断是否需要身份认证UserAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();// 如果需要身份认证,则创建一个密码验证器if (mailInfo.isValidate()) {authenticator = new UserAuthenticator(mailInfo.getUserName(),mailInfo.getPassword());}// 根据邮件会话属性和密码验证器构造一个发送邮件的sessionSession sendMailSession = Session.getDefaultInstance(pro, authenticator);try {// 根据session创建一个邮件消息Message mailMessage = new MimeMessage(sendMailSession);// 创建邮件发送者地址Address from = new InternetAddress(mailInfo.getFromAddress());// 设置邮件消息的发送者mailMessage.setFrom(from);// 创建邮件的接收者地址,并设置到邮件消息中Address to = new InternetAddress(mailInfo.getToAddress());// Message.RecipientType.TO属性表示接收者的类型为TOmailMessage.setRecipient(Message.RecipientType.TO, to);// 设置邮件消息的主题mailMessage.setSubject(mailInfo.getSubject());// 设置邮件消息发送的时间mailMessage.setSentDate(new Date());// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象Multipart mainPart = new MimeMultipart();// 创建一个包含HTML内容的MimeBodyPartBodyPart html = new MimeBodyPart();// 设置HTML内容html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");mainPart.addBodyPart(html);// 将MiniMultipart对象设置为邮件内容mailMessage.setContent(mainPart);// 发送邮件Transport.send(mailMessage);return true;} catch (MessagingException ex) {ex.printStackTrace();}return false;}}


MailUtils

public class MailUtils {private static final String usernmae = "发送方邮箱地址";// 登陆邮件发送服务器的用户名private static final String userPassword = "发送方邮箱登陆密码";// 登陆邮件发送服务器的密码private static final String mailServerHost = "smtp.ym.163.com";// 根据不用的邮箱不同的配置,这里配置的是163企业邮箱private static final String mailServerPort = "25";// 根据不用邮箱不同配置/** * 发送邮件 *  * @param toMail *            邮箱地址 * @param subject *            邮件名 * @param content *            邮件内容 * @exception: */public static void sendMail(String toMail, String subject, String content) {MailSenderInfo mailInfo = new MailSenderInfo();mailInfo.setMailServerHost(mailServerHost);mailInfo.setMailServerPort(mailServerPort);mailInfo.setValidate(true);mailInfo.setUserName(usernmae);mailInfo.setPassword(userPassword);mailInfo.setFromAddress(usernmae);mailInfo.setToAddress(toMail);mailInfo.setSubject(subject);mailInfo.setContent(content);MailSender sms = new MailSender();sms.sendTextMail(mailInfo);// 发送文体格式}}


测试

@Testpublic void testSendMail() {MailUtils.sendMail("xxx@163.com", "邮件标题", "邮件内容");}





原创粉丝点击