利用 Java Mail 来收发邮件
SpringBoot整合JavaMail通过阿里云企业邮箱发送邮件的实现
SpringBoot整合JavaMail通过阿⾥云企业邮箱发送邮件的实现JavaMail是Java开发中邮件处理的开源类库,⽀持常⽤协议如:SMTP、POP3、IMAP⼀、SpringBoot整合1、需要在pom⽂件中添加依赖spring-boot-starter-mail<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>构建项⽬,加载相关jar包2、在application.yml中配置邮件发送的相关信息spring:mail:host: #阿⾥云发送服务器地址port: 25 #端⼝号username: XXX@ #发送⼈地址password: ENC(Grg2n2TYzgJv9zpwufsf37ndTe+M1cYk) #密码3、编写邮件发送⼯具类MailUtilMailUtil.java/*** @author chenzan* @version V1.0* @description 邮件发送*/@Componentpublic class MailUtil {@AutowiredJavaMailSendermailSender;@AutowiredMailPropertiesmailProperties;/*** 发送邮件测试⽅法*/public void sendMail(MailBean mailBean) {SimpleMailMessage mimeMessage =new SimpleMailMessage();mimeMessage.setFrom(mailProperties.getUsername());mimeMessage.setTo(mailBean.getToAccount());mimeMessage.setSubject(mailBean.getSubject());mimeMessage.setText(mailBean.getContent());mailSender.send(mimeMessage);}/*** 发送邮件-附件邮件* @param boMailBean*/public boolean sendMailAttachment(MailBean mailBean) {try {MimeMessage mimeMessage =mailSender.createMimeMessage();MimeMessageHelper helper =new MimeMessageHelper(mimeMessage, true);helper.setFrom(mailProperties.getUsername());helper.setTo(boMailBean.getToAccount());helper.setSubject(mailBean.getSubject());helper.setText(mailBean.getContent(), true);// 增加附件名称和附件helper.addAttachment(MimeUtility.encodeWord(boMailBean.getAttachmentFileName(), "utf-8", "B"), mailBean.getAttachmentFile());mailSender.send(mimeMessage);return true;}catch (MessagingException e) {e.printStackTrace();return false;}}MailBean.java/*** @author chenzan* @version V1.0*/@Datapublic class MailBean {private Stringsubject;private String content;private String toAccount;private File attachmentFile;private String attachmentFileName;}4.发送String email = "XXX@";String content="测试内容";String subject = "测试主题";MailBean mailBean =new MailBean ();mailBean .setToAccount(email);boMailBean.setSubject(subject );boMailBean.setContent(content);boolean resultSend =mailUtil.sendMailAttachment(boMailBean);⼆、查看阿⾥云邮箱设置⽀持SMTP/POP3/IMAP功能,轻松通过客户端软件(outlook、foxmail等)收发邮件。
JavaWeb(十三)使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)
JavaWeb(⼗三)使⽤javamail进⾏发送邮件,(使⽤QQ,163,新浪邮箱服务器) 加油加油。
--WZY⼀、发送邮件的原理 在了解其原理之前,先要知道两个协议,SMTP和POP3 SMTP:Simple Mail Transfer Protocol,即简单邮件传输协议,发送邮件的协议,默认端⼝,25 POP3:Post Office Protocol 3,即邮局协议,接收邮件的协议,默认端⼝,110 知道了这两个协议,下⾯来说说邮件发送和接收的原理图,分两种,相同邮件(QQ邮箱给QQ邮箱)和不同邮件(QQ邮箱给163邮箱)是不⼀样的。
解释: 为了⽅便起见,将新浪邮箱,list@称为⽤户A,将搜狐邮箱,wangwu@ 称为⽤户B ⽤户A(新浪邮箱,list@)给⽤户B(搜狐邮箱,wangwu@)发送⼀封邮件,那么整个过程就为图中的实线部分,⽤户A通过OutLook(浏览器或者客户端)登录⾃⼰的邮箱帐号,编写邮件,使⽤Smtp协议发送给Sina的邮件服务器中的Smtp服务器(专门⽤来发送的服务器),然后在通过SMTP协议,传输给Sohu的邮件服务器中的Smtp服务器,然后通过Sohu的Smtp服务器将邮件发送给⽤户B的存储设备进⾏存储(每个⽤户都会有⼀个存储空间⽤来存储邮件的),到这⾥,⽤户A就相当于发送成功了,因为已经到达了⽬的地,如果B⽤户需要查看邮件内容,必须通过POP3服务器将从⾃⼰的存储设备中拿到,然后返回到浏览器或者客户端中显⽰。
⽤户B给⽤户A发送⼀封邮件,那么整个过程就为图中的虚线部分,是和A给B发⼀样的步骤 ⽤户A给⼀个同样使⽤新浪邮箱的⽤户C发送⼀封邮件,那么其过程就简单的多了,先通过Smtp服务器,然后smtp服务器会将其发送到⽤户C的存储设备上,A发送邮件就成功了,⽤户C要显⽰⾃⼰邮箱中的邮件,那么就通过POP3服务器从⾃⼰存储设备中拿取所有邮件进⾏查看。
⼆、通过Java代码实现发送邮件 2.1、准备jar包 核⼼:mail.jar 依赖:activation.jar,邮件需要发送附件时使⽤ 2.2、使⽤163邮箱发送邮件 2.2.1、⾸先在163邮箱中注册⼀个帐号。
Java实现发送邮件,图片,附件
Java实现发送邮件,图⽚,附件1、JavaMail 介绍JavaMail 是sun公司(现以被甲⾻⽂收购)为⽅便Java开发⼈员在应⽤程序中实现邮件发送和接收功能⽽提供的⼀套标准开发包,它⽀持⼀些常⽤的邮件协议,如前⾯所讲的SMTP,POP3,IMAP,还有MIME等。
我们在使⽤JavaMail API 编写邮件时,⽆须考虑邮件的底层实现细节,只要调⽤JavaMail 开发包中相应的API类就可以了。
JavaMail 下载地址:2、JavaMail APIJavaMail API 按照功能可以划分为如下三⼤类:①、创建和解析邮件的API②、发送邮件的API③、接收邮件的API以上三种类型的API在JavaMail 中由多个类组成,但是主要有四个核⼼类,我们在编写程序时,记住这四个核⼼类,就很容易编写出Java邮件处理程序。
Message 类:javax.mail.Message 类是创建和解析邮件的核⼼ API,这是⼀个抽象类,通常使⽤它的⼦类javax.mail.internet.MimeMessage 类。
它的实例对象表⽰⼀份电⼦邮件。
客户端程序发送邮件时,⾸先使⽤创建邮件的 JavaMail API 创建出封装了邮件数据的 Message 对象,然后把这个对象传递给邮件发送API(Transport 类)发送。
客户端程序接收邮件时,邮件接收API把接收到的邮件数据封装在Message 类的实例中,客户端程序在使⽤邮件解析API从这个对象中解析收到的邮件数据。
Transport 类:javax.mail.Transport 类是发送邮件的核⼼API 类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如 SMTP 协议,客户端程序创建好Message 对象后,只需要使⽤邮件发送API 得到 Transport 对象,然后把 Message 对象传递给 Transport 对象,并调⽤它的发送⽅法,就可以把邮件发送给指定的 SMTP 服务器。
hutool mail用法
hutool mail用法Hutool Mail 详细使用指南简介Hutool Mail 是一个功能强大且易于使用的 Java 邮件发送工具。
它提供了发送简单文本邮件、HTML 邮件以及附件邮件等功能,可以满足各种场景下的邮件发送需求。
用法引入依赖首先,在项目的 `` 文件中添加以下依赖:<dependency><groupId></groupId><artifactId>hutool-mail</artifactId><version></version></dependency>发送简单文本邮件Hutool Mail 可以轻松地发送简单的文本邮件。
以下是发送简单文本邮件的示例代码:// 创建邮件配置MailAccount account = new MailAccount();("");(25);(true);("");("username");("password");// 创建邮件SimpleMail mail = new SimpleMail(account);("Hello Hutool Mail");(true);("This is a simple text email.");// 添加收件人("");// 发送邮件();发送 HTML 邮件Hutool Mail 还支持发送 HTML 邮件,可以发送富文本内容。
以下是发送 HTML 邮件的示例代码:// 创建邮件配置(同上述示例)// 创建邮件HtmlMail mail = new HtmlMail(account);("Hello Hutool Mail");(true);("<h1>This is a HTML email.</h1>");// 添加收件人(同上述示例)// 发送邮件(同上述示例)();发送带附件的邮件如果需要发送带附件的邮件,Hutool Mail 也提供了相应的功能。
Java邮件发送功能实现详解:SMTP协议与JavaMail API
Java邮件发送功能实现详解:SMTP协议与JavaMail API简介在现代社会中,电子邮件已经成为人们日常沟通的重要方式之一。
而在Java编程领域,实现邮件发送功能同样是一项重要的任务。
通过SMTP协议和JavaMail API,我们可以很方便地在Java程序中实现邮件发送功能。
本文将详细介绍如何使用SMTP协议和JavaMail API在Java程序中实现邮件发送功能。
SMTP协议SMTP(Simple Mail Transfer Protocol)是用于邮件传输的协议,它定义了邮件是如何从发件人传送到收件人的过程。
在使用Java实现邮件发送功能时,我们需要理解SMTP协议的工作原理,并按照协议规范来构建和发送邮件。
SMTP协议的工作流程通常包括以下步骤:1. 发件人向SMTP服务器发送邮件;2. SMTP服务器根据收件人的域名查找目标邮件服务器;3. SMTP服务器将邮件传递给目标邮件服务器; 4. 目标邮件服务器将邮件存储在收件人的邮箱中。
JavaMail APIJavaMail API是一组用于处理电子邮件的Java类库,它提供了发送、接收和处理邮件的功能。
通过JavaMail API,我们可以方便地在Java程序中实现各种邮件相关操作,包括发送邮件、接收邮件、附件处理等。
在使用JavaMail API发送邮件时,一般需要按照以下步骤进行: 1. 创建一个邮件会话(Session)对象; 2. 创建一个邮件(Message)对象,并设置发件人、收件人、主题、内容等信息; 3. 创建一个邮件传输(Transport)对象,并连接到SMTP服务器; 4. 发送邮件并关闭连接。
实现Java邮件发送功能下面将以一个简单的示例来演示如何在Java程序中实现邮件发送功能。
假设我们要发送一封包含文本内容的简单邮件。
```java import java.util.Properties; import javax.mail.; import javax.mail.internet.;public class SendEmail { public static void main(String[] args) { final String username =。
java邮件发送(单人,多人,抄送,Excel附件)
java邮件发送(单⼈,多⼈,抄送,Excel附件) 直接上代码保存吧package com.westvalley.ceiec.page.report.sendmail;import weaver.email.EmailEncoder;import javax.mail.*;import javax.mail.internet.*;import javax.mail.util.ByteArrayDataSource;import javax.activation.*;import mons.logging.Log;import mons.logging.LogFactory;import ermodel.HSSFWorkbook;import crivia.db.i.DataSet;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.util.*;/**邮件发送⼯具类* @author whh*/public class Email {Log log = LogFactory.getLog(this.getClass());//发件⼈地址private String mail_from;public void setMail_from(String mailFrom) {mail_from = mailFrom;}public String getMail_from() {return mail_from;}//发件⼈密码private String password;public void setPassword(String password) {this.password = password;}public String getPassword() {return password;}//收件地址private String mail_to;public void setMail_to(String mailTo) {mail_to = mailTo;}public String getMail_to() {return mail_to;}//主题private String title;public void setTitle(String title) {this.title = title;}public String getTitle() {return title;}//内容private String message;public void setMessage(String message) {this.message = message;}public String getMessage() {return message;}//发件⼈邮件服务器如: 191.0.0.6private String send_server;public void setSend_server(String sendServer) {send_server = sendServer;}public String getSend_server() {return send_server;}/** 单个发送 setMail_to(String mailTo)* @return是否正确发送* @throws AddressException*/public boolean SendMail()throws AddressException{try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from); message.setFrom(from_address);//设置收件⼈InternetAddress to_address = new InternetAddress(this.mail_to);message.setRecipient(Message.RecipientType.TO, to_address);//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("向"+this.mail_to+"发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.toString());return false;}}/**群发* @param addresses 地址list* @return* @throws AddressException*/public boolean SendMail(List<String> addresses) throws AddressException{ try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from); message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/** 多⼈发送并抄送增加:2017-04-25 whh* @param addresses 收件邮箱(多个)* @param ccAddresses 抄送邮箱(多个)* @return* @throws AddressException*/public boolean SendMail(List<String> addresses, List<String> ccAddresses) throws AddressException{if(0==ccAddresses.size()){ //20170428 whhreturn SendMail(addresses);}try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from);message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置抄送⼈final int ccSize = ccAddresses.size();if(ccSize > 0){InternetAddress cc_Address[] = new InternetAddress[ccSize];for(int i=0; i<ccSize; i++){cc_Address[i] = new InternetAddress(ccAddresses.get(i));}message.setRecipients(, cc_Address);}//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/** 多⼈发送并抄送增加:2019-06-14 whh* @param addresses 收件邮箱(多个)* @param ccAddresses 抄送邮箱(多个)* @param is 附件* @return* @throws AddressException*/public boolean SendMail(List<String> addresses, List<String> ccAddresses,HSSFWorkbook workBook,String workBookName) throwsAddressException{try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from);message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置抄送⼈final int ccSize = ccAddresses.size();if(ccSize > 0){InternetAddress cc_Address[] = new InternetAddress[ccSize];for(int i=0; i<ccSize; i++){cc_Address[i] = new InternetAddress(ccAddresses.get(i));}message.setRecipients(, cc_Address);}//附件ByteArrayOutputStream baos = new ByteArrayOutputStream();workBook.write(baos);baos.flush();byte[] bt = baos.toByteArray();InputStream is = new ByteArrayInputStream(bt, 0, bt.length);baos.close();/*添加正⽂内容*/Multipart multipart = new MimeMultipart();BodyPart contentPart = new MimeBodyPart();// contentPart.setText(this.message);// contentPart.setHeader("Content-Type", "text/html;charset=UTF-8");contentPart.setContent(this.message, "text/html;charset=UTF-8");multipart.addBodyPart(contentPart);/*添加附件*/MimeBodyPart fileBody = new MimeBodyPart();DataSource source = new ByteArrayDataSource(is, "application/msexcel"); fileBody.setDataHandler(new DataHandler(source));// 中⽂乱码问题fileBody.setFileName(MimeUtility.encodeText(workBookName+".xls"));multipart.addBodyPart(fileBody);//设置主题message.setSubject(title);//设置内容message.setContent(multipart);//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/**邮箱初始化,发件⼈邮箱、密码及服务器信息的获取* @return正确获取时返回Email对象,否则为null*/public static Email intiEmail(){// Log log = LogFactory.getLog(this.getClass());Email email = new Email();//获取系统的邮箱信息DataSet data = SQL.select(SQL.sql_Array(" select defmailpassword" +",defmailserver,defmailfrom from SystemSet "));if(data.next()){//发件⼈邮箱地址email.setMail_from(data.get("defmailfrom"));//获取并解析邮箱密码email.setPassword(EmailEncoder.DecoderPassword(data.get("defmailpassword")));// ("Password:"+EmailEncoder.DecoderPassword(data.get("defmailpassword"))); //服务器信息email.setSend_server(data.get("defmailserver"));}if(email.getMail_from().equals("")||email.getPassword().equals("")||email.getSend_server().equals("")){// ("发送⼈邮箱错误");// ("From:"+email.getMail_from()+"Password:"+// email.getPassword()+"Server:"+email.getSend_server());return null;}return email;}}。
中文邮件的编码
使用java mail 包收发中文邮件的编码,解码问题以及解决方法JSP教程-邮件相关编码邮件头(参见RFC822,RFC2047)只能包含US-ASCII字符。
邮件头中任何包含非US-ASCII字符的部分必须进行编码,使其只包含US-ASCII字符。
所以使用java mail发送中文邮件必须经过编码,否则别人收到你的邮件只能是乱码一堆。
不过使用java mail 包的解决方法很简单,用它自带的MimeUtility工具中encode 开头的方法(如encodeText)对中文信息进行编码就可以了。
例子:MimeMessagemimeMsg = new MimeMessage(mailSession);//让javamail决定用什么方式来编码,编码内容的字符集是系统字符集mimeMsg.setSubject( MimeUtility.encodeText( Subject) );//使用指定的base64方式编码,并指定编码内容的字符集是gb2312mimeMsg.setSubject( MimeUtility.encodeText( S ubject,”gb2312”,”B”) );通常对邮件头的编码方式有2种,一种是base64方式编码,一种是QP(quoted-printable)方式编码,javamail根据具体情况来选择编码方式。
如“txt测试”编码后内容如下:=?GBK?Q?Txt=B2=E2=CA=D4里面有个=?GBK?Q?,GBK表示的是内容的字符集,?Q?表示的是以QP方式编码的,后面紧跟的才是编码后的中文字符。
所以用MimeUtility工具编码后的信息里包含了编码方式的信息。
邮件的正文也要进行编码,但它不能用MimeUtility里的方法来编码。
邮件正文的编码方式的信息是要放在Content-Transfer-Encoding这个邮件头参数中的,而MimeUtility里面的方法是将编码方式的信息放在编码后的正文内容中。
JAVAMAIL发送邮件实例-给多人发送、抄送
关键技术:
1、MimeMessage的setRecipients方法设置邮件的收件人,其中
Message.RecipientType.TO常量表示收件人类型是邮件接收者,
常量表示收件人类型是抄送者,
Message.RecipientType.BCC常量表示收件人的类型是密送着。
重庆达渝仁科技官网:
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。
虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件。
JavaMail包中用于处理电子邮件的核心类是:
Session,Message,Address,Authenticator,Transport,Store,Folder等。
Session定义了一个基本的邮件会话,它需要从Properties中读取类似于邮件服务器,用户名和密码等信息。
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
2、在调用MimeMessage的setRecipientsபைடு நூலகம்法时,除了可以指定收件人的类型外,还可以传入一个数组,指定多个收件人的地址。
JavaMail通过IMAP和POP3接收未读以及设置已读邮件
JavaMail通过IMAP和POP3接收未读以及设置已读邮件博客分类:javamailjavamailpop3imap使用javaMail收邮件主要有两种协议,一种是pop3,一种是imap。
这两种协议都可以用来收邮件,但是在其中的处理上是有区别的。
pop3是不支持判断邮件是否为已读的,也就是说你不能直接从收件箱里面取到未读邮件,这需要自己进行判断,然而imap就提供了这样的功能,使用imap时可以很轻松的判断该邮件是否为已读或未读或其他。
此外收件箱中的每一封邮件都对应着一个MessageNumber,所以可以通过一个MessageNumber拿到对应的那封邮件。
如:Message message =folder.getMessage(messageNumber);pop3和imap主要区别就是能否判断邮件状态的问题,其他的操作都差不多.pop3收邮件和解析邮件:Java代码1.package com.clxx.test;2.3.import java.io.FileOutputStream;4.import java.io.IOException;5.import java.io.InputStream;6.import java.io.OutputStream;7.import java.util.Enumeration;8.import java.util.Properties;9.10.import javax.mail.BodyPart;11.import javax.mail.Folder;12.import javax.mail.Message;13.import javax.mail.MessagingException;14.import javax.mail.Multipart;15.import javax.mail.Session;16.import javax.mail.Store;17.import javax.mail.internet.MimeMultipart;18.19.public class Email2 {20.21. public static void main(String args[]) throws MessagingException,22. IOException {23. Properties props = new Properties();24. props.setProperty("mail.store.protocol", "pop3");25. props.setProperty("mail.pop3.host", "");26. Session session = Session.getDefaultInstance(props);27. Store store = session.getStore("pop3");28. store.connect("username@", "password");29. Folder folder = store.getFolder("INBOX");30. folder.open(Folder.READ_WRITE);31.32. // 全部邮件数33. int messageCount = folder.getMessageCount();34. System.out.println(messageCount);35. Message[] messages = folder.getMessages();36. for (int i = 0; i < messages.length; i++) {37. Message message = messages[i];38. System.out.println(message.getSubject());39. // 删除邮件40. // message.setFlag(Flags.Flag.DELETED, true);41. // 标记为已读42. // message.setFlag(Flags.Flag.SEEN, true);43.44. //pop3没有判断邮件是否为已读的功能,要使用Imap才可以45. /*Flags flags = message.getFlags();46. if (flags.contains(Flags.Flag.SEEN))47. System.out.println("这是一封已读邮件");48. else {49. System.out.println("未读邮件");50. message.setFlag(Flags.Flag.SEEN, true);51. }*/52. System.out.println("发送时间:" + message.getSentDate());53. System.out.println("主题:" + message.getSubject());54. System.out.println("内容:" + message.getContent());55. //获取所有的Header,头信息56. Enumeration headers = message.getAllHeaders();57. System.out.println("----------------------allHeaders-----------------------------");58. /* while (headers.hasMoreElements()) {59. Header header = (Header)headers.nextElement();60. System.out.println(header.getName()+" ======= "+header.getValue());61. }*/62.63. //解析邮件内容64. Object content = message.getContent();65. if (content instanceof MimeMultipart) {66. MimeMultipart multipart = (MimeMultipart) content;67. parseMultipart(multipart);68. }69. System.out70. .println("========================================================");71. System.out72. .println("========================================================");73.74. }75.76. folder.close(true);77. store.close();78. }79.80. /**81. * 对复杂邮件的解析82. * @param multipart83. * @throws MessagingException84. * @throws IOException85. */86. public static void parseMultipart(Multipart multipart) throws MessagingException, IOException {87. int count = multipart.getCount();88. System.out.println("couont = "+count);89. for (int idx=0;idx<count;idx++) {90. BodyPart bodyPart = multipart.getBodyPart(idx);91. System.out.println(bodyPart.getContentType());92. if (bodyPart.isMimeType("text/plain")) {93. System.out.println("plain................."+bodyPart.getContent());94. } else if(bodyPart.isMimeType("text/html")) {95. System.out.println("html..................."+bodyPart.getContent());96. } else if(bodyPart.isMimeType("multipart/*")) {97. Multipart mpart = (Multipart)bodyPart.getContent();98. parseMultipart(mpart);99.100. } else if (bodyPart.isMimeType("application/oc tet-stream")) {101. String disposition = bodyPart.getDispositi on();102. System.out.println(disposition);103. if (disposition.equalsIgnoreCase(BodyPart.ATTACHMENT)) {104. String fileName = bodyPart.getFileName ();105. InputStream is = bodyPart.getInputStre am();106. copy(is, new FileOutputStream("D:\\"+f ileName));107. }108. }109. }110. }111.112. /**113. * 文件拷贝,在用户进行附件下载的时候,可以把附件的InputStream传给用户进行下载114. * @param is115. * @param os116. * @throws IOException117. */118. public static void copy(InputStream is, OutputStream o s) throws IOException {119. byte[] bytes = new byte[1024];120. int len = 0;121. while ((len=is.read(bytes)) != -1 ) {122. os.write(bytes, 0, len);123. }124. if (os != null)125. os.close();126. if (is != null)127. is.close();128. }129.}使用imap协议接收邮件:Java代码1.package com.clxx.test;2.3. import java.util.Properties;4.5. import javax.mail.Flags;6. import javax.mail.Folder;7. import javax.mail.Message;8. import javax.mail.Session;9.10. import com.sun.mail.imap.IMAPFolder;11. import com.sun.mail.imap.IMAPStore;12.13. /**14. * 使用imap协议获取未读邮件数15. *16. * @author w17. *18. */19. public class Email3 {20.21. public static void main(String[] args) throws Exception{22. String user = "username@";// 邮箱的用户名23. String password = "password"; // 邮箱的密码24.25. Properties prop = System.getProperties();26. prop.put("mail.store.protocol", "imap");27. prop.put("mail.imap.host", "");28.29. Session session = Session.getInstance(prop);30.31. int total = 0;32. IMAPStore store = (IMAPStore) session.getStore("imap"); // 使用imap会话机制,连接服务器33. store.connect(user, password);34. IMAPFolder folder = (IMAPFolder) store.getFolder("INBOX"); // 收件箱35. folder.open(Folder.READ_WRITE);36. // 获取总邮件数37. total = folder.getMessageCount();38. System.out.println("-----------------共有邮件:" + total39. + " 封--------------");40. // 得到收件箱文件夹信息,获取邮件列表41. System.out.println("未读邮件数:" + folder.getUnreadMessageCount());42. Message[] messages = folder.getMessages();43. int messageNumber = 0;44. for (Message message : messages) {45. System.out.println("发送时间:" + message.getSentDate());46. System.out.println("主题:" + message.getSubject());47. System.out.println("内容:" + message.getContent());48. Flags flags = message.getFlags();49. if (flags.contains(Flags.Flag.SEEN))50. System.out.println("这是一封已读邮件");51. else {52. System.out.println("未读邮件");53. }54. System.out55. .println("========================================================");56. System.out57. .println("========================================================");58. //每封邮件都有一个MessageNumber,可以通过邮件的MessageNumber在收件箱里面取得该邮件59. messageNumber = message.getMessageNumber();60. }61. Message message = folder.getMessage(messageNumber);62. System.out.println(message.getContent()+message.getContentType());63. // 释放资源64. if (folder != null)65. folder.close(true);66. if (store != null)67. store.close();68. }69.70. }。
JSP 通过Java Mail组件发送E-mail
JSP 通过Java Mail组件发送E-mail
Java Mail组件最常用的功能就是实现发送E-mail。
本节将通过一个具体的实例介绍应用Java Mail组件发送E-mail的方法。
下面是一个发送E-mail实例,代码如下所示。
发送Email页面email.htm
上述代码主要实现的功能是:提供表单,让用户选择要发送的邮件地址、主题和邮件内容,单击"发送"按钮执行发送邮件操作。
执行上述代码,在浏览器中输入
地址“http://wxb:8080/JSP/email.htm”,结果如图8-1所示。
图8-1 发送Email页面
上述代码中,主要实现的功能是对邮件进行处理。
首先使用request内置对象接收email.htm页面提交的数据。
然后声明一个Properties对象设置发件人用到的邮件服务器并用session对象进行引用。
最后声明一个MimeMessage对象设置要发送邮件的主题、内容并使用Transport类的sendMessage()方法发送邮件。
执行上述代码,结果如图8-2所示。
图8-2 执行结果。
基于Javamail的邮件收发系统论文
基于JavaMail的邮件收发系统摘要电子邮件在当今社会中扮演了一个很重要的角色。
越来越多的人在使用它。
而且用它的人数势必会继续增加。
本文介绍了Javamail邮件收发系统的开发背景,对国内外现有的多种成熟的电子邮件系统进行分析和比较,总结出它们的优缺点,对Javamail技术进行深入研究,提出并设计实现了基于Javamail的邮件收发系统。
本系统利用SMTP协议和POP协议从底层进行开发,利用JavaMail API为收发邮件提供与协议无关的访问。
SMTP(简单邮件传输协议)是专门用来发送邮件的。
POP (邮局协议)是专门用于接收邮件的。
JavaMail API是一种可选的、能用于读取、编写和发送电子消息的标准扩展包。
本文主要可分为四个部分。
第一部分介绍了Javamail邮件系统的意义和现状。
第二部分具体介绍了几种相关协议和Javamail API。
第三部分主要介绍了系统的开发工具JA V A语言、Eclipse及其安装过程与配置方法。
第四部分详细阐述了Javamail邮件收发系统的实现过程。
关键词:SMTP,POP,JA V AMAIL,邮件收发MAIL SYSTEM BASED ON JAVAMAILABSTRACTE-Mail play a very important role in modern times. More and more people are using it, and the number of it will larger and larger. This paper introduced the javamail system's development background, analyzed and compared some existing maturity Email system at home and abroad , summarized their advantages and disadvantages, studied deeply with the javamail technology , proposed and designed out the mail system based on javamail. This system used POP protocol and SMTP protocol to develop from the bottom, used JavaMail API to provide the visit which has nothing to do with the agreement for send and receive email. SMTP (Simple Mail Transfer Protocol) is designed to send a message. POP (Post Office Protocol) is designed to receive mail. JavaMail API is an standard expansion package which is optional, can be used to read, write and send electronic messages.This paper can be divided into four parts. The first part introduced javamail email system's significance and status. The second part introduced several related agreements and JavaMail API. The third part mainly introduced system's development tools JA V A language , Eclipse and their installation process and configuration method. The fourth part detailed javamail email system's realization process.Keywords:SMTP, POP, JA V AMAIL, Email to send and receive目录第一章绪论 (1)1.1电子邮件介绍 (1)1.2研究意义 (1)1.3研究现状 (3)第二章相关邮件协议和JavaMail API (5)2.1相关邮件协议 (5)2.2JavaMail API (6)2.2.1 JavaMail API简介 (6)2.2.2 JavaMail API核心类 (6)2.3.3 JavaMail API的应用 (8)第三章应用系统开发工具 (10)3.1Java开发语言简介 (11)3.2开发工具Eclipse (12)3.3开发软件的安装 (12)3.3.1 JA V A环境的安装与配置 (12)3.3.2 Eclipse的安装 (14)3.3.3 javamail的安装 (15)第四章JavaMail系统的实现 (16)4.1环境配置与界面搭建 (16)4.2设置邮件服务器参数的实现 (16)4.3创建与发送邮件功能的实现 (17)4.3.1 装载邮件服务器属性, 并与其建立连接 (17)4.3.2 构建邮件 (18)4.3.3 创建Transport对象发送邮件 (19)4.4接收邮件功能的实现 (19)4.4.1 获取服务器信息 (20)4.4.2 建立通信连接 (20)4.4.3显示邮件 (20)4.5删除邮件功能的实现 (22)第五章结语 (23)参考文献 (24)致谢 (25)第一章绪论本文是一项基于JavaMail的邮件系统的综合性研究,使用Sun公司提供的JavaMail API实现电子邮件的发送、电子邮件的接收等等功能。
JSP课件-14JavaMail
18
ACCP V4.0
总结 2-2
Multipart 消息是 Message 类的对象.其内容类型设置为 Multipart Multipart 消息可以有多个 Bodypart Bodypart 既可以为纯文本,也可以为附件
19
ACCP V4.0
�
3
ACCP V4.0
JavaMail API
JavaMail 用于通过网络或 Internet 发送和接收邮件
JavaMail API
抽象类的 集合
跨平台和跨 协议
提供发送和接 收 JavaMail 的 功能
SMTP 服务 器用于发送 邮件
POP3 和 IMAP 服务器用于接收 邮件
4
ACCP V4.0Fra bibliotek6ACCP V4.0
Folder 类
Folder 类定义存取 备份 附加 删除信息等方法 可以只读 类定义存取,备份 附加,删除信息等方法 备份,附加 删除信息等方法,可以只读 模式(READ_ONLY),读写模式打开文件夹 模式 读写模式打开文件夹 (READ_WRITE)
Folder 类
子文件夹 包含消息 抽象类 关闭状态
第十三章 JavaMail
ACCP V4.0
目标
使用 JavaMail API发送和接收邮件
2
ACCP V4.0
邮件协议
SMTP:简单邮件传送协议,Simple Mail Transfer Protocol协议定义了发送电子邮件的规范. POP3:Post office Protocol version3 邮局协议第 三版,协议定义了接收邮件的规范 IMAP:Internet Messager Access Protocol,因特尔 消息访问服务,比POP3更强大.
javamailsenderimpl 协议
很高兴能为您撰写一篇关于“javamailsenderimpl协议”的高质量文章。
在撰写之前,我会先对这个主题进行充分的评估,确保文章能够深入探讨并全面解释相关内容。
1. 该协议的基本概念和原理javamailsenderimpl协议是一种用于在Java中发送电流信箱的协议,它基于JavaMail API实现了邮件的发送和接收功能。
通过jvamailsenderimpl协议,开发人员可以使用Java程序来发送邮件,实现了邮件发送的自动化和定制化。
2. 该协议的使用和应用场景javamailsenderimpl协议通常在Web应用程序中广泛使用,特别是那些需要发送邮件的场景,比如注册、通知、验证等。
通过该协议,开发人员可以轻松地集成邮件发送功能到他们的应用程序中,并且可以进行高度定制化,满足各种业务需求。
3. 个人观点和理解我个人认为javamailsenderimpl协议在邮件发送领域发挥了非常重要的作用,它简化了邮件发送的流程,提高了开发效率。
而且,由于可以通过Java程序来控制邮件的发送过程,因此也提供了更多的个性化定制选项。
在实际的项目中,我曾经使用过该协议来实现邮件发送功能,深刻体会到了它的便利性和可靠性。
4. 总结javamailsenderimpl协议是一种能够在Java应用程序中方便地实现邮件发送功能的协议,它的使用和应用场景非常广泛,能够很好地满足各种邮件发送需求。
通过该协议,开发人员可以轻松地集成邮件发送功能到他们的应用程序中,并且可以进行高度定制化,满足各种业务需求。
以上是一些初步的观点和思路,接下来我会根据这些内容进一步撰写并完善文章,以确保文章的深度和广度兼具。
希望能为您撰写一篇满意的高质量文章!javamailsenderimpl协议是一个用于在Java应用程序中发送电流信箱的协议,它基于JavaMail API实现了邮件的发送和接收功能。
JavaMail API是一个用于处理电流信箱的Java标准扩展,它提供了一种方便的方式来发送和接收电流信箱。
使用Spring的JAVAMail支持简化邮件发送
使⽤Spring的JAVAMail⽀持简化邮件发送闲来⽆事,翻看,发现Spring集成了对JAVA Mail的⽀持,有点⼩激动的看了⼀遍,嗯,话说真的简单了很多。
Spring的邮件发送的核⼼是MailSender接⼝,在Spring3.0中提供了⼀个实现类JavaMailSenderImpl,这个类是发送邮件的核⼼类。
可以通过在配置⽂件中配置使⽤,当然也可以⾃⼰硬编码到代码中(⽅便起见,下⾯的演⽰代码都是硬编码到代码中,省得配置⿇烦)。
Spring提供的邮件发送不仅⽀持简单邮件的发送、添加附件,⽽且还可以使⽤velocity模板控制页⾯样式(应该也⽀持freemarker)。
⾸先对加⼊相应Spring jar包和Java Mail 的jar包。
我们⾸先得声明⼀个MailSender对象,因为MailSender对象只有两个重载的send(...)⽅法,显得有些简陋,我们建议选⽤JavaMailSender接⼝,或者⼲脆直接使⽤实现类,JavaMailSenderImpl。
笔者是使⽤的JavaMailSenderImpl对象,功能丰富。
声明JavaMailSenderImpl对象,并在构造函数中初始化(当然也可以使⽤IoC容器初始化):public class SpringMailSender {// Spring的邮件⼯具类,实现了MailSender和JavaMailSender接⼝private JavaMailSenderImpl mailSender;public SpringMailSender() {// 初始化JavaMailSenderImpl,当然推荐在spring配置⽂件中配置,这⾥是为了简单mailSender = new JavaMailSenderImpl();// 设置参数mailSender.setHost("");mailSender.setUsername("mosaic@");mailSender.setPassword("asterisks");...得到了MailSender对象之后,就可以发送邮件了,下⾯是⽰例代码,没有封装,仅供参考。
Java实现网易企业邮箱发送邮件
Java实现⽹易企业邮箱发送邮件最近项⽬需要⽤⽹易企业邮箱发送邮件,特意来将实现过程记录⼀下:maven导⼊jar包1 <!-- javax.mai 核⼼包 -->2 <dependency>3 <groupId>javax.activation</groupId>4 <artifactId>activation</artifactId>5 <version>1.1</version>6 </dependency>7 <dependency>8 <groupId>javax.mail</groupId>9 <artifactId>mail</artifactId>10 <version>1.4.5</version>11 </dependency>java 使⽤ javax.mail 实现企业邮箱邮件发送1 import java.util.Properties;2 import javax.mail.internet.InternetAddress;3 import javax.mail.internet.MimeMessage;4 import javax.mail.internet.MimeUtility;5 import org.apache.log4j.Logger;6 import org.springframework.mail.javamail.JavaMailSenderImpl;7 import org.springframework.mail.javamail.MimeMessageHelper;8 import com.sun.mail.util.MailSSLSocketFactory;910public class SendMailSmtp {11private static Logger log = Logger.getLogger(SendTemplateSMS.class);1219public static void sendHtmlMail() {20try{21 String from = "邮箱账号名";//发件⼈昵称展⽰ *22 String[] to ={"接收邮箱1","接收邮箱2"};//接收邮箱23 String subject = "邮件主题";//邮件主题 *24 String text = "邮件内容";25 String host = "";//163企业邮箱smtp *26 String username = "发件的企业邮箱";//企业邮箱 *27 String password= "发件的企业邮箱的授权码";//企业邮箱密码 *2829//设置服务器验证信息30 Properties prop = new Properties();31 prop.setProperty("mail.smtp.auth", "true");32 prop.setProperty("mail.smtp.timeout", "994"); // 加密端⼝(ssl) 可通过 https:///help/client-profile.html 进⾏查询3334 MailSSLSocketFactory sf = new MailSSLSocketFactory();// SSL加密35 sf.setTrustAllHosts(true); // 设置信任所有的主机36 prop.put("mail.smtp.ssl.enable", "true");37 prop.put("mail.smtp.ssl.socketFactory", sf);3839//设置邮件内容40 JavaMailSenderImpl javaMailSend = new JavaMailSenderImpl();41 MimeMessage message = javaMailSend.createMimeMessage();42 MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "utf-8");43 String nick = MimeUtility.encodeText(from);//设置昵称44 messageHelper.setFrom(new InternetAddress(nick + " <"+username+">"));// 邮件发送者45 messageHelper.setTo(to);46 messageHelper.setSubject(subject);47 messageHelper.setText(text, true);4849//设置邮件服务器登录信息50 javaMailSend.setHost(host);51 javaMailSend.setUsername(username);52 javaMailSend.setPassword(password);53 javaMailSend.setJavaMailProperties(prop);54 ("maillText:" + text);55 javaMailSend.send(message);56 } catch (Exception e) {57// TODO Auto-generated catch block58 log.error(e);59 e.printStackTrace();60 }61 }6263 }注意:1.邮箱密码是开通pop3/smtp服务时所给的授权码,⽽不是你注册邮箱时的真实密码2.检查⾃⼰邮箱是否开通pop3/smtp服务。
java收取和发送邮件 ssl
Java 收取和发送邮件+SSL这里使用Gmail 邮箱测试1. 收取邮件[java] view plaincopypackage lius.javamail.ssl; import java.io.UnsupportedEncodingException; importjava.security.*; import java.util.Properties; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeUtility; /** * 用于收取Gmail邮件* @author Winter Lau */ public class GmailFetch { public static void main(Stringargv[]) throws Exception { Security.addProvider(new .ssl.internal.ssl.Provider()); final String SSL_FACTORY = ".ssl.SSLSocketFactory";// Get a Properties object Properties props = System.getProperties();props.setProperty("mail.pop3.socketFactory.class",SSL_FACTORY);props.setProperty("mail.pop3.socketFactory.fallback", "false"); props.setProperty("mail.pop3.port", "995"); props.setProperty("mail.pop3.socketFactory.port", "995"); //以下步骤跟一般的JavaMail操作相同Session session = Session.getDefaultInstance(props,null); //请将红色部分对应替换成你的邮箱帐号和密码URLName urln = newURLName("pop3","",995,null, "邮箱帐号", "邮箱密码"); Store store =session.getStore(urln); Folder inbox = null; try { store.connect(); inbox =store.getFolder("INBOX");inbox.open(Folder.READ_ONLY); FetchProfile profile = new FetchProfile();profile.add(FetchProfile.Item.ENVELOPE);Message[] messages = inbox.getMessages();inbox.fetch(messages, profile); System.out.println("收件箱的邮件数:" + messages.length); for (int i = 0;i < messages.length; i++) { //邮件发送者String from =decodeText(messages[i].getFrom()[0].toString()); InternetAddress ia = new InternetAddress(from); System.out.println("FROM:" +ia.getPersonal()+'('+ia.getAddress()+')'); //邮件标题System.out.println("TITLE:" +messages[i].getSubject()); //邮件大小System.out.println("SIZE:" + messages[i].getSize());//邮件发送时间System.out.println("DATE:" + messages[i].getSentDate()); } } finally{ try { inbox.close(false); } catch (Exception e) {} try { store.close(); } catch (Exception e) {} } } protected static String decodeText(String text) throws UnsupportedEncodingException { if (text == null) return null; if (text.startsWith("=?GB") ||text.startsWith("=?gb")) text =MimeUtility.decodeText(text); else text = new String(text.getBytes("ISO8859_1")); returntext; } }2.发送邮件[java] view plaincopypackage lius.javamail.ssl; import java.security.Security; import java.util.Date; import java.util.Properties; importjavax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; importjavax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; importjavax.mail.internet.MimeMessage; /** * 使用Gmail 发送邮件* @author Winter Lau */ public class GmailSender { public static void main(String[] args) throws AddressException, MessagingException{ Security.addProvider(new.ssl.internal.ssl.Provider()); final String SSL_FACTORY = ".ssl.SSLSocketFactory";// Get a Properties object Properties props = System.getProperties();props.setProperty("mail.smtp.host", ""); props.setProperty("mail.smtp.socketFactory.class",SSL_FACTORY);props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.auth", "true"); final String username = "邮箱帐号"; final String password = "邮箱密码"; Session session =Session.getDefaultInstance(props, newAuthenticator(){ protected PasswordAuthentication getPasswordAuthentication() { return newPasswordAuthentication(username,password); }}); // -- Create a new message -- Message msg = newMimeMessage(session); // -- Set the FROM and TO fields -- msg.setFrom(newInternetAddress(username + "@"));msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[收件人地址]",false));msg.setSubject("Hello"); msg.setText("How are you"); msg.setSentDate(new Date());Transport.send(msg); System.out.println("Message sent."); } }现在发送邮件时会发生异常信息,如下:.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX path building failed:sun.security.provider.certpath.SunCertPathBuilderExcepti on: unable to find valid certification path to requested targetatorg.springframework.mail.javamail.JavaMailSenderImpl.do Send(JavaMailSenderImpl.java:419)atorg.springframework.mail.javamail.JavaMailSenderImpl.se nd(JavaMailSenderImpl.java:342)Caused by: javax.mail.MessagingException: Exception reading response;nested exception is:.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX path building failed:sun.security.provider.certpath.SunCertPathBuilderExcepti on: unable to find valid certification path to requested targetatcom.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1462)atcom.sun.mail.smtp.SMTPTransport.openServer(SMTPTra nsport.java:1260)... 4 moreCaused by: .ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed:sun.security.provider.certpath.SunCertPathBuilderExcepti on: unable to find valid certification path to requested targetat.ssl.internal.ssl.Alerts.getSSLException(Alerts. java:174)at.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSock etImpl.java:1611)at.ssl.internal.ssl.Handshaker.fatalSE(Handsha ker.java:187)... 8 moreCaused by: sun.security.validator.ValidatorException: PKIX path building failed:sun.security.provider.certpath.SunCertPathBuilderExcepti on: unable to find valid certification path to requested targetatsun.security.validator.PKIXValidator.doBuild(PKIXValidato r.java:285)atsun.security.validator.PKIXValidator.engineValidate(PKIX Validator.java:191)atsun.security.validator.Validator.validate(Validator.java:218 )at.ssl.internal.ssl.X509TrustManagerImpl.validat e(X509TrustManagerImpl.java:126)at.ssl.internal.ssl.X509TrustManagerImpl.check ServerTrusted(X509TrustManagerImpl.java:209)... 20 moreCaused by:sun.security.provider.certpath.SunCertPathBuilderExcepti on: unable to find valid certification path to requested targetatsun.security.provider.certpath.SunCertPathBuilder.engine Build(SunCertPathBuilder.java:174)atjava.security.cert.CertPathBuilder.build(CertPathBuilder.ja va:238)atsun.security.validator.PKIXValidator.doBuild(PKIXValidato r.java:280)... 26 more原因是需要保存安装证书官方的QA/products/javamail/FAQ.html#installcertQ: When connecting to my mail server over SSL I get an exception like "unable to find valid certification path to requested target".A: Your server is probably using a test certificate or self-signed certificate instead of a certificate signed by a commercial Certificate Authority. You'll need to install the server's certificate into your trust store. TheInstallCert program will help.使用DOS命令进入InstallCert.java 存放目录运行javac InstallCert.java 将InstallCert.java 编译成 .class文件在运行java InstallCert :465【其中xyz是要使用的mail,例如:】【465是端口号】得到jssecacerts文件后复制到jdk1.6.0_14\jre\lib\security 目录然后再发送邮件就OK了代码都是测试过的,运行没问题。
JAVA邮件服务API详解
JavaMail(JAVA邮件服务) API详解一、JavaMail API简介JavaMail API是读取、撰写、发送电子信息的可选包。
我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。
而不是像sendmail或者其它的邮件传输代理(Mail Transfer Agent,简称MTA)程序那样可以传送、递送、转发邮件。
从另外一个角度来看,我们这些电子邮件用户日常用MUA程序来读写邮件,而MUA依赖着MTA处理邮件的递送。
在清楚了到MUA与MTA之间的关系后,让我们看看JavaMail API是如何提供信息访问功能的吧!JavaMail API被设计用于以不依赖协议的方式去发送和接收电子信息,这个API被分为两大部分:基本功能:如何以不依赖于协议的方式发送接收电子信息,这也是本文所要描述的,不过在下文中,大家将看到这只是一厢情愿而已。
第二个部分则是依赖特定协议的,比如SMTP、POP、IMAP、NNTP协议。
在这部分的JavaMail API是为了和服务器通讯,并不在本文的内容中。
二、相关协议一览在我们步入JavaMail API之前,先看一下API所涉及的协议。
以下便是大家日常所知、所乐于使用的4大信息传输协议:SMTPPOPIMAPMIME当然,上面的4个协议,并不是全部,还有NNTP和其它一些协议可用于传输信息,但是由于不常用到,所以本文便不提及了。
理解这4个基本的协议有助于我们更好的使用JavaMail API。
然而JavaMail API是被设计为与协议无关的,目前我们并不能克服这些协议的束缚。
确切的说,如果我们使用的功能并不被我们选择的协议支持,那么JavaMail API并不可能如魔术师一样神奇的赋予我们这种能力。
1.SMTP简单邮件传输协议定义了递送邮件的机制。
在下文中,我们将使用基于Java-Mail的程序与公司或者ISP的SMTP服务器进行通讯。
java mail send方法
一、Java M本人l简介Java M本人l是用于在Java应用程序中发送、接收和管理电流新箱的API。
它提供了一种方便的方式来处理电流新箱,包括创建和发送电流新箱、接收邮件、检查邮件和删除邮件等功能。
二、Java M本人l发送邮件的方法发送邮件是Java M本人l API中最常用的功能之一。
下面是使用Java M本人l API发送邮件的步骤和方法:1. 导入相关的包在使用Java M本人l发送邮件之前,首先需要导入相关的包。
通常情况下,你需要导入javax.m本人l和javax.m本人l.internet这两个包。
2. 创建M本人l Session使用javax.m本人l.Session类创建一个用于连接到邮件服务器的会话对象。
会话对象包含了发送邮件所需的所有配置信息,比如邮件服务器的位置区域、端口号、账号和密码等。
你可以使用Session.getDefaultInstance()方法获取默认的会话对象,也可以使用Session.getInstance()方法根据自定义的配置获取会话对象。
3. 创建MimeMessage对象使用javax.m本人l.internet.MimeMessage类来创建一封邮件。
MimeMessage对象表示一封MIME格式的邮件,包括邮件的发件人、收件人、主题、正文和附件等信息。
4. 设置邮件内容在创建MimeMessage对象之后,可以使用其提供的方法来设置邮件的内容,比如设置发件人、收件人、主题、正文和附件等信息。
5. 发送邮件使用Transport类的send()方法来发送邮件。
在调用send()方法之前,需要先连接到邮件服务器,并使用账号和密码进行身份验证。
发送邮件成功后,需要关闭邮件连接。
三、示例代码下面是一个使用Java M本人l API发送邮件的示例代码:```javaimport javax.m本人l.*;import javax.m本人l.internet.*;import java.util.Properties;public class SendM本人l {public static void m本人n(String[] args) {// 设置邮件服务器Properties properties = new Properties();properties.setProperty("m本人l.smtp.host","smtp.example");properties.setProperty("m本人l.smtp.port", "25");// 创建会话对象Session session = Session.getDefaultInstance(properties);try {// 创建MimeMessage对象MimeMessage message = new MimeMessage(session);// 设置发件人message.setFrom(new InternetAddress("xxx"));// 设置收件人message.addRecipient(Message.RecipientType.TO, new InternetAddress("xxx"));// 设置主题message.setSubject("Test Em本人l");// 设置正文message.setText("This is a test em本人l.");// 发送邮件Transport.send(message);System.out.println("Em本人l sent successfully!");} catch (MessagingException e) {e.printStackTrace();}}}```四、注意事项在使用Java M本人l发送邮件时,需要注意以下几点:1. 邮件服务器的配置在发送邮件之前,需要确保邮件服务器的配置信息是正确的,包括服务器位置区域、端口号、账号和密码等。
javaMail发送邮件(图片,附件)
Java类库中是带有javamail的!所有不需要再下载。
1)运行例子时会出现:Exception in thread "main" ng.NoClassDefFoundError: com/sun/mail/util/LineOutputStream这样的错误,原因是版本不兼容,后来我没有用java ee 5.0而是用j2ee1.4.自己导入mail.jar包就没有出现错误。
2)运行完书本的例子(文本,包含有图片,附件。
另外图片是分为两种,一是引用外部资源,二是嵌入内部)。
对其有个大概的了解。
下面给个完整的例子,包含有图片和附件的。
public class ComplexMessage {/***@param args*@throws MessagingException*@throws AddressException*@throws IOException*@throws FileNotFoundException*/public static void main(String[] args) throws AddressException,MessagingException, FileNotFoundException, IOException{// TODO Auto-generated method stubSession session = Session.getDefaultInstance(new Properties()); // 设置发送邮件的客户端服务器端环境MimeMessage message=createMessage( session);message.writeTo(new FileOutputStream("d:\\test3.eml"));}public static MimeMessage createMessage(Session session) throws AddressException, MessagingException{String from = "4054702459047@";String to = "4074505429047@";String subject = "test";String data = "<FONT face=宋体color=#0909f7 size=7><SPAN style='ACKGROUND-COLOR: #6911ee'><SPAN style='BACKGROUND-COLOR: #000000'><SPAN style='BACKGROUND-COLOR: #000000'><SPAN style='BACKGROUND-COLOR: #ffffff'><EM>华南理工大学</EM> </SPAN></SPAN></SPAN></SPAN></FONT>"+"<img src='cid:test1.jpg'>";Message message = new MimeMessage(session);// 创建MimeMessage实例对象message.setFrom(new InternetAddress(from));message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));message.setSentDate(new Date());message.setSubject(subject);MimeBodyPart contentPart=createContent(data,"d:\\test.jpg");MimeBodyPart attachPart1=createAttachment("d:\\xml.xml");MimeBodyPart attachPart2=createAttachment("d:\\report13.jasper");MimeMultipart multipart=new MimeMultipart("mixed");multipart.addBodyPart(contentPart);multipart.addBodyPart(attachPart1);multipart.addBodyPart(attachPart2);//这里MimeMessage是由MIME对象的消息头和MimeMultipart组成,而MimeMultipart可由//MimeBodyPart 组成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JavaMail API细节详细解析大全JavaMail API是读取、撰写、发送电子信息的可选包。
我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。
让我们看看JavaMail API是如何提供信息访问功能的吧!JavaMail API被设计用于以不依赖协议的方式去发送和接收电子信息,文中着重:如何以不依赖于协议的方式发送接收电子信息,这也是本文所要描述的.版权声明:本文可以自由转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明作者:cleverpig(作者的Blog:/page/cleverpig)原文:/resource/article/44/44101_JavaMail.html关键字:java,mail,pop,smtp一、JavaMail API简介JavaMail API是读取、撰写、发送电子信息的可选包。
我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。
而不是像sendmail或者其它的邮件传输代理(Mail Transfer Agent,简称MTA)程序那样可以传送、递送、转发邮件。
从另外一个角度来看,我们这些电子邮件用户日常用MUA程序来读写邮件,而MUA依赖着MTA处理邮件的递送。
在清楚了到MUA与MTA之间的关系后,让我们看看JavaMail API是如何提供信息访问功能的吧!JavaMail API被设计用于以不依赖协议的方式去发送和接收电子信息,这个API被分为两大部分:基本功能:如何以不依赖于协议的方式发送接收电子信息,这也是本文所要描述的,不过在下文中,大家将看到这只是一厢情愿而已。
第二个部分则是依赖特定协议的,比如SMTP、POP、IMAP、NNTP协议。
在这部分的JavaMail API是为了和服务器通讯,并不在本文的内容中。
二、相关协议一览在我们步入JavaMail API之前,先看一下API所涉及的协议。
以下便是大家日常所知、所乐于使用的4大信息传输协议:SMT PPOP IMAP MIME当然,上面的4个协议,并不是全部,还有NNTP和其它一些协议可用于传输信息,但是由于不常用到,所以本文便不提及了。
理解这4个基本的协议有助于我们更好的使用JavaMail API。
然而JavaMail API是被设计为与协议无关的,目前我们并不能克服这些协议的束缚。
确切的说,如果我们使用的功能并不被我们选择的协议支持,那么JavaMail API并不可能如魔术师一样神奇的赋予我们这种能力。
1.SMTP简单邮件传输协议定义了递送邮件的机制。
在下文中,我们将使用基于Java-Mail的程序与公司或者ISP的SMTP服务器进行通讯。
这个SMTP服务器将邮件转发到接收者的SMTP 服务器,直至最后被接收者通过POP或者IMAP协议获取。
这并不需要SMTP服务器使用支持授权的邮件转发,但是却的确要注意SMTP服务器的正确设置(SMTP服务器的设置与JavaMail API无关)。
2.POPPOP 是一种邮局协议,目前为第3个版本,即众所周知的POP3。
POP定义了一种用户如何获得邮件的机制。
它规定了每个用户使用一个单独的邮箱。
大多数人在使用POP时所熟悉的功能并非都被支持,例如查看邮箱中的新邮件数量。
而这个功能是微软的Outlook内建的,那么就说明微软Outlook之类的邮件客户端软件是通过查询最近收到的邮件来计算新邮件的数量来实现前面所说的功能。
因此在我们使用JavaMail API时需要注意,当需要获得如前面所讲的新邮件数量之类的信息时,我们不得不自己进行计算。
3.IMAPIMAP 使用在接收信息的高级协议,目前版本为第4版,所以也被称为IMAP4。
需要注意的是在使用IMAP时,邮件服务器必须支持该协议。
从这个方面讲,我们并不能完全使用IMAP来替代POP,不能期待IMAP在任何地方都被支持。
假如邮件服务器支持IMAP,那么我们的邮件程序将能够具有以下被IMAP所支持的特性:每个用户在服务器上可具有多个目录,这些目录能在多个用户之间共享。
其与POP相比高级之处显而易见,但是在尝试采取IMAP时,我们认识到它并不是十分完美的:由于IMAP需要从其它服务器上接收新信息,将这些信息递送给用户,维护每个用户的多个目录,这都为邮件服务器带来了高负载。
并且IMAP与POP的一个不同之处是POP 用户在接收邮件时将从邮件服务器上下载邮件,而IMAP允许用户直接访问邮件目录,所以在邮件服务器进行备份作业时,由于每个长期使用此邮件系统的用户所用的邮件目录会占有很大的空间,这将直接导致邮件服务器上磁盘空间暴涨。
4.MIMEMIME 并不是用于传送邮件的协议,它作为多用途邮件的扩展定义了邮件内容的格式:信息格式、附件格式等等。
一些RFC标准都涉及了MIME:RFC 822, RFC 2045, RFC 2046, RFC 2047,有兴趣的Matrixer可以阅读一下。
而作为JavaMail API的开发者,我们并不需关心这些格式定义,但是这些格式被用在了程序中。
5.NNTP和其它的第三方协议正因为JavaMail API在设计时考虑到与第三方协议实现提供商之间的分离,故我们可以很容易的添加一些第三方协议。
SUN维护着一个第三方协议实现提供商的列表:/products/javamail/Third_Party.html,通过此列表我们可以找到所需要的而又不被SUN提供支持的第三方协议:比如NNTP这个新闻组协议和S/MIME这个安全的MIME协议。
三、安装1.安装JavaMail为了使用JavaMail API,需要从[url=ttp:///products/javamail/downloads/index.html]/products/java mail/downloads/index.html[/url]下载文件名格式为javamail-[version].zip的文件(这个文件中包括了JavaMail实现),并将其中的mail.jar文件添加到CLASSPATH中。
这个实现提供了对SMTP、IMAP4、POP3的支持。
注意:在安装JavaMail实现之后,我们将在demo目录中发现许多有趣的简单实例程序。
在安装了JavaMail之后,我们还需要安装JavaBeans Activation Framework,因为这个框架是JavaMail API所需要的。
如果我们使用J2EE的话,那么我们并无需单独下载JavaMail,因为它存在于J2EE.jar中,只需将J2EE.jar加入到CLASSPATH即可。
2.安装JavaBeans Activation Framework从/products/javabeans/glasgow/jaf.html下载JavaBeans Activation Framework,并将其添加到CLASSPATH中。
此框架增加了对任何数据块的分类、以及对它们的处理的特性。
这些特性是JavaMail API需要的。
虽然听起来这些特性非常模糊,但是它对于我们的JavaMail API来说只是提供了基本的MIME类型支持。
到此为止,我们应当把mail.jar和activation.jar都添加到了CLASSPATH中。
当然如果从方便的角度讲,直接把这两个Jar文件复制到JRE目录的lib/ext目录中也可以。
四、初次认识JavaMail API1.了解我们的JavaMail环境A.纵览JavaMail核心类结构打开JavaMail.jar文件,我们将发现在javax.mail的包下面存在着一些核心类:Session、Message、Address、Authenticator、Transport、Store、Folder。
而且在javax.mail.internet包中还有一些常用的子类。
B.SessionSession类定义了基本的邮件会话。
就像Http会话那样,我们进行收发邮件的工作都是基于这个会话的。
Session对象利用了java.util.Properties对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。
Session类的构造方法是私有的,所以我们可以使用Session类提供的getDefaultInstance()这个静态工厂方法获得一个默认的Session对象:Properties props = new Properties();// fill props with any informationSession session = Session.getDefaultInstance(props, null);或者使用getInstance()这个静态工厂方法获得自定义的Session:Properties props = new Properties();// fill props with any informationSession session = Session.getInstance(props, null);从上面的两个例子中不难发现,getDefaultInstance()和getInstance()方法的第二个参数都是null,这是因为在上面的例子中并没有使用到邮件授权,下文中将对授权进行详细介绍。
从很多的实例看,在对mail server进行访问的过程中使用共享的Session是足够的,即使是工作在多个用户邮箱的模式下也不例外。
C.Message当我们建立了Session对象后,便可以被发送的构造信息体了。
在这里SUN提供了Message 类型来帮助开发者完成这项工作。
由于Message是一个抽象类,大多数情况下,我们使用javax.mail.internet.MimeMessage这个子类,该类是使用MIME类型、MIME信息头的邮箱信息。
信息头只能使用US-ASCII字符,而非ASCII字符将通过编码转换为ASCII的方式使用。
为了建立一个MimeMessage对象,我们必须将Session对象作为MimeMessage构造方法的参数传入:MimeMessage message = new MimeMessage(session);注意:对于MimeMessage类来讲存在着多种构造方法,比如使用输入流作为参数的构造方法。
在建立了MimeMessage对象后,我们需要设置它的各个part,对于MimeMessage类来说,这些part就是MimePart接口。