使用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<String> 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<String> getRecipients() { return recipients; } public void setRecipients(List<String> 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.com SECURITY_CODE = You Email Password MAIL_SMTP_HOST = smtp.163.com MAIL_SMTP_PORT = 25 MAIL_SMTP_AUTH =true
相关推荐
首先,Java发送邮件主要依赖于JavaMail API,这是一个开源的Java库,它提供了标准的JavaMail API规范,允许开发者发送、接收和处理邮件。在发送Outlook邮件时,我们通常不是直接与Outlook交互,而是使用SMTP(Simple...
本文将详细讲解如何使用Java发送邮件,并着重介绍消息格式化的概念及其重要性。 首先,发送邮件的核心类是JavaMail API提供的`javax.mail`包中的`Session`, `Message`, `Transport`等类。为了发送邮件,我们需要...
JavaMail SDK是Java发送邮件的核心工具,通过配置Session,创建并设置Message,以及使用Transport发送邮件,开发者可以轻松地在Java应用中实现邮件功能。同时,JavaMail还提供了丰富的功能,如HTML邮件、附件、抄送...
Java发送邮件功能主要依赖于JavaMail API,这是一个用于处理电子邮件的开源库,广泛应用于Java应用程序中。在JavaMail API中,我们通常会用到 javax.mail 和 javax.mail.internet 这两个包,它们包含了发送邮件所需...
`JavaMain(java发送邮件)`这个主题就是关于如何在Java的主方法(`main`)中实现邮件发送的教程。 首先,发送邮件的基本步骤包括以下几个关键点: 1. **配置属性**:设置邮件服务器的相关参数,如SMTP服务器地址、...
Java发送邮件是开发过程中常见的需求,特别是在需要向用户发送通知、报告或附件时。这个"java 发送邮件 Demo 项目源码"包含了实现这一功能的示例代码,可以帮助开发者快速理解并应用到自己的项目中。下面我们将详细...
首先,`java发送邮件示例`涉及到的主要技术是JavaMail API,这是一个开源的Java库,用于处理电子邮件。它允许开发者通过SMTP(简单邮件传输协议)或其他邮件传输协议发送邮件,同时也能处理接收邮件。JavaMail API...
Java发送邮件是软件开发中常见的功能,特别是在企业级应用中,用于发送通知、报表或验证用户的电子邮件地址。本文将深入探讨Java如何通过SMTP(Simple Mail Transfer Protocol)协议发送邮件,并结合提供的"javamail...
Java发送邮件是软件开发中常见的需求,特别是在自动化通知、服务端消息传递等方面。Java Mail API 是Java平台用于处理邮件收发的核心库。本教程将详细讲解如何使用Java实现发送邮件,包括发送图片和附件。 首先,你...
此外,对于不同的邮件服务商,可能需要启用“不安全应用”或使用应用特定的授权码,以允许程序通过SMTP发送邮件。 在提供的"javamail"压缩包文件中,通常会包含示例代码或库文件,帮助你理解和实践上述概念。通过...
4. **发送邮件**:最后,使用Transport类的send方法发送邮件。 ```java Transport transport = session.getTransport("smtp"); transport.connect(); transport.sendMessage(message, message.getAllRecipients...
Java发送邮件功能是Java开发中常见的一项任务,主要用于企业级应用中的通知、验证或客户服务等场景。在Java中实现邮件发送,通常会依赖特定的库,例如本话题中提到的"java发送邮件jar包"。这个jar包可能包含了两个...
Java发送邮件,通常涉及到JavaMail API的使用,这是一个强大的库,允许Java开发者通过SMTP(简单邮件传输协议)或ESMTP(扩展SMTP)发送和接收电子邮件。以下将详细讲解Java发送邮件的过程及其关键技术点。 首先,...
7. 连接管理:在发送邮件前,需要通过Session对象的getTransport()方法获取Transport对象,并调用其connect()方法建立与SMTP服务器的连接。发送邮件后,记得调用Transport.close()来关闭连接。 下面是一个简单的...
本文将详细讲解如何...总的来说,Java发送邮件涉及了JavaMail API的使用,包括配置SMTP服务器、创建Message对象、设置邮件内容以及发送邮件。通过理解和实践这些概念,你可以轻松地实现跨邮箱服务商的邮件发送功能。
本教程将详细讲解如何利用Java发送邮件,包括所需的库、基本概念以及具体实现步骤。 首先,Java邮件API(JavaMail API)是Java平台中用于处理电子邮件的标准API,它定义了一组接口和类,允许程序员创建和发送电子...
总之,Java发送邮件涉及到JavaMail API的使用,主要步骤包括设置环境属性、创建Session、构建Message、添加附件(如有需要)以及发送邮件。`SendMailEx`类可能是对这些步骤的封装,提供一个简单易用的接口来实现邮件...
Java发送邮件是Java开发中的一项常见任务,尤其在企业级应用和自动化通知系统中非常普遍。Java Mail API是Java平台上用于处理电子邮件的主要工具,它提供了一系列接口和类,使得开发者可以方便地创建、发送和接收...
5. **发送邮件**:最后,使用`Transport`类的`send`方法发送邮件: ```java Transport.send(message); ``` 以上就是Java实现邮件发送功能的基本步骤。通过调整`Properties`和`Message`的配置,可以实现邮件的...
在Java Web开发中,发送邮件是一项常见的功能,用于与用户进行互动,如验证注册、通知更新或发送报表等。为了实现这一功能,开发者通常需要引入特定的JavaMail API库,也就是我们所说的jar包。JavaMail API是Java...