Java发送邮件(带附件)
实现java发送邮件的过程大体有以下几步:
- 准备一个properties文件,该文件中存放SMTP服务器地址等参数。
- 利用properties创建一个Session对象
- 利用Session创建Message对象,然后设置邮件主题和正文
- 利用Transport对象发送邮件
需要的jar有2个:activation.jar和mail.jar
直接看个demo代码
#----------------这两个是构建session必须的字段---------- #smtp服务器 mail.smtp.host=smtp.qq.com #身份验证 mail.smtp.auth=true #-------------------------------------------------------------- #发送者的邮箱用户名 mail.sender.username=xxx@xx.com #发送者的邮箱密码 mail.sender.password=xxxxxxxxxx
下面是发送邮件的java代码
import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; public class JavaMail { /** * Message对象将存储我们实际发送的电子邮件信息, * Message对象被作为一个MimeMessage对象来创建并且需要知道应当选择哪一个JavaMail session。 */ private MimeMessage message; /** * Session类代表JavaMail中的一个邮件会话。 * 每一个基于JavaMail的应用程序至少有一个Session(可以有任意多的Session)。 * * JavaMail需要Properties来创建一个session对象。 * 寻找"mail.smtp.host" 属性值就是发送邮件的主机 * 寻找"mail.smtp.auth" 身份验证,目前免费邮件服务器都需要这一项 */ private Session session; /*** * 邮件是既可以被发送也可以被受到。JavaMail使用了两个不同的类来完成这两个功能:Transport 和 Store。 * Transport 是用来发送信息的,而Store用来收信。对于这的教程我们只需要用到Transport对象。 */ private Transport transport; private String mailHost=""; private String sender_username=""; private String sender_password=""; private Properties properties = new Properties(); /* * 初始化方法 */ public JavaMail(boolean debug) { InputStream in = JavaMail.class.getResourceAsStream("MailServer.properties"); try { properties.load(in); this.mailHost = properties.getProperty("mail.smtp.host"); this.sender_username = properties.getProperty("mail.sender.username"); this.sender_password = properties.getProperty("mail.sender.password"); } catch (IOException e) { e.printStackTrace(); } session = Session.getInstance(properties); session.setDebug(debug);//开启后有调试信息 message = new MimeMessage(session); } /** * 发送邮件 * * @param subject * 邮件主题 * @param sendHtml * 邮件内容 * @param receiveUser * 收件人地址 */ public void doSendHtmlEmail(String subject, String sendHtml, String receiveUser) { try { // 发件人 //InternetAddress from = new InternetAddress(sender_username); // 下面这个是设置发送人的Nick name InternetAddress from = new InternetAddress(MimeUtility.encodeWord("幻影")+" <"+sender_username+">"); message.setFrom(from); // 收件人 InternetAddress to = new InternetAddress(receiveUser); message.setRecipient(Message.RecipientType.TO, to);//还可以有CC、BCC // 邮件主题 message.setSubject(subject); String content = sendHtml.toString(); // 邮件内容,也可以使纯文本"text/plain" message.setContent(content, "text/html;charset=UTF-8"); // 保存邮件 message.saveChanges(); transport = session.getTransport("smtp"); // smtp验证,就是你用来发邮件的邮箱用户名密码 transport.connect(mailHost, sender_username, sender_password); // 发送 transport.sendMessage(message, message.getAllRecipients()); //System.out.println("send success!"); } catch (Exception e) { e.printStackTrace(); }finally { if(transport!=null){ try { transport.close(); } catch (MessagingException e) { e.printStackTrace(); } } } } public static void main(String[] args) { JavaMail se = new JavaMail(false); se.doSendHtmlEmail("邮件主题", "邮件内容", "xxx@XX.com"); } }
上面只能实现文本的发送,如果我们要发送附件,就需要用到Multipart对象了。
import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; 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; import javax.mail.internet.MimeUtility; public class JavaMailWithAttachment { private MimeMessage message; private Session session; private Transport transport; private String mailHost = ""; private String sender_username = ""; private String sender_password = ""; private Properties properties = new Properties(); /* * 初始化方法 */ public JavaMailWithAttachment(boolean debug) { InputStream in = JavaMailWithAttachment.class.getResourceAsStream("MailServer.properties"); try { properties.load(in); this.mailHost = properties.getProperty("mail.smtp.host"); this.sender_username = properties.getProperty("mail.sender.username"); this.sender_password = properties.getProperty("mail.sender.password"); } catch (IOException e) { e.printStackTrace(); } session = Session.getInstance(properties); session.setDebug(debug);// 开启后有调试信息 message = new MimeMessage(session); } /** * 发送邮件 * * @param subject * 邮件主题 * @param sendHtml * 邮件内容 * @param receiveUser * 收件人地址 * @param attachment * 附件 */ public void doSendHtmlEmail(String subject, String sendHtml, String receiveUser, File attachment) { try { // 发件人 InternetAddress from = new InternetAddress(sender_username); message.setFrom(from); // 收件人 InternetAddress to = new InternetAddress(receiveUser); message.setRecipient(Message.RecipientType.TO, to); // 邮件主题 message.setSubject(subject); // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件 Multipart multipart = new MimeMultipart(); // 添加邮件正文 BodyPart contentPart = new MimeBodyPart(); contentPart.setContent(sendHtml, "text/html;charset=UTF-8"); multipart.addBodyPart(contentPart); // 添加附件的内容 if (attachment != null) { BodyPart attachmentBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(attachment); attachmentBodyPart.setDataHandler(new DataHandler(source)); // 网上流传的解决文件名乱码的方法,其实用MimeUtility.encodeWord就可以很方便的搞定 // 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码 //sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder(); //messageBodyPart.setFileName("=?GBK?B?" + enc.encode(attachment.getName().getBytes()) + "?="); //MimeUtility.encodeWord可以避免文件名乱码 attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachment.getName())); multipart.addBodyPart(attachmentBodyPart); } // 将multipart对象放到message中 message.setContent(multipart); // 保存邮件 message.saveChanges(); transport = session.getTransport("smtp"); // smtp验证,就是你用来发邮件的邮箱用户名密码 transport.connect(mailHost, sender_username, sender_password); // 发送 transport.sendMessage(message, message.getAllRecipients()); System.out.println("send success!"); } catch (Exception e) { e.printStackTrace(); } finally { if (transport != null) { try { transport.close(); } catch (MessagingException e) { e.printStackTrace(); } } } } public static void main(String[] args) { JavaMailWithAttachment se = new JavaMailWithAttachment(true); File affix = new File("c:\\测试-test.txt"); se.doSendHtmlEmail("邮件主题", "邮件内容", "xxx@XXX.com", affix);// } }
相关推荐
在Java开发中,`javax.mail`库是一个非常重要的组件,主要用于处理电子邮件的发送与接收。这个库提供了丰富的API,使得开发者能够轻松地实现邮件服务的功能。`javax.mail-1.6.0.jar`是该库的一个特定版本,包含了...
`javax.mail-1.6.2_javamailjar1.6.2_javamail-1.6.2_javax.mail_java` 这个标题暗示了我们正在讨论的是 JavaMail 的 1.6.2 版本,这是一个稳定且广泛使用的版本。 JavaMail API 提供了一套标准的接口,用于与邮件...
基于Maven的javax.mail发送邮件例子程序 pom.xml添加依赖jar: ...Message对象将存储发送的电子邮件信息,如主题,内容等等 javax.mail.Transport类 Transport传输邮件类,采用send方法是发送邮件。 * */
在给定的压缩包文件中,我们有两个关键组件:`javax.mail-1.5.5.jar` 和 `javamail1_4_5.zip`。 `javax.mail-1.5.5.jar` 是JavaMail API的一个版本,版本号为1.5.5。这个API定义了一组接口和类,用于与各种邮件系统...
在Java编程环境中,`javax.mail.jar` 是一个非常重要的库,它提供了用于发送和接收电子邮件的API。这个库是JavaMail API的一部分,主要用于处理SMTP(简单邮件传输协议)、POP3(邮局协议版本3)和IMAP(因特网消息...
`javax.mail` 是Java平台上的一个标准API,用于处理电子邮件通信。这个API提供了一套全面的接口和类,使得开发者可以方便地实现邮件发送、接收、管理邮箱等操作。`javax.mail-1.5.2` 版本是这个库的一个特定发行版,...
javax.mail.jar 和 activation.jar 是实现这一功能的关键库文件,它们提供了JavaMail API,允许开发者通过Java代码来发送和接收电子邮件。 javax.mail.jar 包含了JavaMail API的核心类和接口,这些接口和类主要...
JavaMail是Java编程环境中用于处理电子邮件的一套强大的API,它为开发者提供了丰富的功能,使得在应用程序中发送、接收和管理邮件变得极其便捷。标题中的"javax.mail.1.4.7.jar"指的是JavaMail的一个特定版本,即...
根据提供的文件信息,我们可以深入探讨如何使用`javax.mail`包中的类来实现通过QQ邮箱服务发送电子邮件的功能。这里的关键步骤包括设置SMTP服务器、配置安全连接(如SSL/TLS)、创建邮件会话、构建邮件对象以及最终...
在Java开发中, javax.mail-1.6.0 是一个重要的库,用于处理电子邮件的发送与接收。这个库为开发者提供了丰富的API,使得我们可以方便地实现邮件的创建、发送、接收以及管理等操作。以下是对javax.mail-1.6.0库的...
在Java编程环境中,发送电子邮件是一项常见的任务,而这通常涉及到对 javax.mail-api.jar 和 activation.jar 这两个库的使用。这两个JAR文件是JavaMail API的核心组成部分,为开发者提供了丰富的功能来处理邮件的...
"javax.mail-1.3.3.01.jar.zip" 文件是JavaMail库的一个版本1.3.3.01的压缩包,包含了"javax.mail-1.3.3.01.jar" 这个核心的JAR文件。 在JavaMail中,主要包含以下关键知识点: 1. **JavaMail API**: 这是一套标准...
JavaMail是Java编程环境中用于处理电子邮件的一套API,它提供了丰富的功能,允许开发者发送、接收和操作邮件。在JavaMail的实现中,通常会用到三个关键的JAR包:`activation-1.1.jar`、`javax.mail-api-1.5.6.jar`和...
标题中的 "javax.mail-1.6.0.jar.7z" 指的是JavaMail 1.6.0版本的jar包,已经压缩成7z格式,用于方便开发者下载和使用。描述中提到的“下载后解压到当前文件夹即可”,意味着开发者可以将这个压缩包解压,并将其包含...
总的来说,`javax.mail-1.6`是Java开发者处理电子邮件的标准库,它提供了丰富的API和强大的功能,使得编写邮件应用变得简单易行。无论你是要发送简单的文本邮件,还是构建复杂的邮件系统,JavaMail都能满足需求。
4. **commons-email-1.2.jar**:这是Apache Commons Email库,提供了一组高级API,简化了使用JavaMail发送电子邮件的过程。这个库包含了丰富的功能,如添加附件、设置HTML内容、发送多部分邮件等,使邮件发送更加...
这个压缩包"javax.mail-1.5.1.zip"包含的是JavaMail 1.5.1版本的JAR文件,即"javax.mail-1.5.1.jar"。这个JAR文件包含了发送和接收电子邮件所需的所有类和接口,使得开发者能够方便地在Java环境中实现邮件功能。 ...
在Java编程中,发送电子邮件是一项常见的任务,尤其在自动化通知、数据报告或者用户验证等场景中。本实例将深入探讨如何使用`mail.jar`和`activation-1.1.jar`这两个库来实现邮件发送功能。这两个JAR文件是JavaMail ...
在Java编程领域,`javax.mail.jar`是一个重要的库文件,它包含了Java Mail API的所有类和接口,用于处理电子邮件的发送和接收。Java Mail API是Java平台上的标准API,它允许开发人员编写与邮件服务器进行交互的应用...
例如,当你需要在Java应用中发送一封带有附件的电子邮件时,javax.activation.jar 就能派上用场。它能够帮助你创建和管理邮件的各个部分,包括正文、主题、收件人列表以及附件,而附件可以是任何类型的数据,通过...