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(用来组装邮件消息)
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", "邮件标题", "邮件内容");}
阅读全文
0 0
- JAVA邮件发送的简单实现
- Java 实现简单的邮件发送
- java邮件发送的简单实现
- JAVA邮件发送的简单实现
- JAVA邮件发送的简单实现
- JAVA邮件发送的简单实现
- JAVA邮件发送的简单实现
- JAVA邮件发送的简单实现
- JAVA邮件发送的简单实现
- Java发送邮件的简单实现
- JAVA邮件发送的简单实现
- Java邮件发送的简单实现
- JAVA邮件发送的简单实现
- java实现简单的邮件发送
- JAVA邮件发送的简单实现
- JAVA邮件发送的简单实现
- JAVA邮件发送的简单实现
- JAVA邮件发送的简单实现
- 从数据库得到数据导出指定格式的xml文件,上传到NC接口,返回回执到本地一个xml文件
- 栈的压入、弹出序列
- Inno Setup入门(五)——添加readme文件
- JAVA_int类型数据精度高于float低于double
- 下面总结 8 组常用的Eclipse快捷键
- Java发送邮件的简单实现
- kickstart无人值守安装
- Java快速排序
- Java设计模式-工厂模式
- nginx windows rtmp 服务器搭建
- android系统6.0权限
- 关于APPCAN的UI基础框架的定义,说明,场景和例子
- java之静态导入
- Android网络连接的判断