java邮件收发程序

合集下载

SpringBoot整合JavaMail通过阿里云企业邮箱发送邮件的实现

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等)收发邮件。

javamail收发邮件(带附件,正文带图)

javamail收发邮件(带附件,正文带图)

1.邮件1.1 邮件组成部分如果是新邮件就获取,并解析它;邮件是由邮件头和邮件体组成,在邮件头中主要包含了收件人、发件人、主题等等基础信息。

而邮件体中就包括了邮件的正文和附件等内容信息。

下图就是pop3协议下,邮件的大致内容。

1.2 发送邮件(带附件、正文带图片)QQ邮箱为例:需要QQ账号和QQ登录第三方客户端时,密码框的“授权码”(相当于密码)授权码如下获取:代码如下:public class JavaMailboxAttachment {private MimeMessage message;private Session session;private String mailHost = "";private String mailAuth = "";private String mailPort = "";private String sender_username = "";private String sender_password = "";//定义一个Properties 用于存放信息private Properties properties = new Properties();//-------------------------------发信箱---------------------------------------------public JavaMailboxAttachment(String email_type) {try {properties.put("mail.smtp.host",""); //发送邮件服务器//端口号,QQ邮箱给出了两个端口,但是另一个我一直使用不了,所以就给出这一个587properties.put("mail.smtp.port", "587"); //发送邮件端口号properties.put("mail.smtp.auth", "true");// 此处填写你的账号properties.put("er", "xxxxxxxxx@");// 此处的密码就是前面说的16位STMP授权码properties.put("mail.password", "xxxxxxxxxxxxxxxx");this.mailHost = properties.getProperty("mail.smtp.host");this.mailAuth = properties.getProperty("mail.smtp.auth");this.mailPort = properties.getProperty("mail.smtp.port");this.sender_username = properties.getProperty("er");this.sender_password = properties.getProperty("mail.password");} catch (Exception e) {e.printStackTrace();}// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = properties.getProperty("er");String password = properties.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};session = Session.getInstance(properties,authenticator); //用户验证message = new MimeMessage(session); //将验证成功的session信息,创建一个message 对象。

Java实现outlook服务的邮件发送

Java实现outlook服务的邮件发送

Java实现outlook服务的邮件发送依赖<!-- https:///artifact/javax.mail/mail --><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependency>POP3接收String USER_NAME ="*****@";String PASSWORD = "******";public static void receivepop3Email() {String host = "";// change accordinglyString mailStoreType = "pop3";String popPort = "995";Store store = null;// 配置连接信息Properties properties = new Properties();properties.put("mail.store.protocol", mailStoreType);properties.put("mail.pop3.host", host);properties.put("mail.pop3.port", popPort);properties.put("mail.pop3.starttls.enable", "true");try {Session emailSession = Session.getDefaultInstance(properties);//打开调式模式,可看到邮件发送过程中各步骤的详细信息// emailSession.setDebug(true);store = emailSession.getStore("pop3s");store.connect(host, USER_NAME, PASSWORD);Folder emailFolder = store.getFolder("INBOX");emailFolder.open(Folder.READ_ONLY);Message[] messages = emailFolder.getMessages();for (Message msg:messages) {System.out.println(msg.getSubject());}emailFolder.close(true);store.close();} catch (NoSuchProviderException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();}finally {if(null != store){try {store.close();} catch (MessagingException e) {e.printStackTrace();}}}}IMAP接收String USER_NAME ="*****@";String PASSWORD = "******";public static void receiveimapEmail() {String host = "";// change accordinglyString mailStoreType = "imap";String popPort = "993";try {// 配置连接信息Properties properties = new Properties();properties.put("mail.store.protocol", mailStoreType);properties.put("mail.imap.host", host);properties.put("mail.imap.port", popPort);properties.put("mail.imap.starttls.enable", "true");Session emailSession = Session.getDefaultInstance(properties);// emailSession.setDebug(true);Store store = emailSession.getStore("imaps");store.connect(host, USER_NAME, PASSWORD);Folder emailFolder = store.getFolder("INBOX");emailFolder.open(Folder.READ_ONLY);Message[] messages = emailFolder.getMessages();for (Message msg:messages) {System.out.println(msg.getSubject());}emailFolder.close(true);store.close();} catch (NoSuchProviderException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();}}SMTP发送static String USER_NAME ="****@";static String PASSWORD = "****";public static boolean sendSMTPMail(String to, String text, String title) {String host = "";String mailStoreType = "smtp";String popPort = "587";final Properties props = new Properties();props.put("mail.smtp.auth", "true");props.put("mail.smtp.host", host);props.put("mail.store.protocol", mailStoreType);props.put( "mail.smtp.port", popPort );//开启SSLprops.put("mail.smtp.starttls.enable", "true");props.put("mail.smtp.socketFactory.port",popPort);props.put("mail.smtp.socketFactory.fallback","false");try {Session session = Session.getDefaultInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(USER_NAME, PASSWORD);//账号密码}});session.setDebug(true);// 创建邮件消息MimeMessage message = new MimeMessage(session);// 设置发件⼈InternetAddress form = new InternetAddress(USER_NAME);message.setFrom(form);// 设置收件⼈InternetAddress toAddress = new InternetAddress(to);message.setRecipient(Message.RecipientType.TO, toAddress);// 设置邮件标题message.setSubject(title);// 设置邮件的内容体message.setContent(text, "text/html;charset=UTF-8");// 发送邮件Transport.send(message);return true;} catch (Exception e) {e.printStackTrace();}return false;}插曲: SMTP发送邮件时,第⼀次发送可能会收到如下的报错:OutboundSpamException; Failed to process message due to a permanent exception with message WASCL UserAction verdict is not None 在⽹上查到这是邮箱⼚商的安全策略,出现此异常的同时⼚商会给你发送⼀封确认邮件,只要你登录邮箱并激活该邮件即可使⽤SMTP 发送邮件的功能,邮件内容⼤致如下:。

基于Javamail的邮件收发系统-开题报告

基于Javamail的邮件收发系统-开题报告
3.1.2其他功能需求
3.2性能需求
3.2.1系统安全性
3.2.2系统灵活性和可维护性
3.3数据库选择
3.4系统运行环境
4.系统实现
4.1系统环境配置
4.1.1所涉及的软件及补丁
4.1.2软件的安装
4.பைடு நூலகம்帐号申请模块
4.3用户登入认证模块
4.4邮件发送模块
4.4.1发送普通邮件
4.4.2发送带多附件邮件
(1)开发工具采用Java+JavaMail API。
(2)数据库采用SQL Server 2000。
实验方案:
(1)邮件服务器的工作原理。
(2)DNS服务器的工作原理。
(3)SMTP、POP3、MIME协议。
(4)设计并实现基于Javamail的邮件收发系统,要求系统具有邮件接收、发送等基本功能。
[9] Java program design。Cohoon, James P.,Davidson, Jack W。McGraw-Hill Higher Education, 2004。
[10] Thinking in Java。Eckel, Bruce。Prentice Hall, c2000。
[11] Learning Java。Niemeyer, Patrick.,Knudsen, Jonathan。O'Reilly, 2000。
邮件系统市场是个刚刚形成的市场,格局还有很大的变数。同时企业用户对邮件系统产品的各项性能不太熟悉,在对邮件系统的好坏没有很清晰的评判标准时,往往很注重系统提供商的成功案例,也就是系统提供商的业界背景。企业购买邮件系统主要是为了提高办公效率,所以力图控制成本。用户需要更标准的产品以减小整体拥有成本。产品整体化可为企业维护降低成本,但需要更容易定制化来满足用户个性化需求。另外,不同的ISP需要个性化的标志以区别同类产品,价格和产品性能同为企业用户购买时的重要参照。

Java实现发送邮件,图片,附件

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 服务器。

Java邮件收发SMTP和POP3

Java邮件收发SMTP和POP3

Java邮件收发SMTP和POP3Java邮件收发SMTP和POP3SMTP的连接和收发过程:a.建立TCP连接。

b.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令服务器端正希望以OK作为响应,表明准备接收。

c.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行d.协商结束,发送邮件,用命令DATA发送e.以.表示结束输入内容一起发送出去f.结束此次发送,用QUIT命令退出。

SMTP的基本命令集:HELO 向服务器标识用户身份MAIL 初始化邮件传输mail from:RCPT 标识单个的邮件接收人;常在MAIL命令后面可有多个rcpt to:DATA 在单个或多个RCPT命令后,表示所有的邮件接收人已标识,初始化数据传输,以.结束。

NOOP 无操作,服务器应响应OKRSET 重置会话,当前传输被取消QUIT 结束会话POP3简介:在POP3协议中有三种状态,认可状态,处理状态,和更新状态。

当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后最后重返认可状态。

POP3基本命令集:USER usernamePASS passwordSTAT 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数LIST 返回邮件数量和每个邮件的大小RETR [Msg#] 返回由参数标识的邮件的全部文本DELE [Msg#] 服务器将由参数标识的邮件标记为删除,由quit命令执行RSET 服务器将重置所有标记为删除的邮件,用于撤消DELE命令NOOP 服务器返回一个肯定的响应QUIT 更新class POP3Demo {private static String POP3Server = "";private static String USERNAME = "username";//实际应用中改成真实的用户名private static String PASSWORD = "password";//实际应用中改成真实的密码public static void main(String[] args) {int POP3Port = 110;Socket client = null;try {// 向POP3服务程序建立一个套接字连接。

javamaven项目实现发送邮件

javamaven项目实现发送邮件

javamaven项⽬实现发送邮件1,先导⼊⼀个jar包在pom.xml 中写⼊<!-- 邮件start --><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version></dependency><!-- 邮件end -->2,写⼀个邮件的类包括,发送内容,端⼝等public 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;private String iwallHost ;/*** 获得邮件会话属性*/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) {erName = 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;}public String getIwallHost() {return iwallHost;}public void setIwallHost(String iwallHost) {this.iwallHost = iwallHost;}}3,为了可配置性,可将上⾯的类的所需信息写⼊配置⽂件⾥<bean id = "mailInfo" class = "xxxxxxx.MailSenderInfo" ><property name="mailServerHost" value = ""></property> <property name="mailServerPort" value = "25"></property><property name="fromAddress" value = "xxxxxxx@xx.xxx"></property><property name="userName" value = "xxxxxxxx"></property><property name="password" value = "xxxxx"></property><property name="iwallHost" value = "http://localhost:8080/xxxxx"></property> </bean>4,写⼀个简单的发送邮件的类,包含发送text或者 html的⽅法public class SimpleMailSender {/*** 以⽂本格式发送邮件* @param mailInfo 待发送的邮件的信息*/public boolean sendTextMail(MailSenderInfo mailInfo) {// 判断是否需要⾝份认证MyMailAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();if (mailInfo.isValidate()) {// 如果需要⾝份认证,则创建⼀个密码验证器authenticator = new MyMailAuthenticator(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){// 判断是否需要⾝份认证MyMailAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();//如果需要⾝份认证,则创建⼀个密码验证器if (mailInfo.isValidate()) {authenticator = new MyMailAuthenticator(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;}}5,在类中,实现发送邮件,建议另起线程发送邮件/*** 发送邮件内部类**/class SendEmailThread implements Runnable {private MailSenderInfo mailInfo;public SendEmailThread(MailSenderInfo mailInfo) {this.mailInfo = mailInfo;}@Overridepublic void run() {try {if (this.mailInfo != null) {SimpleMailSender.sendHtmlMail(mailInfo);}} catch (Exception e) {e.printStackTrace();}}}/*** 发送邮件⽅法** @param account* @param code*/public void sendEmail(String account, String code) {WebApplicationContext ac = ContextLoader.getCurrentWebApplicationContext();// 获取当前服务IPMailSenderInfo mailInfo = (MailSenderInfo) ac.getBean("mailInfo");mailInfo.setValidate(Boolean.TRUE);mailInfo.setToAddress(account);mailInfo.setSubject("验证码邮件");mailInfo.setContent("<p>您好!</p><p>感谢您注册成为xxxxxx⽤户!</p><p>您的验证码是:" + code + "。

基于Javamail的邮件收发系统-任务书

基于Javamail的邮件收发系统-任务书

信息科学与工程学院09 届本科生毕业设计(论文)任务书学院信息科学与工程学院专业计算机科学与技术(师范)班级学号学生姓名指导教师一、论文题目基于Javamail的邮件收发系统二、内容和要求1.总体目标及性能(参数)要求(1)系统功能基本完善。

(2)系统具有良好的用户界面。

(3)系统具有较好的人机交互性、易于使用。

(4)系统可靠、稳定,具有一定的应用价值。

2.研究内容及拟采用的技术路线●研究内容:(1)邮件服务器的工作原理。

(2)DNS服务器的工作原理。

(3)SMTP、POP3、MIME协议。

(4)设计并实现基于Javamail的邮件收发系统,要求系统具有邮件接收、发送等基本功能。

●采用的技术路线:(1)开发工具采用Java+JavaMail API。

(2)数据库采用MySQL或SQL Server。

3.参考文献(10篇以上)[1] Java邮件开发详解。

张孝祥。

电子工业出版社,2007。

[2] Java高级程序设计。

王路群主编。

中国水利水电出版社, 2006 。

[3] Java课程设计。

黄明, 梁旭, 周绍斌编著。

电子工业出版社, 2006。

[4] Java开发与应用教程。

王吴迪, 赵枫朝等编著。

电子工业出版社, 2006。

[5] Java程序设计大学教程。

刘艺等编著。

机械工业出版社, 2006。

[6] Java数据库高级编程宝典。

陈天河编著。

电子工业出版社, 2005。

[7] Java程序设计与应用开发。

於东军等编著。

清华大学出版社, 2005。

[8] Java语言程序设计实训。

赵海廷主编。

武汉大学出版社, 2005。

[9] Java program design。

Cohoon, James P.,Davidson, Jack W。

McGraw-Hill Higher Education, 2004。

[10] Thinking in Java。

Eckel, Bruce。

Prentice Hall, c2000。

开发一个简单的电子邮件客户端:实现收发邮件功能

开发一个简单的电子邮件客户端:实现收发邮件功能

开发一个简单的电子邮件客户端:实现收发邮件功能电子邮件客户端是一种用于收发电子邮件的应用程序或软件工具。

它通常具有用户界面,在其上用户可以编写、发送、接收、管理和存档电子邮件。

这些客户端可以在电脑、手机、平板电脑等设备上安装和使用。

在本文中,我将为您介绍如何开发一个简单的电子邮件客户端,实现收发邮件的基本功能。

这个客户端将使用简体中文编写,并提供齐全的用户界面和用户体验。

1.设计用户界面:首先,我们需要为电子邮件客户端设计一个用户界面。

界面应该简洁易用,并提供以下主要功能:-邮箱列表:显示用户的收件箱、发件箱、草稿箱、已发送等邮件类别。

-邮件列表:显示选定邮件类别中的邮件列表,包括发件人、主题、日期等信息。

-邮件预览:展示选定邮件的详细信息,包括发件人、主题、内容等。

-邮件撰写:用户可以在此处编写新的邮件,包括收件人、主题、内容等。

-邮件发送:用户可以点击发送按钮将邮件发送给收件人。

-邮件接收:客户端将定期检查服务器上是否有新邮件,并更新收件箱。

-邮件管理:用户可以对邮件进行管理操作,如删除、移动到其他文件夹等。

2.连接到邮件服务器:在开发电子邮件客户端之前,我们需要连接到一个邮件服务器。

可以选择使用现有的邮件服务器,如Gmail、Yahoo、163等,或者自己开发一个新的邮件服务器。

连接到邮件服务器需要使用远程通信协议,如POP3、IMAP、SMTP等。

- POP3(Post Office Protocol 3)是一种常用的电子邮件接收协议,用于从远程服务器接收邮件。

- IMAP(Internet Message Access Protocol)是另一种电子邮件接收协议,与POP3类似,但具有更强大的功能,如可以在多个设备上同步邮件、管理邮件夹等。

- SMTP(Simple Mail Transfer Protocol)是一种电子邮件发送协议,用于将邮件从客户端发送到服务器。

我们可以根据需求选择合适的协议,并使用相应的库或API连接到邮件服务器。

JavaMail通过IMAP和POP3接收未读以及设置已读邮件

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. }。

基于Javamail的邮件收发系统-JAVA毕业设计论文

基于Javamail的邮件收发系统-JAVA毕业设计论文

毕业设计(论文)( 20 届)论文(设计)题目基于Javamail的邮件收发系统作者二级学院、专业班级指导教师(职称)论文字数论文完成时间20年月日基于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接收邮件功能的实现 (20)4.4.1 获取服务器信息 (20)4.4.2 建立通信连接 (20)4.4.3显示邮件 (20)4.5删除邮件功能的实现 (22)第五章结语 (23)参考文献 (24)致谢 (25)第一章绪论本文是一项基于JavaMail的邮件系统的综合性研究,使用Sun公司提供的JavaMail API实现电子邮件的发送、电子邮件的接收等等功能。

jakarta mail 案例

jakarta mail 案例

jakarta mail 案例Jakarta Mail是一个用于处理电子邮件的开源Java库,它提供了发送、接收和处理电子邮件的功能。

它是由Apache软件基金会的Jakarta项目开发和维护的。

首先,让我们从技术角度来看Jakarta Mail。

该库提供了一组用于创建、发送和接收电子邮件的API,这些API包括创建邮件会话、构建邮件消息、连接到邮件服务器以发送消息,以及从邮件服务器接收消息等功能。

它支持多种邮件协议,如SMTP、IMAP和POP3,使开发人员能够灵活地与不同类型的邮件服务器进行交互。

除了技术方面,让我们从实际应用的角度来看Jakarta Mail。

它可以被用于构建各种类型的邮件应用程序,包括电子邮件客户端、自动化邮件发送程序、邮件通知系统等。

开发人员可以利用Jakarta Mail的功能来实现电子邮件在他们的应用中的各种需求,无论是简单的文本邮件发送,还是复杂的邮件处理逻辑。

此外,让我们从社区和生态系统的角度来看Jakarta Mail。

作为Apache软件基金会的项目,Jakarta Mail拥有一个活跃的开发社区,这意味着它受到了广泛的关注和支持。

开发人员可以从社区获得帮助和支持,还可以参与到项目的开发和改进中。

此外,由于Jakarta Mail是开源的,因此它还能够与其他开源项目和工具进行集成,从而构建更加强大和灵活的解决方案。

综上所述,Jakarta Mail是一个功能强大、灵活多样,并且受到广泛关注和支持的开源Java邮件处理库,它在技术、应用和生态系统等方面都具有很高的价值和潜力。

希望这些信息能够帮助你更好地了解Jakarta Mail。

javamailsenderimpl 协议

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标准扩展,它提供了一种方便的方式来发送和接收电流信箱。

Java实现网易企业邮箱发送邮件

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

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 &lt; 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详解

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服务器进行通讯。

手机邮箱收发源代码

手机邮箱收发源代码
public MailClient() {
// TODO Auto-generated constructor stub
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
public void setFrom(String from) {
this.from = from; } private String emailAddreress() {
return emailAddress; }
public void setEmailAddress(String emailAddress) {
}
//下面定义了一些成员变量和成员方法 private String content; public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
import mand;
import mandListener;
import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form;
public SendForm getSendForm() {
return sendForm;
}
public void setSendForm(SendForm sendForm) {

javaMail发送邮件(图片,附件)

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 组成。

电子邮件发送具体过程

电子邮件发送具体过程

MailSSLSocketFactory mailSSLSocketFactory=new MailSSLSocketFactory();
mailSSLSocketFactory.setTrustAllHosts(true);
//信任所有主机
properties.setProperty("mail.smtp.ssl.enable", "true");
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.host", "");
//指定发送主机为qq邮件服务器
//QQ邮箱需要设置SSL加密
MailSSLSocketFactory mailSSLSocketFactory=new MailSSLSocketFactory();
//创建一个邮件回话,并给出用户名和密码,供系统登录qq服务器
Session session=Session.getDefaultInstance(properties,new Authenticator() {
public PasswordAuthentication getPasswordAuthentication(){
properties.put("mail.smtp.ssl.socketFactory",mailSSLSocketFactory);
3、 链 接
mailSSLSocketFactory.setTrustAllHosts(true);
//信任所有主机34;mail.smtp.ssl.enable", "true");
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import .Socket;import .SocketException;import .UnknownHostException;import java.util.StringTokenizer;public class SMTPClient {private boolean debug = true;BASE64Encoder encode = new BASE64Encoder();// 自定义BASE64Encoder工具类用于加密字符串public static void main(String[] args) throws UnknownHostException,IOException {MailMessage message = new MailMessage();message.setFrom("sainvyang@");// 发件人message.setTo("sainvyang@");// 多个收件人地址间用逗号隔开String server = "";// SMTP邮件服务器message.setSubject("JA V A MAIL测试");// 邮件主题message.setContent("你好!这里是系统发出的JA V A MAIL测试,请勿回复。

");// 邮件内容message.setDataFrom("Sender");// 发件人,在邮件的发件人栏目中显示message.setDataTo("Receiver");// 收件人,在邮件的收件人栏目中显示message.setUser("sainvyang@");// 登陆的邮箱账号message.setPassword("18657601");// 登陆邮箱的密码,建议自己保密好,公开传播会泄密SMTPClient smtp = new SMTPClient(server, 25);boolean flag;flag = smtp.sendMail(message, server);if (flag) { System.out.println("邮件发送成功!");} else { System.out.println("邮件发送失败!");}}private Socket socket;public SMTPClient(String server, int port) throws UnknownHostException,IOException {try {socket = new Socket(server, 25);} catch (SocketException e) {System.out.println(e.getMessage());} catch (Exception e) {e.printStackTrace();} finally {System.out.println("已经建立连接!");}}// 注册到邮件服务器public void helo(String server, BufferedReader in, BufferedWriter out) throws IOException {int result;result = getResult(in);// 连接上邮件服务后,服务器给出220应答if (result != 220) {throw new IOException("连接服务器失败");}result = sendServer("HELO " + server, in, out);// HELO命令成功后返回250if (result != 250) {throw new IOException("注册邮件服务器失败!");}}private int sendServer(String str, BufferedReader in, BufferedWriter out) throws IOException {out.write(str);out.newLine();out.flush();if (debug) {System.out.println("已发送命令:" + str);}return getResult(in);}public int getResult(BufferedReader in) { String line = "";try {line = in.readLine();if (debug) {System.out.println("服务器返回状态:" + line);}} catch (Exception e) {e.printStackTrace();}// 从服务器返回消息中读出状态码,将其转换成整数返回StringTokenizer st = new StringTokenizer(line, " ");return Integer.parseInt(st.nextToken());}public void authLogin(MailMessage message, BufferedReader in,BufferedWriter out) throws IOException {int result;result = sendServer("AUTH LOGIN", in, out);if (result != 334) {throw new IOException("用户验证失败!");}result = sendServer(encode.encode(message.getUser().getBytes()), in, out);if (result != 334) {throw new IOException("错误!");}result = sendServer(encode.encode(message.getPassword().getBytes()), in, out);if (result != 235) {throw new IOException("验证失败!");}}// 开始发送消息,邮件源地址public void mailFrom(String source, BufferedReader in, BufferedWriter out) throws IOException {int result;result = sendServer("MAIL FROM:<" + source + ">", in, out);if (result != 250) {throw new IOException("指定源地址错误");}}// 设置邮件收件人。

多邮件发送用","隔开public void rcpt(String touchman, BufferedReader in, BufferedWriter out) throws IOException {//String[] mailList = touchman.split(",");/*if (mailList.length > 1) {for (String touch : mailList) {connectionServer(touch,in,out);}}else */connectionServer(touchman,in,out); }private void connectionServer(String touch, BufferedReader in, BufferedWriter out)throws IOException {int result;result = sendServer("RCPT TO:<" + touch + ">", in, out); if (result != 250) { throw new IOException("指定目的地址错误!");}}// 邮件体public void data(String from, String to, String subject, String content,BufferedReader in, BufferedWriter out) throws IOException {int result;result = sendServer("DA TA", in, out);// 输入DA TA回车后,若收到354应答后,继续输入邮件内容if (result != 354) {throw new IOException("不能发送数据");}out.write("From: " + from);out.newLine();out.write("To: " + to);out.newLine();out.write("Subject: " + subject);out.newLine();out.newLine();out.write(content);out.newLine();// 句号加回车结束邮件内容输入result = sendServer(".", in, out);System.out.println(result);if (result != 250) {throw new IOException("发送数据错误");}}// 退出public void quit(BufferedReader in, BufferedWriter out) throws IOException { int result;result = sendServer("QUIT", in, out);if (result != 221) {throw new IOException("未能正确退出");}}// 发送邮件主程序public boolean sendMail(MailMessage message, String server) {try {BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));helo(server, in, out);// HELO命令authLogin(message, in, out);// AUTH LOGIN命令mailFrom(message.getFrom(), in, out);// MAIL FROMrcpt(message.getTo(), in, out);// RCPTdata(message.getDataFrom(), message.getDataTo(), message.getSubject(), message.getContent(), in, out);// DA TAquit(in, out);// QUIT} catch (Exception e) {e.printStackTrace();return false;}return true;}}/*** BASE64Encoder加密类*///package mail;/*** @author Daniel Cheng**/public class BASE64Encoder {private static char[] codec_table = { 'A', 'B', 'C', 'D', 'E', 'F', 'G','H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T','U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g','h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't','u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6','7', '8', '9', '+', '/' };public BASE64Encoder() {}public String encode(byte[] a) {int totalBits = a.length * 8;int nn = totalBits % 6;int curPos = 0;// process bitsStringBuffer toReturn = new StringBuffer();while (curPos < totalBits) {int bytePos = curPos / 8;switch (curPos % 8) {case 0:toReturn.append(codec_table[(a[bytePos] & 0xfc) >> 2]);break;case 2:toReturn.append(codec_table[(a[bytePos] & 0x3f)]);break;case 4:if (bytePos == a.length - 1) {toReturn.append(codec_table[((a[bytePos] & 0x0f) << 2) & 0x3f]);} else {int pos = (((a[bytePos] & 0x0f) << 2) | ((a[bytePos + 1] & 0xc0) >> 6)) & 0x3f;toReturn.append(codec_table[pos]);}break;case 6:if (bytePos == a.length - 1) {toReturn.append(codec_table[((a[bytePos] & 0x03) << 4) & 0x3f]);} else {int pos = (((a[bytePos] & 0x03) << 4) | ((a[bytePos + 1] & 0xf0) >> 4)) & 0x3f;toReturn.append(codec_table[pos]);}break;default://never hanppenbreak;}curPos+=6;}if(nn==2){toReturn.append("==");}else if(nn==4){toReturn.append("=");}return toReturn.toString(); }}/*** 邮件实体POJO类*///package mail;/*** @author Daniel Cheng**/public class MailMessage {private String from;private String to;private String subject;private String content;private String dataFrom;private String dataTo;private String user;private String password;/****/public MailMessage() {super();// TODO Auto-generated constructor stub}/*** @param from* @param to* @param subject* @param content* @param dataFrom* @param dataTo* @param user* @param password*/public MailMessage(String from, String to, String subject, String content, String dataFrom, String dataTo, String user, String password) { super();this.from = from;this.to = to;this.subject = subject;this.content = content;this.dataFrom = dataFrom;this.dataTo = dataTo;er = user;this.password = password;}public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}public String getTo() {return to;}public void setTo(String to) {this.to = to;}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 getDataFrom() {return dataFrom;}public void setDataFrom(String dataFrom) { this.dataFrom = dataFrom;}public String getDataTo() {return dataTo;}public void setDataTo(String dataTo) {this.dataTo = dataTo;}public String getUser() {return user;}public void setUser(String user) {er = user;}public String getPassword() {return password;}public void setPassword(String password) { this.password = password;}}。

相关文档
最新文档