Java开源WebMail
- 格式:doc
- 大小:211.00 KB
- 文档页数:5
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,新浪邮箱服务器) 加油加油。
--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邮箱中注册⼀个帐号。
imap 协议 java代码为你提供一个用 Java 编写的简单的 IMAP 客户端示例,用于连接并读取 Gmail 邮箱中的邮件:```javaimport java.io.UnsupportedEncodingException;import java.util.Date;import java.util.Properties;import javax.mail.Authenticator;import javax.mail.FetchProfile;import javax.mail.Folder;import javax.mail.Message;import javax.mail.Message.RecipientType;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Store;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeUtility;public class EmailUtil {private String username = null;private String password = null;// 传入自己的邮箱用户名和密码public EmailUtil(String username, String password) {ername = username;this.password = password;}// 创建连接会话public Session createSession(Properties props) {Session session = Session.getInstance(props, new Authenticator() { // 返回用户名密码认证@Overridepublic PasswordAuthentication getPasswordAuthentication() {PasswordAuthentication pa = new PasswordAuthentication(username, password);return pa;}});return session;}// 发送邮件(需设置 SMTP)public void sendMail(Properties props, SendEmailMessage sem) throws Exception {Session session = createSession(props);// 消息Message msg = new MimeMessage(session);msg.setFrom(InternetAddress.parse(MimeUtility.decodeText(sem.getFrom())));msg.setRecipients(RecipientType.TO,InternetAddress.parse(sem.getRecipient()));msg.setSubject(sem.getSubject());msg.setText(sem.getText());msg.setSentDate(new Date());// 发送消息Transport.send(msg);}// 接收邮件(需设置 POP3 或 SAMP)public void receiveMail(Properties props, String protocol) throwsException {Session session = createSession(props);Store store = session.getStore(protocol);store.connect();// 连接Folder inbox = store.getFolder("INBOX");// 进入根目录inbox.open(Folder.READ_WRITE);// 只读方式FetchProfile profile = new FetchProfile();profile.add(FetchProfile.Item.ENVELOPE);// 获取信封Message[] msgs = inbox.getMessages();// 得到所有邮件inbox.fetch(msgs, profile);// 预获取信息// 打印for (int i = 0; i < msgs.length; i++) {System.out.println("发送时间:" + msgs[i].getSentDate());System.out.println("发送人:" + decodeText(msgs[i].getFrom()(0).toString()));System.out.println("大小:" + msgs[i].getSize());System.out.println("标题:" + msgs[i].getSubject());}}private String decodeText(String text) {try {return MimeUtility.decodeText(text);} catch (UnsupportedEncodingException e) {e.printStackTrace();return null;}}}```在上述代码中,首先定义了一个`EmailUtil`类,在类中创建`createSession`方法,用于创建邮件会话。
JAVA实现邮件发送Java可以通过JavaMail库实现邮件发送。
JavaMail是一个开源API,提供了发送、接收和管理电子邮件的功能。
下面是一个简单的Java代码示例,实现了发送邮件的功能:```javaimport java.util.Properties;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;public class EmailSenderpublic static void main(String[] args)//邮件发送者信息String senderPassword = "your_password";//邮件接收者信息//邮件服务器配置//邮件内容String subject = "测试邮件";String body = "这是一个Java邮件发送示例。
";//设置邮件属性Properties props = new Properties(;props.put("mail.smtp.host", smtpHost);props.put("mail.smtp.auth", "true");props.put("mail.smtp.port", "465");props.put("mail.smtp.socketFactory.port", "465");//创建认证器Authenticator authenticator = new Authenticatoprotected PasswordAuthentication getPasswordAuthenticatio return new PasswordAuthentication(senderEmail, senderPassword);}};//创建会话Session session = Session.getDefaultInstance(props, authenticator);try//创建邮件消息MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(senderEmail));message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipientEmail));message.setSubject(subject);message.setText(body);//发送邮件Transport.send(message);System.out.println("邮件发送成功!");} catch (MessagingException e)e.printStackTrace(;}}```以上是一个基本的邮件发送示例。
1.1通过代码实例跟我学JavaMail技术及应用实例(第1部分)1、使用JSP开发WebMail系统(1)WebMail概述电子邮件(E-mail)是Internet上使用最广泛的服务之一,传统的Email应用模式基于C/S结构,即用户使用客户端的邮件收发工具(如Outlook、Foxmail等)与提供邮件服务的服务器(如、、)通信,在使用客户端邮件工具之前,用户要进行一些必要的设置,如指定邮件服务器的主机地址和通信端口等,这些工作对刚开始上网的用户会有一定的困难。
如果把E-mail和Web结合在一起,即通过Web编程和适当的系统设置,使用户仅仅以访问Web的方式就可以得到和使用完整的邮件服务,这样将极大地方便上网用户,这种系统称为WebMail。
WebMail是目前Internet上最受欢迎的服务之一,也是很多网站必备功能之一。
另外WebMail同样也适用于企业或校园网的应用。
(2)实现WebMail的主要功能该系统提供了获取、阅读、书写、转发、回复、打印、删除及用户管理的功能。
考虑到系统的跨平台性,采用Java及相关技术产品为开发工具,特别是采用JSP作为服务程序,这样对客户端也没有其它要求,同时系统的性能在高负荷下得到进一步提高。
整个WebMail系统全部采用纯Java代码,服务器端每响应一个服务请求启动一个线程,而不像CGI那样启动一个进程。
这样能够节省系统资源,提高系统性能。
2、什么是JavaMail(1)Web方式的邮件电子邮件(E-mail)是Internet上使用最广泛的服务之一,传统的Email应用模式基于C/S结构,即用户使用客户端的邮件收发工具(如Outlook、Foxmail等)与提供邮件服务的服务器(如、、)通信,在使用客户端邮件工具之前,用户要进行一些必要的设置,如指定邮件服务器的主机地址和通信端口等,这些工作对刚开始上网的用户会有一定的困难,如果把E-mail和Web结合在一起,即通过Web编程和适当的系统设置,使用户仅仅以访问Web的方式就可以得到和使用完整的邮件服务,这样将极大地方便上网用户,这种系统称为WebMail。
基于java的邮件服务器以及webmail的搭建⼀、准备⼯作局域⽹中有两台电脑都⽤Windows XPSP2系统+JDK1.6.0_02,⼀台PCA,⼀台PCB,PCA当服务器,PCB当客户端测试⽤,当然PCA也可同时充当客户端。
Apache James(Java Apache Mail EnterpriseServer)是Apache组织的⼦项⽬之⼀,完全采⽤纯Java技术开发,实现了SMTP、POP3与NNTP等多种邮件相关协议。
James也是⼀个邮件应⽤平台,可以通过Mailet扩充其功能,如Mail2SMS、Mail2Fax等。
James提供了⽐较完善的配置⽅案,尤其是关于邮件内容存储和⽤户信息存储部分,可以选择在⽂件、数据库或其他介质中保存。
James性能稳定、可配置性强,还是开源项⽬,所有源代码不存在版权问题,因此,James在项⽬中的应⽤⽇益⼴泛,现在常⽤版本为2.1,但最新版本2.3已经推出,在本⽂中,我们将仍以james-2.3.1作为介绍蓝本。
⼆、安装与配置James的安装配置过程⾮常简单。
第⼀步:安装JDK并配置JAVA_HOME请使⽤JDK1.3以上版本(在此使⽤jdk1.6.0_02),假设安装在D:installedtoolsJavajdk1.6.0_02,配置java_home在此就不多说了。
第⼆步:下载James,并解压可以到Apache⽹站上下载最新版本james-2.3.1,下载将得到⼀个压缩⽂件james-2.3.1.zip,⼤⼩为4.45M,将此包解压到D:installed toolsjames-2.3.1.第三步:需要使⽤的端⼝:Remote Manager Service started plain:4555POP3 Service started plain:110SMTP Service started plain:25NNTP Service started plain:119检查端⼝4555,110,25,119 是否被占⽤:netstat -an|grep 25netstat -an|grep 110如果被占⽤,linux下⼀般是sendmail程序占⽤,咨询别的应⽤是否使⽤了sendmail,如果没有⽤户在使⽤sendmail就可以停⽌sendmail:ps -eaf|grep sendmailservice sendmail stop直接双击运⾏D:installedtoolsjames-2.3.1 in un.bat,若启动⽆误,将提⽰如下C:Documents andSettingsAdministrator>runUsing PHOENIX_HOME: E:ProgramFilesjames-2.3.1Using PHOENIX_TMPDIR: E:Program Filesjames-2.3.1 empUsingJAVA_HOME:E:Program FilesJavajdk1.6.0_02Phoenix 4.2James Mail Server 2.3.1Remote Manager Service started plain:4555POP3 Service started plain:110SMTP Service started plain:25NNTP Service started plain:119FetchMail Disabled也有可能启动不了,并报JAVA_HOME找不到,如果没有配置JAVA_HOME需要指定JAVA_HOME,或者另⼀⽐较简单的⽅法是在D:installedtoolsjames-2.3.1 in un.bat中指定JAVA_HOME,修改后的run.bat如下:……remrem Determine if JAVA_HOME is set and if so then use itremset JAVA_HOME= D:installed toolsJavajdk1.6.0_02if not "%JAVA_HOME%"=="" goto found_java……修改完后再运⾏run.bat,应该就可以正常启动了,如果再出现什么问题就再去官⽅查找解决了。
JAVAMAIL发送邮件通过javaMail 发送电⼦邮件。
多附件。
多收件⼈。
源代码其中JAVAMAIL发送电⼦邮件需要的JAR包最基本的mail.jar,activation.jar 有两个⽂件发送邮件的主⽂件import java.io.UnsupportedEncodingException;import /doc/7bc1737201f69e31433294cf.html ng.reflect.Array; import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Map;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import BaseClass.ApplicationConfiguration;/*** 类MailSender.java的实现描述:邮件发送** @author chenLL 2011-9-14 下午03:06:49*/public class MailSender {* 以⽂本格式发送邮件⾃⾏设置服务器有户名* MailSenderInfo mailInfo = new MailSenderInfo();* mailInfo.setMailServerHost(SMTP服务器);* mailInfo.setMailServerPort(端⼝号);25* mailInfo.setValidate(true);是否加密* mailInfo.setUserName(登录名);* mailInfo.setPassword(SMTP邮箱密码);//您的邮箱密码* mailInfo.setFromAddress(发件⼈邮箱);* mailInfo.setToAddress(new String[] { "收件⼈1", "收件⼈2"..... });* mailInfo.setSubject("主题");(可以配置)* mailInfo.setContent("内容");* @return true 发送成功false 发送失败*/public static boolean sendTextMailInfo(MailSenderInfo mailInfo) {// 判断是否需要⾝份认证MyAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();if (mailInfo.isValidate()) {//判断是否需要⾝份验证// 如果需要⾝份认证,则创建⼀个密码验证器authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());}// 根据邮件会话属性和密码验证器构造⼀个发送邮件的sessionSession sendMailSession = Session.getDefaultInstance(pro, authenticator);try {// 根据session创建⼀个邮件消息Message mailMessage = new MimeMessage(sendMailSession);// 创建邮件发送者地址Address from = new InternetAddress(mailInfo.getFromAddress(), mailInfo.getPersonName()); // 设置邮件消息的发送者mailMessage.setFrom(from);// 创建邮件的接收者地址,并设置到邮件消息中// Address to = new InternetAddress(mailInfo.getToAddress());//mailMessage.setRecipient(Message.RecipientType.TO,to);//创建邮件的接收地址(数组)String[] to = mailInfo.getToAddress();for (int i = 0; i < to.length; i++) {// System.out.println("发送到:" + to[i]);sendTo[i] = new InternetAddress(to[i]);}mailMessage.setRecipients(javax.mail.internet.MimeMessage.RecipientType.TO, sendTo); // 设置邮件消息的主题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();} catch (UnsupportedEncodingException ex) {ex.printStackTrace();}return false;}/*** 以HTML格式发送给多⼈邮件(可带多个附件) ⾃⾏设置服务器有户名** @param mailInfo 待发送的邮件信息* MailSenderInfo mailInfo = new MailSenderInfo();* mailInfo.setMailServerHost(SMTP服务器);* mailInfo.setMailServerPort(端⼝号);25* mailInfo.setValidate(true);是否加密* mailInfo.setUserName(登录名);* mailInfo.setPassword(SMTP邮箱密码);//您的邮箱密码* mailInfo.setFromAddress(发件⼈邮箱);* mailInfo.setToAddress(new String[] { "收件⼈1", "收件⼈2"..... });* mailInfo.setSubject("主题");(可以配置)* mailInfo.setContent("HTML的内容");* @return true 发送成功false 发送失败*/public static boolean sendHtmlMailInfo(MailSenderInfo mailInfo) {// 判断是否需要⾝份认证MyAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();// 如果需要⾝份认证,则创建⼀个密码验证器if (mailInfo.isValidate()) {//判断是否需要⾝份验证authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());//authenticator = new MyAuthenticator(MAIL_USERNAME, MAIL_PASSWORD);}// 根据邮件会话属性和密码验证器构造⼀个发送邮件的sessionSession sendMailSession = Session.getDefaultInstance(pro, authenticator);try {// 根据session创建⼀个邮件消息Message mailMessage = new MimeMessage(sendMailSession);// 创建邮件发送者地址Address from = new InternetAddress(mailInfo.getFromAddress(), mailInfo.getPersonName()); // 设置邮件消息的发送者mailMessage.setFrom(from);/*// 创建邮件的接收者地址,并设置到邮件消息中----此可发送给⼀⼈Address to = new InternetAddress(mailInfo.getToAddress());// Message.RecipientType.TO属性表⽰接收者的类型为TOmailMessage.setRecipient(Message.RecipientType.TO,to); *///创建邮件的接收地址(数组)String[] to = mailInfo.getToAddress();InternetAddress[] sendTo = new InternetAddress[to.length];for (int i = 0; i < to.length; i++) {// System.out.println("发送到:" + to[i]);sendTo[i] = new InternetAddress(to[i]);}mailMessage.setRecipients(javax.mail.internet.MimeMessage.RecipientType.TO, sendTo);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);if (mailInfo.getAttachFileNames().length > 0) {for (int i = 0; i < mailInfo.getAttachFileNames().length; i++) {if (!mailInfo.getAttachFileNames()[i].equals("")) {// 建⽴第⼆部分:附件html = new MimeBodyPart();// 获得附件DataSource source = new FileDataSource(mailInfo.getAttachFileNames()[i]); //设置附件的数据处理器html.setDataHandler(new DataHandler(source));// 设置附件⽂件名html.setFileName(mailInfo.getAttachFileNames()[i]);// 加⼊第⼆部分mainPart.addBodyPart(html);}}}// 发送邮件Transport.send(mailMessage);return true;} catch (MessagingException ex) {ex.printStackTrace();} catch (UnsupportedEncodingException ex) {}return false;}/*** 检验对象是否为空,String 中只有空格在对象中也算空.** @param object* @return 为空返回true,否则false.*/private static boolean isEmpty(Object object) {if (null == object) return true;else if (object instanceof String) return ("".equals(object.toString().trim()) || "null".equalsIgnoreCase(object.toString().trim())); else if (object instanceof ArrayList) return ((List) object).size() == 0;else if (object.getClass().isArray()) return Array.getLength(object) == 0;else if (object instanceof Map) return ((Map) object).size() == 0;else if (object instanceof Iterable) return ((Iterable) object).iterator().hasNext();else if (Number.class.isAssignableFrom(object.getClass())) return false;else if (Date.class.isAssignableFrom(object.getClass())) return false;else return false;}// public static void main(String[] args) {// //这个类主要是设置邮件// MailSenderInfo mailInfo = new MailSenderInfo();// mailInfo.setMailServerHost(邮件SMTP服务器);// mailInfo.setMailServerPort("25");// mailInfo.setValidate(true);// mailInfo.setUserName(username);//您的邮箱登录名// mailInfo.setPassword(password);//您的邮箱密码// mailInfo.setFromAddress(发件⼈邮箱);// mailInfo.set PersonName(发件⼈名称);// mailInfo.setToAddress(new String[] { "收件⼈1", "收件⼈2" });// mailInfo.setAttachFileNames(new String[] { "F:\\java\\hello.txt", "F:\\java\\Hello_Java.txt" });// mailInfo.setSubject("主题");// mailInfo.setContent("内容");// MailSender.sendTextMailInfo(mailInfo);//发送⽂体格式// // MailSender. sendHtmlMailInfo (mailInfo);//发送html格式// }发送邮件的基本配置import java.util.Properties;/*** 类MailSenderInfo.java的实现描述:发送邮件需要使⽤的基本信息配置** @author chenLL 2011-9-14 下午03:15:57*/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 personName;/*** 获得邮件会话属性*/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;}/*** 得到邮件服务器** @return得到邮件服务器*/public String getMailServerHost() {return mailServerHost;}/*** 赋值邮件服务器*/public void setMailServerHost(String mailServerHost) { this.mailServerHost = mailServerHost; }/*** 邮件服务器端⼝** @return邮件服务器端⼝*/public String getMailServerPort() {return mailServerPort;}/*** 邮件服务器端⼝** @param mailServerPort* 邮件服务器端⼝*/public void setMailServerPort(String mailServerPort) {}/*** 是否验证服务器** @return true 验证服务器 false 不验证服务器*/public boolean isValidate() {return validate;}/*** 设置是否验证服务器** @param validate true|false*/public void setValidate(boolean validate) {this.validate = validate;}/*** 所有的附件** @return得到所有的附件*/public String[] getAttachFileNames() {return attachFileNames;}/*** 附件添加** @param fileNames 指定路径然后添加附件*/public void setAttachFileNames(String[] fileNames) { this.attachFileNames = fileNames; }/*** 得到发送地址* @return发送地址*/public String getFromAddress() {return fromAddress;}/*** 设置发送地址** @param fromAddress 发送地址*/public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; }/*** 服务器验证密码** @return服务器验证密码*/public String getPassword() {return password;}/*** 设置验证密码** @param password 验证密码*/public void setPassword(String password) { this.password = password;}/*** 服务器验证⽤户名** @return服务器验证⽤户名*/public String getUserName() {return userName;/*** 服务器验证⽤户名** @param userName服务器验证⽤户名*/public void setUserName(String userName) { /doc/7bc1737201f69e31433294cf.html erName = userName;}/*** 得到邮件主题** @return得到邮件主题*/public String getSubject() {return subject;}/*** 设置邮件主题** @param subject 邮件主题*/public void setSubject(String subject) { this.subject = subject;}/*** 得到邮件内容** @return得到邮件内容*/public String getContent() {return content;}/*** 邮件内容** @param textContent 设置邮件内容*/public void setContent(String textContent) { this.content = textContent; }/*** 发送⼈地址** @return发送⼈地址*/public String[] getToAddress() {return toAddress;}/*** 发送地址设置** @param toAddress 字符串数组发送⼈地址*/public void setToAddress(String[] toAddress) {this.toAddress = toAddress;}/*** 发送邮件显⽰的发送⼈名称** @param personName 发送⼈名称*/public void setPersonName(String personName) {this.personName = personName;}/*** 发送邮件显⽰的发送⼈名称** @return发送⼈名称*/public String getPersonName() {return this.personName;}}可以直接使⽤。
Java 发送使用Java应用程序发送E-mail十分简单,但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) 。
•您可以从Java 下载最新版本的JavaMail,翻开网页右侧有个Downloads,点击它下载。
•您可以从Java 下载最新版本的JAF〔版本1.1.1〕。
你也可以使用本站提供的下载:•JavaMail mail.jar 1.4.5••JAF〔版本1.1.1〕activation.jar•下载并解压缩这些文件,在新创立的顶层目录中,您会发现这两个应用程序的一些jar 文件。
您需要把mail.jar和activation.jar文件添加到您的CLASSPATH 中。
如果你使用第三方效劳器如QQ的SMTP效劳器,可查看文章底部用户认证完整的实例。
发送一封简单的E-mail下面是一个发送简单E-mail的例子。
假设你的localhost已经连接到网络。
// 收件人电子String to = "abcdgmail.";// 发件人电子String from = "webgmail.";// 指定发送的主机为localhostString host = "localhost";// 获取系统属性Properties properties = System.getProperties();// 设置效劳器properties.setProperty("mail.smtp.host", host);// 获取默认session对象Session session = Session.getDefaultInstance(properties);try{// 创立默认的MimeMessage 对象MimeMessage message = new MimeMessage(session);// Set From: 头部头字段message.setFrom(new InternetAddress(from));// Set To: 头部头字段message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));// Set Subject: 头部头字段message.setSubject("This is the Subject Line!");// 设置消息体message.setText("This is actual message");// 发送消息Transport.send(message);System.out.println("Sent message successfully....");}catch (MessagingException mex) {mex.printStackTrace();}}}编译并运行这个程序来发送一封简单的E-mail:如果你想发送一封给多个收件人,那么使用下面的方法来指定多个收件人ID:下面是对于参数的描述:•type:要被设置为TO, CC 或者BCC. 这里CC 代表抄送、BCC 代表秘密抄送y. 举例:Message.RecipientType.TO•addresses:这是email ID的数组。
javamail发送邮件的简单实例今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题。
为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用。
呵呵以下三段代码是我的全部代码,朋友们如果想用,直接复制即可。
第一个类:MailSenderInfo.javapackage com.util.mail;/** *//*** 发送邮件需要使用的基本信息*author by wangfun 小说520*/import java.util.Properties;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;/** *//*** 获得邮件会话属性*/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;}}第二个类:SimpleMailSender.javapackage com.util.mail;import java.util.Date;import java.util.Properties;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;/** *//*** 简单邮件(不带附件的邮件)发送器 BT下载*/public class SimpleMailSender{/** *//*** 以文本格式发送邮件* @param mailInfo 待发送的邮件的信息*/public boolean sendTextMail(MailSenderInfo mailInfo) { // 判断是否需要身份认证MyAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();if (mailInfo.isValidate()) {// 如果需要身份认证,则创建一个密码验证器authenticator = new MyAuthenticator(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){// 判断是否需要身份认证MyAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();//如果需要身份认证,则创建一个密码验证器if (mailInfo.isValidate()) {authenticator = new MyAuthenticator(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;}}第三个类:MyAuthenticator.javapackage com.util.mail;import javax.mail.*;public class MyAuthenticator extends Authenticator{String userName=null;String password=null;public MyAuthenticator(){}public MyAuthenticator(String username, String password) {erName = username;this.password = password;}protected PasswordAuthentication getPasswordAuthentication(){return new PasswordAuthentication(userName, password);}}下面给出使用上面三个类的代码:public static void main(String[] args){//这个类主要是设置邮件MailSenderInfo mailInfo = new MailSenderInfo();mailInfo.setMailServerHost("");mailInfo.setMailServerPort("25");mailInfo.setValidate(true);mailInfo.setUserName("han2000lei@");mailInfo.setPassword("**********");//您的邮箱密码mailInfo.setFromAddress("han2000lei@");mailInfo.setToAddress("han2000lei@");mailInfo.setSubject("设置邮箱标题如 中国桂花网");mailInfo.setContent("设置邮箱内容如 中国桂花网是中国最大桂花网站==");//这个类主要来发送邮件SimpleMailSender sms = new SimpleMailSender();sms.sendTextMail(mailInfo);//发送文体格式sms.sendHtmlMail(mailInfo);//发送html格式}最后,给出朋友们几个注意的地方:1、使用此代码你可以完成你的javamail的邮件发送功能。
Javamail使用代码整理package com.hengrun.mail;import java.io.*;import java.security.Security;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Properties;import javax.mail.*;import javax.mail.internet.*;import sun.misc.BASE64Decoder;public class MailReceive {public MailReceive(){}private Folder inbox = null;private String SSL_FACTORY = ".ssl.SSLSocketFactory";//获取所有邮件public String getMails(int page,String username,String pass){int pageNum = 10;Security.addProvider(new .ssl.internal.ssl.Provider());Properties props = System.getProperties();props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);props.setProperty("mail.imap.socketFactory.fallback", "false");props.setProperty("mail.store.protocol", "imap");props.setProperty("mail.imap.host", "");props.setProperty("mail.imap.port", "993");props.setProperty("mail.imap.socketFactory.port", "993");Session session = Session.getDefaultInstance(props,null);URLName urln = new URLName("imap","",993,null, username, pass);Store store = null;String msg = "";try {store = session.getStore(urln);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);//计算页数int all = inbox.getMessageCount();int pages = all/pageNum;if(all%pageNum>0){pages++;}int begin = all-((page-1)*pageNum);for (int i = begin-1; i > (begin-pageNum)&&i>=0; i--) {//邮件发送者String from = decodeText(messages[i].getFrom()[0].toString());msg += messages[i].getMessageNumber()+"&";InternetAddress ia = new InternetAddress(from);msg+=ia.getPersonal()+"&";msg+=ia.getAddress()+"&";//邮件标题msg+=messages[i].getSubject()+"&";//邮件大小msg+=messages[i].getSize()+"&";//邮件发送时间SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");msg+=format.format(messages[i].getSentDate())+";";//判断是否由附件// if(messages[i].isMimeType("multipart/*")){// Multipart multipart = (Multipart)messages[i].getContent();// int bodyCounts = multipart.getCount();// for(int j = 0; j < bodyCounts; j++) {// BodyPart bodypart = multipart.getBodyPart(j);// if(bodypart.getFileName() != null){// String filename = bodypart.getFileName();// if(filename.startsWith("=?")){// filename = MimeUtility.decodeText(filename);// }// msg+=filename+"<br/>";// }// }// }}} catch (MessagingException | IOException e) {// TODO Auto-generated catch blockmsg = "0";} finally{try {inbox.close(false);store.close();} catch (MessagingException e) {// TODO Auto-generated catch block//e.printStackTrace();}finally{return msg;}}}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"));}return text;}//附件下载到服务器public void getAtth(int msgnum,int bodynum,String filename,String mailpath) throws MessagingException, IOException{ Message message = inbox.getMessage(msgnum);Multipart multipart = (Multipart)message.getContent();BodyPart bodypart = multipart.getBodyPart(bodynum);InputStream input = bodypart.getInputStream();byte[] buffer = new byte[input.available()];input.read(buffer);input.close();File file = new File("D:\\App\\MailFile\\"+mailpath);if(!file.isDirectory()&&!file.exists()){file.mkdir();}FileOutputStream fos = new FileOutputStream(filename);fos.write(buffer);fos.close();}//获得单个邮件信息public String getMail(int id,final String username,final String pass) throws MessagingException, IOException{ Security.addProvider(new .ssl.internal.ssl.Provider());Properties props = System.getProperties();props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);props.setProperty("mail.imap.socketFactory.fallback", "false");props.setProperty("mail.store.protocol", "imap");props.setProperty("mail.imap.host", "");props.setProperty("mail.imap.port", "993");props.setProperty("mail.imap.socketFactory.port", "993");Session session = Session.getDefaultInstance(props,null);URLName urln = new URLName("imap","",993,null,username, pass);Store store = session.getStore(urln);store.connect();inbox = store.getFolder("INBOX");inbox.open(Folder.READ_ONLY);FetchProfile profile = new FetchProfile();profile.add(FetchProfile.Item.ENVELOPE);Message message = inbox.getMessage(id);String msg = "";msg+=message.getMessageNumber()+"&#@";msg+=message.getSubject()+"&#@";msg+=new InternetAddress(message.getFrom()[0].toString()).getAddress()+"&#@";SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");msg+=format.format(message.getSentDate())+"&#@";//判断是否由附件if(message.isMimeType("multipart/*")){Multipart multipart = (Multipart)message.getContent();int bodyCounts = multipart.getCount();for(int j = 0; j < bodyCounts; j++) {BodyPart bodypart = multipart.getBodyPart(j);if(bodypart.getContent()!=null){msg+=bodypart.getContent()+"&#@";}}}else{msg+=message.getContent().toString()+"&#@";}if(message.isMimeType("multipart/*")){Multipart multipart = (Multipart)message.getContent();int bodyCounts = multipart.getCount();for(int j = 0; j < bodyCounts; j++) {BodyPart bodypart = multipart.getBodyPart(j);if(bodypart.getFileName() != null){String filename = bodypart.getFileName();if(filename.startsWith("=?")){filename = MimeUtility.decodeText(filename);}msg+=filename+";";}}}store.close();return msg;}//发送邮件public String sendmail(final String username,final String pass,String from,String to,String subject,String content){ Security.addProvider(new .ssl.internal.ssl.Provider());Properties props = System.getProperties();props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);props.setProperty("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.store.protocol", "smtp");props.setProperty("mail.smtp.host", "");props.setProperty("mail.smtp.port", "465");props.setProperty("mail.smtp.socketFactory.port", "465");props.put("mail.smtp.auth", "true");Session session = Session.getInstance(props, new Authenticator(){protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, pass);}});Message msg = new MimeMessage(session);try {msg.setFrom(new InternetAddress(username));msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to,false));msg.setSubject(subject);msg.setText(content);msg.setSentDate(new Date());Transport.send(msg);return "1";} catch (MessagingException e) {// TODO Auto-generated catch blockreturn e.getMessage();}finally{}}//Base64public static String decryptBASE64(String key) throws Exception {BASE64Decoder decoder = new BASE64Decoder();byte[] bt = decoder.decodeBuffer(key);return new String(bt,"GBK");}//新邮件提醒public int MailMsg(String username,String pass){Security.addProvider(new .ssl.internal.ssl.Provider());Properties props = System.getProperties();props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);props.setProperty("mail.imap.socketFactory.fallback", "false");props.setProperty("mail.store.protocol", "imap");props.setProperty("mail.imap.host", "");props.setProperty("mail.imap.port", "993");props.setProperty("mail.imap.socketFactory.port", "993");Session session = Session.getDefaultInstance(props,null);URLName urln = new URLName("imap","",993,null,username, pass);Store store = null;int num = 0;try {store = session.getStore(urln);store.connect();inbox = store.getFolder("INBOX");inbox.open(Folder.READ_ONLY);FetchProfile profile = new FetchProfile();profile.add(FetchProfile.Item.ENVELOPE);num = inbox.getMessageCount();} catch (MessagingException e) {// TODO Auto-generated catch blocknum = 0;}finally{try {inbox.close(false);store.close();} catch (MessagingException e) {// TODO Auto-generated catch block}finally{return num;}}}}package com.hengrun.mail;import java.io.IOException;import java.io.PrintWriter;import javax.mail.MessagingException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class MailMsg*/public class MailMsg extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public MailMsg() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubrequest.setCharacterEncoding("gbk");String username = request.getParameter("username");String pass = request.getParameter("pass");MailReceive mr = new MailReceive();int num = 0;PrintWriter out = null;num = mr.MailMsg(username, pass);response.setCharacterEncoding("gbk");response.setContentType("text/html; charset=gbk");response.setHeader("Pragma", "No-cache");response.setDateHeader("Expires", 0);response.setHeader("Cache-Control", "no-cache");out = response.getWriter();out.println(num);out.flush();out.close();}/*** @see Servlet#doPost(ServletRequest request, ServletResponse response)*/protected void doPost(HttpServletRequest request, ServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub//设置request编码方式request.setCharacterEncoding("gbk");String username = request.getParameter("username");String pass = request.getParameter("pass");MailReceive mr = new MailReceive();int num = 0;PrintWriter out = null;num = mr.MailMsg(username, pass);response.setCharacterEncoding("gbk");response.setContentType("text/html; charset=gbk");response.setHeader("Pragma", "No-cache");response.setDateHeader("Expires", 0);response.setHeader("Cache-Control", "no-cache");out = response.getWriter();out.println(num);out.flush();out.close();}}带附件发送邮件//发送邮件public String sendmail(final String username,final String pass,String from,String to,String subject,String content, String atthid) throws SQLException, ClassNotFoundException, UnsupportedEncodingException{Security.addProvider(new .ssl.internal.ssl.Provider());Properties props = System.getProperties();props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);props.setProperty("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.store.protocol", "smtp");props.setProperty("mail.smtp.host", "");props.setProperty("mail.smtp.port", "465");props.setProperty("mail.smtp.socketFactory.port", "465");props.put("mail.smtp.auth", "true");Session session = Session.getInstance(props, new Authenticator(){protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, pass);}});Message msg = new MimeMessage(session);try {msg.setFrom(new InternetAddress(username));msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to,false));msg.setSubject(subject);//msg.setContent(content, "text/html;charset=gb2312");msg.setSentDate(new Date());Multipart mt = new MimeMultipart();MimeBodyPart mbp = new MimeBodyPart();mbp.setContent(content, "text/html;charset=gb2312");mt.addBodyPart(mbp);if(atthid!=null&&!atthid.equals("")){List<Map> list = Utility.GetFiles(atthid);if(list!=null&&list.size()>0){for(int i=0;i<list.size();i++){MimeBodyPart fbp = new MimeBodyPart();FileDataSource fds = new FileDataSource(((HashMap)list.get(i)).get("AnnexDirection").toString());fbp.setDataHandler(new DataHandler(fds));fbp.setFileName(MimeUtility.encodeText(((HashMap)list.get(i)).get("AnnexName").toString()));mt.addBodyPart(fbp);}}}msg.setContent(mt);Transport.send(msg);return "1";} catch (MessagingException e) {// TODO Auto-generated catch blockreturn e.getMessage();}finally{}}最新整理收邮件代码,通过UID收取新邮件及附近,已测试成功private IMAPFolder inbox = null;private String SSL_FACTORY = ".ssl.SSLSocketFactory";//获取新邮件public String getMails(String username,String pass,String server,String port,Boolean ssl){String num = "";Properties props = System.getProperties();props.setProperty("mail.imap.socketFactory.fallback", "false");props.setProperty("mail.store.protocol", "imap");props.setProperty("mail.imap.host", server);props.setProperty("mail.imap.port", port);props.setProperty("mail.imap.socketFactory.port", port);props.setProperty("mail.imap.auth.login.disable", "true");props.setProperty("mail.imap.auth.plain.disable", "true");if(ssl){Security.addProvider(new .ssl.internal.ssl.Provider());props.setProperty("mail.imap.socketFactory.class", SSL_FACTORY);}Session session = Session.getDefaultInstance(props,null);URLName urln = new URLName("imap",server,Integer.parseInt(port),null, username, pass);Store store = null;String ids = "";try {store = session.getStore(urln);store.connect();inbox = (IMAPFolder)store.getFolder("inbox");inbox.open(Folder.READ_WRITE);//FetchProfile profile = new FetchProfile();//profile.add(FetchProfile.Item.ENVELOPE);//Message[] messages = inbox.getMessages();//inbox.fetch(messages, profile);Message[] msgs = inbox.getMessages();for(int i=0;i<msgs.length;i++){ids+="insert into #tmp (UID) values ("+inbox.getUID(msgs[i])+");";}List<Integer> list = Utility.GetUnreads(username, ids);int res = SaveMail(list, username);if(res<0){num="";}else{num = "ok";}} catch (MessagingException e) {// TODO Auto-generated catch blocke.printStackTrace();num = "";} finally{try {inbox.close(false);store.close();} catch (MessagingException e) {// TODO Auto-generated catch block//e.printStackTrace();}finally{return num;}}}public int SaveMail(List<Integer> list,String username){int num = 0;try{for(int i=0;i<list.size();i++){Message msg = inbox.getMessageByUID(list.get(i));Address[] tos = msg.getRecipients(RecipientType.TO);String to = "";for(int j=0;j<tos.length;j++){to+=getAdds(decodeText(tos[j].toString()));}Address[] froms = msg.getFrom();String from = "";for(int j=0;j<froms.length;j++){from += getAdds(decodeText(froms[j].toString()))+";";}Address[] ccs = msg.getRecipients();String cc = "";for(int j=0;ccs!=null&&j<ccs.length;j++){cc += getAdds(decodeText(ccs[j].toString()))+";";}Address[] bccs = msg.getRecipients(RecipientType.BCC);String bcc = "";for(int j=0;bccs!=null&&j<bccs.length;j++){bcc += getAdds(decodeText(bccs[j].toString()))+";";}String content = "";String atth = "";if(msg.isMimeType("multipart/*")){Multipart multipart = (Multipart)msg.getContent();int bodyCounts = multipart.getCount();for(int j = 0; j < bodyCounts; j++) {BodyPart bodypart = multipart.getBodyPart(j);if(bodypart.getFileName() != null){String filename = bodypart.getFileName();if(filename.startsWith("=?")){filename = MimeUtility.decodeText(filename);}String path = SaveFile(bodypart.getInputStream(), filename);atth+=path+";";}if(bodypart.isMimeType("text/html")){content = bodypart.getContent().toString();}if(bodypart.isMimeType("text/plain")){content = bodypart.getContent().toString();}}}else{content = msg.getContent().toString();}int iscc = 0;if(cc.contains(username)){iscc = 1;}int isbcc = 0;if(bcc.contains(username)){isbcc = 1;}int has = 0;if(!atth.equals("")){has = 1;}int isread = 0;Flag[] flags = msg.getFlags().getSystemFlags();for(int j=0;j<flags.length;j++){if(flags[j] == Flag.SEEN){isread = 1;}}Utility.SaveUnread(username, list.get(i), msg.getSentDate(), from, msg.getSubject(), content, cc, bcc, atth,iscc,isbcc,has,to,isread);num=1;}catch(Exception e){e.printStackTrace();num=-1;}finally{return num;}}public String SaveFile(InputStream stream,String filename){String path = "";try{Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String d = sdf.format(date);File file = new File("D:\\server\\Test\\soaTest\\files\\"+d);if(!file.exists()){file.mkdirs();}FileOutputStream out = new FileOutputStream("D:\\server\\Test\\soaTest\\files\\"+d+"\\"+filename);int data;while((data = stream.read()) != -1) {out.write(data);}stream.close();out.close();path = "D:\\server\\Test\\soaTest\\files\\"+d+"\\"+filename;}catch(Exception ex){ex.printStackTrace();}finally{return path;}}这里要注意,当你先使用一个需要SSL的邮箱接受之后,再使用一个不需要SSL的邮箱接受就会报错,错误提示你无法获取SSL信息。
基于JavaMail的Web邮件验证系统设计作者:卜凡港来源:《电子技术与软件工程》2018年第16期摘要当今社会,电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。
但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。
为了更好的做好用户注册的安全性,保证有效用户数,以及对产品接下来的相关信息的推广,本文将首先简单介绍一些相关的术语和协议,并通过Java代码来创建电子邮件,并连接邮件服务器发送邮件,以及邮件链接的验证,激活注册用户的相关功能,并对注册时产生的一定量高并发进行研究。
该研究对项目开发者学习和实现服务器端与邮箱服务器之间通信功能有一定的参考价值。
【关键词】JavaMail 电子邮件 Web 高并发随着互联网领域各项技术迅速地发展,电子邮箱已经成为现代人常用的一种联系工具,并且涉及的领域也越来越广泛,个人邮箱有时可以看作是一个身份认证的标识,可以用来进行身份确认,以及进行相关的联系活动。
现在有很多WEB开发都需要JavaMail,例如,用户注册后,网站发送一封激活邮件进行验证;用户过生日,系统发送生日祝福邮件;将最新活动和优惠以邮件的形式告知会员等等。
这些应用都需要开发人员使用编程发送邮件。
本次设计就是基于JavaMail实现用户注册时,通过邮件对账户进行认证的完善登陆系统。
通过邮箱激活注册账户,既保证了对相关账户的安全性,也拓展了信息推广的途径,这方式已经成为了很多IT公司用户注册必经步骤。
整个设计采用B/S架构,在设计过程中,我们首先搭建并配置邮箱服务器端和邮件客户端,数据库采用MySQL,在数据库中建立相应数据表,导入相应的JavaMail 的jar包,在eclipse平台上引用相应的API,并考虑到一定的高并发性,采取多线程,用JAVA语言进行开发邮箱验证功能。
我们在最后的实验结果检测过程中,会检测分析到系统成功实现邮件发送、接收,以及点击链接后的激活功能,本次系统的设计也将对研究人员在用户安全性设计方面有一定的帮助。
利⽤JavaGUI和javamail实现的email客户端摘要本系统是⽤ java 语⾔实现的⼀个 Email客户端,主要⽤到 java GUI 图形界⾯设计和 java mail ⼯具包,它适⽤于所有⽤户,⽆管理员设置,可以实现⽹络邮箱的邮件发送和邮件收取的基本功能,还具有通讯录的存储功能,针对⽤户的需求,本Email 客户端具有以下两⼤模块:1.基本设置模块;此模块主要包括⽤户设置和邮箱设置两⼤内容:1.1 ⽤户设置:主要设置⽤户的⼀些基本信息,如⽤户名,⽤户密码等设置1.2 邮箱设置:主要设置邮箱服务器,SMTP,POP3等2. Email功能模块;此模块根据⼤众⽤户的需求划分了以下三个部分:2.1收取邮件功能;2.2发送邮件功能;2.3通讯录功能;该系统的开发过程为:1.Email客户端的需求分析;2.Email客户端的系统分析;3.Email客户端的功能模块划分划分;4.Email客户端的数据库设计;5.Email客户端的界⾯设计;6.Email客户端的功能模块设计及代码实现关键字:java,java GUI,java mailAbstractThis email client system is developed in java language using java GUI and java mail tools .It can be used by any users who want to use it . The system is not including manager settings and it can finish the function of sending and accepting mails in web mail system, it can store user information a function like a address book in the web. The systems need to achieve the overall function to run two parts, as follows1. The basic settingsTwo parts are followed:1.1 Maintenance System Administrators basic information;1.2 Student response functions;2. Email functionsThree function will be available2.1 Sending mails2.2 Receiving mails2.3 Address bookThe system development process :1. Email client needs analysis;2. Email client system analysis;3. Email client function modules partition;4. Email client design;5. Email client interface design;6. Email client functional design and code modules to achieveKey word:java , java GUI ,java mail⽬录前⾔ (4)第1章系统概述及系统分析-------------------------------------------- 51.1系统概述 (5)1.1.1基本设置模块--------------------------------------------------- 51.1.2 Email功能模块------------------------------------------------- 5 1.2 需求分析 (5) 1.3 可⾏性分析 (5)1.3.1技术可⾏性分析------------------------------------------------- 51.3.2环境可⾏性分析------------------------------------------------- 61.3.3经济可⾏性分析------------------------------------------------- 6第2章系统开发基本介绍---------------------------------------------- 72.1 选题背景与⽬的--------------------------------------------------- 72 .2 系统开发⼯具---------------------------------------------------- 72 .3 系统开发环境---------------------------------------------------- 72 .4开发技术概述---------------------------------------------------- 72 .4.1 J2EE概述----------------------------------------------------- 72 .4.2 Java GUI ------------------------------------------------------ 82 .4.3 Java mail ----------------------------------------------------- 9第3章系统总体设计------------------------------------------------- 103 .1 系统功能模块划分----------------------------------------------- 103 .2系统具体功能模块基本介绍--------------------------------------- 103 .2.1 发件箱------------------------------------------------------- 103 .2.2 收件箱------------------------------------------------------- 113 .2.3 通讯录------------------------------------------------------- 11第4章系统详细设计及系统实现--------------------------------------- 134 .1 章节内容总体介绍----------------------------------------------- 134 .2各模块功能详细设计--------------------------------------------- 134 .2.1 发送邮件功能的实现------------------------------------------- 134 .2.1.1 发送普通邮件功能------------------------------------------- 134 .2.1.2 邮件附件的功能实现----------------------------------------- 194 .2.2 收取邮件功能的实现------------------------------------------- 204 .2.3 通讯录功能的实现--------------------------------------------- 284 .2.4其他功能----------------------------------------------------- 314 .2.4.1 其他界⾯实现与通讯录的连接功能----------------------------- 314 .2.4.2 邮件未存储对⽤户提⽰功能----------------------------------- 314 .2.4.3 复制、删除邮件功能----------------------------------------- 324 .2.4.4 ⽤户信息设置功能------------------------------------------- 34结束语-------------------------------------------------------------- 36谢辞 (37)参考⽂献 (37)前⾔邮件系统是⼀套单独的系统,要有⾃⼰的服务器,在邮件系统中可以设多个域,每个域中可以设多个⽤户,⽐如说我买了anymacro 或快客的邮件系统,可以进⾏多项设置.它的数据是放在⾃⼰的服务器上.随着信息技术的提⾼,⽹络的普及于发展,越来越多的⽹络⼯具随之产⽣出来,⽹络邮箱就是其中之⼀,它可以通过⽹络来实现⼈们之间的通信,可以给⼈们的⼯作带来极⼤的⽅便,同时也缩短了⼈与⼈之间的距离,使⼈们在通信上需要花费的时间更短。
JWebMail支持IMAP/POP3协议的webmail。
GatorMailGatorMail是一个利用Struts framework编写的webmail开源项目Claros WebmailClaros Webmail是一个比较简单的,采用pop3/smtp收发邮件的webMail系统。
不需要数据库的支持。
提供一个独立于SMTP服务器的垃圾邮件过滤机制。
G4JG4J(Java的GMailer API)为Java程序访问GMail提供一组API.利用这组API可以登录Gmail来发送,浏览,搜索信息;下载附件和做一些可以Gmail账号可以做的一些动作.在源码包中还提供一个DEMO来证明这个API的实用性.Jwma通过使用标准的浏览器可以访问,管理的电子信箱.JFoxMailJFoxMail是一个开源J2EE webmail应用程序。
它支持IMAP/SMTP,使用LDAP管理地址簿。
MeyboMail WebMeyboMail Web开源简化版本是在MeyboMail商业版的基础上进行简单修改,该版脱离MeyboMail Server环境,支持各种邮件服务器的B/S版邮件收发系统,是MeyboMail Web的简化版本。
该版本主要提供给广大的Java爱好者学习及研究EasyJWeb使用。
演示地址:。
用户名:easyjf 密码:easyjfOpen-jACOB eMailOpen-jACOB eMail是一个轻量级IMAP客户端,基于Javamail API与Open-jACOB框架开发。
界面类似于Gmail,它提供的功能包括完整的folder list,message list和contact list。
Claros In TouchClaros In Touch是一个功能强大,多协议支持的webmail(Pop3/IMAP)系统。
此外还提一些个人信息管理的功能包括地址簿,日历,书签(可以存储整个网页),RSS阅读器。
如何用javamail定时发送邮件例如:我想在3天后的中午12:00发送给别人邮件还有就是每天的中午12点给别人发送邮件,而且这些个邮件地址是从一个jsp传来的例如今天给a@发,当执行过jsp后,jsp输入的是b@,以后就给b@发而且jsp传过来的邮件地址数目是多个的,每天需要给多人在固定一时间内发邮件定时触发器有许多开源项目Timer + 多线程我在这里使用的Java计时器框架是由Java开发人员Tom White构建的一个简单通用的计划框架,以用于执行任意复杂的计划任务,他使我们实现灵活的计划策略成为可能。
Java计时器框架的本身在这里不作过多的介绍,详细信息在IBM developerWorks中国网站。
我们主要讨论如何利用Java计时器框架在Solaris平台来实现邮件的定时发送、JavaMail发送邮件的实现以及在Solaris平台上如何以后台方式运行整个邮件定时发送的应用。
下载本文的源代码,参考具体实现。
1.1 形成schedule.jar包schedule.jar包中的目录结构如下:我们将数据库的连接、日志、邮件和计划框架的通用类形成一个与具体应用要求无关的schedule.jar包。
利用javac将编译生成的目标class文件存在当前目录的classes文件夹下,然后通过jar -cvf schedule.jar ./*命令生成schedule.jar包。
1.1.1 Oracle数据库连接的建立位于db目录下,通过thin方式建立与Oracle的数据库连接,具体的实现参见《J2EE应用中与Oracle数据库的连接》一文。
1.1.2 日志以后台方式定时运行的应用应特别注意日志的功能,因为只有通过分析详细的日志信息才能准确掌握应用的执行情况。
在logs目录下为Logs.java文件,代码如下:package com.j2ee.logs;import java.io.*;import java.util.*;import java.text.SimpleDateFormat;public class Logs{private String logType="";private String server="/schedule/logs/server.log";private String task="/schedule/implements/nohup.out";private SimpleDateFormat dateFormat =new SimpleDateFormat("【yyyy年MM月dd日 E a HH:mm:ss 】");/*** @param logType server task*/public Logs(String logType){this.logType=logType;}public void print(String msg){try{String path="";if (logType.equals("server"))path=server;if (logType.equals("task"))path=task;//BufferedWriter out= new BufferedWriter(new FileWriter(path,true)); String str=dateFormat.format(new Date());if (logType.equals("task"))out.newLine();out.write(str,0,str.length());out.write(msg,0,msg.length());out.newLine();out.close();}catch(Exception e){System.out.println("Logs.print:"+e.getMessage());}}};通过类中的构造器,可以生成两个日志文件:server.log和nohup.out。
JWebMail
支持IMAP/POP3协议的webmail。
GatorMail
GatorMail是一个利用Struts framework编写的webmail开源项目
Claros Webmail
Claros Webmail是一个比较简单的,采用pop3/smtp收发邮件的webMail系统。
不需要数据库的支持。
提供一个独立于SMTP服务器的垃圾邮件过滤机制。
G4J
G4J(Java的GMailer API)为Java程序访问GMail提供一组API.利用这组API可以登录Gmail来发送,浏览,搜索信息;下载附件和做一些可以Gmail账号可以做的一些动作.在源码包中还提供一个DEMO来证明这个API的实用性.
Jwma
通过使用标准的浏览器可以访问,管理的电子信箱.
JFoxMail
JFoxMail是一个开源J2EE webmail应用程序。
它支持IMAP/SMTP,使用LDAP管理地址簿。
MeyboMail Web
MeyboMail Web开源简化版本是在MeyboMail商业版的基础上进行简单修改,该版脱离MeyboMail Server环境,支持各种邮件服务器的B/S版邮件收发系统,是MeyboMail Web的简化版本。
该版本主要提供给广大的Java爱好者学习及研究EasyJWeb使用。
演示地址:。
用户名:easyjf 密码:easyjf
Open-jACOB eMail
Open-jACOB eMail是一个轻量级IMAP客户端,基于Javamail API与Open-jACOB框架开发。
界面类似于Gmail,它提供的功能包括完整的folder list,message list和contact list。
Claros In Touch
Claros In Touch是一个功能强大,多协议支持的webmail(Pop3/IMAP)系统。
此外还提一些个人信息管理的功能包括地址簿,日历,书签(可以存储整个网页),RSS阅读器。
它的主要特点:
*.采用叶贝斯规则来过滤垃圾邮件和自定义邮件过滤器。
*.基于Apache Struts,Apache Commons,Claros Commons,JSP与Servlet技术开发。
*.支持在POP3协议上实现文件夹管理(通过数据库模仿IMAP文件夹实现)
*.安装简单:默认采用hsqldb数据库引擎,但是支持所有兼容JDBC的数据库。
*.它适用于所有符合标准的POP3与SMTP服务器。
*.独立操作系统。
采用规则JSP与servlet编写。
*.应用一些新的用户界面技术比如:Ajax。
*.可以发送HTML格式的邮件(内置一个基于DHTML的HTML编辑器)。
*.完全支持MIME(可简读所有HTML格式的邮件)。
*.支持群发邮件。
OlivaMail/Webmail
OlivaMail/Webmail是一套支持POP3/IMAP协议的webmail系统。
它还提供了用于PDA设备的主题。
OlivaMail/Webmail基于OlivaMail/Core类库开发。
支持MIME邮件, 支持多国语言(包括中文),支持codepage,支持SMTP身份验证,支持多个附件发送。
采用MySQL来存储用户通讯录。
Zimbra
Zimbra提供一套开源协同办公套件包括WebMail,日历,通信录,Web文档管理和创作。
它最大的特色在于其采用Ajax技术模仿CS桌面应用软件的风格开发的客户端兼容Firefox,Safari和IE浏览器。
yawebmail
yawebmail是一个采用Java开发的WebMail客户端。
支持POP3与IMAP协议。
MiniG
MiniG(Mini Gmail)是一个Ajax Webmail,其界面设计得非常像GMail,MiniG支持任意Cyrus IMAP 服务器。