包括基本的文字邮件、html邮件、有图片的、有附件的邮件。没什么可说的,直接上代码:
package com.wjl.mail.utils; import java.io.File; import java.net.URL; import java.security.GeneralSecurityException; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.activation.URLDataSource; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.Message.RecipientType; 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; /** * 邮 件 发 送 的工具类 * 易 邮 各个账号之间互相 发 送 消息:包括简单的文字邮 件、html邮 件、图片邮 件、附件邮 件等信息 */ public class MailUtils7 { private static String userName = "user03@wjl.com";// 发 送 邮 件的人 private static String password = "123456";// 发 送 邮 件的 账 户 的密 码 private static String userNameForTO = "user04@wjl.com";//接收邮 件的人 private static String userNameForCC = "user01@wjl.com,user02@wjl.com";//抄送人 private static String userNameForBCC = "Admin@wjl.com";//密送人 private static String port = "25";//465、587 //该方法用来设置smtp 服 务 器的基本信息 public static Properties setPropertiesForMai() throws GeneralSecurityException{ Properties props = new Properties(); //开 启debug调试 props.setProperty("mail.debug", "true"); //stmp 服 务 器需要进行身份验 证,也就是用 户 名和密 码的校 验,这样才能通过验 证 props.setProperty("mail.smtp.auth", "true"); // 发 送 邮 件协议名称 props.setProperty("mail.transport.protocol", "smtp"); //设置 邮 件 服 务 器主机名 props.setProperty("mail.host", "127.0.0.1");//本地 //设 端 口 号(该配置可写可不写) props.setProperty("mail.smtp.port", port); return props; } /** * 该方法用来 发 送 邮 件 * @param to:给谁发邮 件 * @param copyTo:抄送人 * @param copyTo2:密送人 * 抄送跟密送的区别: * 抄送人:所有的邮 件接受者(包括收件人、抄送人、密送人)都能看到该封邮 件抄送给了谁,不能看到密送给了谁 * 密送人:可以收到邮 件,也能看到收件人是谁、抄送人是谁(当你发现收件人、抄送人都没有你你却收到邮 件时,说明你是密送人,嘎嘎) * 举例:user04给user03发邮 件,抄送给user01、user02,密送给Admin * 那么:user03(收件人)、user01(抄送人)、user02(抄送人)、Admin(密送人)都能收到邮 件,且能看到发件人是user04、收件人是user03、抄送人是user01和user02,看不到密送人信息 * Admin(密送人)能收到邮 件,也能看到发件人、收件人、抄送人信息(真神奇)。 * **/ public static void sendMain(String to,String copyTo,String copyTo2) throws Exception{ //1、创建连接对象,连接到邮 箱 服 务 器 Properties props = setPropertiesForMai(); //Authenticator:认证信息 Session session = Session.getInstance(props, new Authenticator(){ @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userName,password);//使用它给其他 账 户 发邮 件 } }); //2、创建邮 件对象 Message message = new MimeMessage(session); //2.1设置发件人 message.setFrom(new InternetAddress(userName)); //2、2设置收件人 message.setRecipient(RecipientType.TO, new InternetAddress(to)); //2.2.1 抄送人 if(copyTo!=null){ message.setRecipients(RecipientType.CC,InternetAddress.parse(copyTo)); } //2.2.2 密送人 if(copyTo2!=null){ message.setRecipients(RecipientType.BCC,InternetAddress.parse(copyTo2)); } //2.3邮 件的主题 message.setSubject(" 测 试 发复杂消息:有附件的邮 件"); //2.4邮 件的正文(即邮 件的内容) /* //第一:文本邮 件 message.setSubject(" 测 试 发复杂消息:文本邮 件"); message.setText(" 测 试 文本邮 件"); */ /* //第二:html邮 件: //向multipart对象中添加邮 件的各个部分内容,包括文本内容和附件 message.setSubject(" 测 试 发复杂消息:HTML邮 件"); Multipart multipart = new MimeMultipart(); //设置邮 件的文本内容 BodyPart htmlContent = new MimeBodyPart(); htmlContent.setContent(appendHtmlForMail(), "text/html;charset=utf-8"); multipart.addBodyPart(htmlContent); message.setContent(multipart); */ //第三:有附件的邮 件 //邮 件内容 Multipart multipart = new MimeMultipart(); String url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1515670086235&di=6adfad147f9fa257e93828dbd65a228d&imgtype=0&src=http%3A%2F%2Fpic30.nipic.com%2F20130607%2F9908282_110512457172_2.jpg"; //文本内容 BodyPart contentPart = new MimeBodyPart(); contentPart.setContent("<p>这是一封有附件的邮 件</p><p>第一个附件是这个样子的:</p><img src=\""+url+"\" />","text/html;charset=utf-8"); multipart.addBodyPart(contentPart); //附件1:网络图片 BodyPart filePartForURL = new MimeBodyPart(); //设置文件名称 filePartForURL.setFileName(MimeUtility.encodeText("附件1.jpg"));//MimeUtility.encodeText:解决中文乱码 DataSource urlDataSorce = new URLDataSource(new URL(url)); DataHandler urlDataHandler= new DataHandler(urlDataSorce); filePartForURL.setDataHandler(urlDataHandler); multipart.addBodyPart(filePartForURL); //附件2:本地文件 BodyPart filePartForLocal = new MimeBodyPart(); filePartForLocal.setFileName(MimeUtility.encodeText("附件2.txt")); DataSource localDataSorce = new FileDataSource(new File("D:\\test.txt")); DataHandler localDataHandler= new DataHandler(localDataSorce); filePartForLocal.setDataHandler(localDataHandler); multipart.addBodyPart(filePartForLocal); //附件3:本地中文名称的文件 BodyPart filePartForLocal2 = new MimeBodyPart(); filePartForLocal2.setFileName(MimeUtility.encodeText("附件3.doc"));//该名称的后缀名与FileDataSource()中的文件名称的后缀必须一致,否则无法预览(使用foxMail进行预览) DataSource localDataSorce2 = new FileDataSource(new File("D:\\请假.doc")); DataHandler localDataHandler2= new DataHandler(localDataSorce2); filePartForLocal2.setDataHandler(localDataHandler2); multipart.addBodyPart(filePartForLocal2); //将multipart添加到message message.setContent(multipart); //3. 发 送 邮 件 Transport trans = session.getTransport(); //连接邮 件 服 务 器 trans.connect(userName, password); // 发 送 邮 件 trans.sendMessage(message, message.getAllRecipients()); //关闭连接 trans.close(); //Transport.send(message);(两种方式都可以) System.out.println("发 送 成 功 "); } //该方法用来拼接HTML(较复杂) public static String appendHtmlForMail(){ StringBuffer html = new StringBuffer(); html.append("<p style=\"font-size:14px; font-family:verdana; margin:0 0 10px; line-height:22px; text-align:left\">很抱歉您 发 送 的邮 件被退回,以下是该邮 件的相关信息:</p>") .append("<table style=\"width:90%; border-collapse:collapse; margin:0 0 15px\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">") .append("<tbody><tr>") .append("<td style=\"width:120px; font-family:verdana; font-size:14px; font-weight:bold; text-align:center; background:#E0ECF9; border:1px solid #C1D9F3\">被退回邮 件</td>") .append("<td style=\"border:1px solid #C1D9F3; font-family:verdana; padding:5px 15px; line-height:20px; font-size:14px;\">主 题: 测 试 QQ与易邮之间发邮 件 <br>时 间:<span style=\"border-bottom: 1px dashed rgb(204, 204, 204); position: relative;\" t=\"5\" times=\" 10:58\">2018-01-10</span> 10:58:25 </td>") .append("</tr></tbody></table>") .append("<table style=\"width:90%; border-collapse:collapse; margin:0 0 10px\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">") .append("<tbody><tr>") .append("<td colspan=\"2\" style=\"font-size:14px;font-weight:bold;padding:5px 10px; border:1px solid #C1D9F3; background:#C1D9F3\">无法 发 送 到 <a href=\"mailto:user01@wjl.com\" target=\"_blank\">user01@wjl.com</a></td>") .append("</tr>") .append("<tr>") .append("<td style=\"width:120px; font-size:14px;text-align:center; background:#EFF5FB; border:1px solid #C1D9F3\">退信原因</td>") .append("<td style=\"border:1px solid #C1D9F3; font-family:verdana; padding:5px 15px; line-height:20px; font-size:14px;\">") .append("无法与收件人(<a href=\"mailto:user01@wjl.com\" target=\"_blank\">user01@wjl.com</a>)所在服务商建立连接,收件人域名可能不存在。 <br> connect to wjl.com[103.224.182.212]: Connection refused (port 25) </td>") .append("</tr>") .append("<tr>") .append("<td style=\"width:120px; font-size:14px; text-align:center; background:#EFF5FB; border:1px solid #C1D9F3\">解决方案</td>") .append("<td style=\"border:1px solid #C1D9F3; font-family:verdana; padding:5px 15px; line-height:20px; font-size:14px;\">请确认您的收件人地址无误,稍后重新尝试 发 送 您的邮 件。 您也可以向管理员报告此退信。</td>") .append("</tr></tbody></table>") .append("<p style=\"font-size:14px; width:90%;font-family:verdana; margin:0 0 10px; line-height:22px; text-align:left\"> 发 送 尝试已经持续进行了 4 小时。不会再有任何动作来尝试 发 送 你的邮 件了。请联系你的系统管理员或先通过其它非电子邮 件的方式向你的朋友 发 送 信息以免耽误。</p>") .append("<p style=\"font-size:14px; font-family:verdana; margin:0 0 10px; line-height:22px; text-align:left\">此外,您还可以 <a href=\"http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=29&&no=188\" target=\"_blank\">点击这里</a> 获取更多关于退信的帮助信息。</p>") ; return html.toString(); } public static void main(String[] args) { try { sendMain(userNameForTO,userNameForCC,userNameForBCC); } catch (Exception e) { e.printStackTrace(); } } }
祝好运!
相关推荐
总的来说,JavaMail提供了一套丰富的API来处理复杂的邮件任务,包括发送带附件的邮件。通过`MimeMultipart` 和 `MimeBodyPart`,我们可以方便地组织邮件的结构,添加各种内容和附件,从而实现功能丰富的邮件服务。
通常情况下,JavaMail的使用还依赖于另一个库——JavaBeans Activation Framework (JAF),该框架主要用于处理邮件中的附件等复杂内容。 对于不同的操作系统(如Windows 2000等),可能还需要指定一些特定的库路径。...
本篇文章将深入探讨JavaMail的核心概念、关键组件以及如何使用这两个特定的jar包——`jaf-1_1_1.zip`和`javamail1_4_7.zip`。 首先,让我们了解JavaMail的基本组件: 1. **JavaMail API**:这是JavaMail的核心部分...
这个JAR包——javamail-1.4.3,是JavaMail的一个版本,它包含了处理邮件所需的所有核心组件。 在JavaMail中,主要涉及以下几个关键知识点: 1. **MIME(Multipurpose Internet Mail Extensions)**:MIME是一种...
JavaMail支持MIME,所以你可以创建包含附件和HTML内容的复杂邮件。 3. **Message类**:这是JavaMail API的核心类,用于表示邮件消息。你可以设置发件人、收件人、主题、正文等信息,并添加附件。 4. **Session类**...
它提供了丰富的API,能够处理复杂的邮件功能,包括添加附件、设置HTML内容以及我们关注的焦点——发送带有可点击链接的邮件。在这个场景中,JavaMail 被用来创建一封包含可点击链接的邮件,该链接可以引导收件人进行...
例如,他们可以编写程序自动检查邮箱,过滤垃圾邮件,发送带有附件的复杂邮件,甚至实现邮件通知系统。在实际开发中,通常会将这些库添加到项目的类路径中,以便调用其API进行邮件操作。 JavaMail的使用通常包括...
在工具方面,JavaMail 提供了实用的工具类,例如`MimeMessage`用于构建符合MIME标准的复杂邮件,`Address`类则用于处理收件人、发件人和抄送人的地址信息。此外,JavaMail 还支持附件、HTML内容、多部分消息和国际化...
Java发送邮件功能是Java开发中常见的一项任务,主要用于企业级应用中的通知、验证或客户服务等场景。本资源包含实现这一功能所需的...在实际使用过程中,根据具体需求调整代码和配置,即可实现各种复杂的邮件发送功能。
总之,JavaMail 1.4.5 是一个强大的工具,它使得 Java 开发者能够轻松地集成邮件功能,无论是简单的文本邮件还是复杂的多媒体邮件,都能够轻松处理。尽管现在可能有更新的版本,但 JavaMail 1.4.5 对于那些需要兼容...
`MimeMessage`是JavaMail API中最常用的邮件对象,它允许我们设置邮件的各个部分,包括发件人、收件人、主题、正文和附件。最后,通过`Transport`类的`send`方法发送邮件。 在实际开发中,我们常常结合Spring的邮件...
综上所述,通过结合使用JavaMail API和JSP技术,可以实现一个功能强大、易于使用的邮件收发系统,该系统不仅能够处理普通的文本邮件,还能够处理包含多媒体内容的复杂邮件。此外,正确处理中文邮件和字符集转换也是...
为了发送带有附件的邮件,我们还需要使用`MimeMultipart`类,它可以将多个`BodyPart`组合成一封包含文本、图片、文件等的复杂邮件。 总结起来,Java发送普通邮件涉及到的主要知识点包括: 1. JavaMail API的使用,...
标题"邮件必须包 activation.jar mail.jar.rar"暗示了我们需要两个关键的JAR文件——`activation.jar`和`mail.jar`,它们是JavaMail API的重要组成部分。JavaMail API允许Java开发者编写能够处理邮件的程序,包括...
总之,`EasyEmailUtil`简化了Java邮件发送的过程,通过封装邮件服务器配置和邮件构建,使得开发者能快速地实现邮件功能,无论是发送简单的文本邮件,还是包含复杂HTML内容和附件的邮件。在实际应用中,这样的工具类...
`SendMail.java`可能是演示如何通过JavaMail API与SMTP服务器交互的示例代码,展示如何设置发件人、收件人、主题和正文,然后通过SMTP服务器发送邮件。 **POP3/IMAP4服务配置** 对于邮件接收,James提供了POP3和...
因此,如果需要发送带有附件的邮件,一般会使用UTL_SMTP,这是一个低级别的接口,可以构建复杂的邮件结构,包括多部分MIME消息,适合添加附件。或者,更常见的方式是通过调用Java存储过程,利用JavaMail API的功能。...
《Java邮件API详解——以mail.jar为例》 在Java编程领域,邮件处理是一个常见的需求,例如发送自动通知、订阅确认等。JavaMail API是Java平台上的标准库,它提供了发送和接收电子邮件的能力。本文将围绕"mail.jar...
在第七章中,我们将学习如何通过JavaMail API实现在Java应用程序中发送和接收邮件。 JavaMail API是Java平台上的一个开源库,用于处理SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等...