Java邮件开发
- 格式:doc
- 大小:1.09 MB
- 文档页数:56
使⽤java发送短信和邮件(1)发送短信1.1在中国⽹建SMS上注册⼀个⽤户名,并获取短信密钥(⾮登录密码)1.2代码import java.io.IOException;import mons.httpclient.Header;import mons.httpclient.HttpClient;import mons.httpclient.HttpException;import ValuePair;import mons.httpclient.methods.PostMethod;public class SendMessage {/*** @param args* @throws IOException* @throws HttpException*/public static void main(String[] args) throws HttpException, IOException {HttpClient client=new HttpClient();PostMethod post=new PostMethod("");//在头⽂件中设置转码post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gbk");NameValuePair[] data={new NameValuePair("Uid","⽹建注册⽤户名"),new NameValuePair("Key","短信密钥"),new NameValuePair("smsMob","接收号码"),new NameValuePair("smsText","短信内容")};post.setRequestBody(data);client.executeMethod(post);Header[] headers=post.getRequestHeaders();int statusCode=post.getStatusCode();System.out.println("statusCode:"+statusCode);for(Header h:headers){System.out.println(h.toString());}String result=new String(post.getResponseBodyAsString().getBytes("gbk"));System.out.println(result);post.releaseConnection();}1.3注意需要引⼊包:commons-logging-1.1.1.jar、commons-httpclient-3.1.jar、commons-codec-1.4.jar1.4StatusCode说明:短信发送后返回值说 明-1没有该⽤户账户-2接⼝密钥不正确不是账户登陆密码-21MD5接⼝密钥加密不正确-3短信数量不⾜-11该⽤户被禁⽤-14短信内容出现⾮法字符-4⼿机号格式不正确-41⼿机号码为空-42短信内容为空-51短信签名格式不正确接⼝签名格式为:【签名内容】-6IP限制⼤于0短信发送数量2、发邮件2.1smtp验证类import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;public class SmtpAuthenticator extends Authenticator {String username=null;String password=null;public SmtpAuthenticator(String name,String password) {super();ername=name;this.password=password;}public PasswordAuthentication getPasswordAuthentication(){return new PasswordAuthentication(ername, this.password);}}2.2发邮件的⼯具类import java.util.Date;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Authenticator;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import javax.mail.internet.MimeUtility;public class JavaMailSendUtil {public void sendMail(String subject,String from,String[] to,String test,String[] filenames,String mineType){try {Properties props=new Properties();String smtp="";//设置发送邮件所⽤到的smtpString servername="188********@";String serverpassword="************";Session mailSession=null;MimeMessage mimeMsg=null;props=ng.System.getProperties();props.put("mail.smtp.host", smtp);//设置SMTP主机props.put("mail.smtp.auth", "true");//是否到服务器⽤户名和密码验证//到服务器验证发送的⽤户名和密码是否正确SmtpAuthenticator myEmailAuther=new SmtpAuthenticator(servername, serverpassword);//设置邮件会话注意这⾥讲认证信息放进了Session的创建参数⾥mailSession=javax.mail.Session.getInstance(props,(Authenticator)myEmailAuther);//设置传输协议javax.mail.Transport transport=mailSession.getTransport("smtp");//设置from、to等信息mimeMsg=new javax.mail.internet.MimeMessage(mailSession);if(from!=null&&!from.equals("")){InternetAddress sendFrom=new InternetAddress(from);mimeMsg.setFrom(sendFrom);//设置发送⼈地址}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]);}mimeMsg.setRecipients(javax.mail.internet.MimeMessage.RecipientType.TO, sendTo); mimeMsg.setSubject(subject,"gb2312");MimeBodyPart messageBodyPart1=new MimeBodyPart();messageBodyPart1.setContent(test,mineType);//附件传输格式Multipart multipart=new MimeMultipart();multipart.addBodyPart(messageBodyPart1);for(int i=0;i<filenames.length;i++){MimeBodyPart messageBodyPart2=new MimeBodyPart();String filename=filenames[i].split(";")[0];System.out.println(filename);String displatname=filenames[i].split(";")[1];//得到数据源FileDataSource fds=new FileDataSource(filename);//BodyPart添加附件本⾝messageBodyPart2.setDataHandler(new DataHandler(fds));//BodyPart添加附件⽂件名messageBodyPart2.setFileName(MimeUtility.encodeText(displatname));multipart.addBodyPart(messageBodyPart2);}mimeMsg.setContent(multipart);//设置信件头的发送⽇期mimeMsg.setSentDate(new Date());mimeMsg.saveChanges();//发送邮件Transport.send(mimeMsg);transport.close();System.out.println("消息发送成功");} catch (Exception e) {// TODO: handle exception}}}2.3测试类public class TestMailSend {/*** @param args*/public static void main(String[] args) {String title="测试邮件";String from="188********@";String sendTo[]={"1245226995@","jlsong186@"};String content="just test java send mail<br><a href=\"\">My blog</a>"; String fileNames[]={"F:\\068.JPG;068.JPG"};JavaMailSendUtil test=new JavaMailSendUtil();try {test.sendMail(title, from, sendTo, content, fileNames, "text/html;charset=gb2312");} catch (Exception e) {e.printStackTrace();}}}。
JavaMail概述J avaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。
它是Sun 公司发布的用来处理email的API,是一种可选的、用于读取、编写和发送电子消息的包(标准扩展)。
用户可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。
Java Mail是JavaEE平台提供的邮件API。
使用这套API,可以轻松实现邮件的创建,发送和接受。
1.什么是E-mailE-mail是用户间或应用程序间交换信息的Internet标准。
每个用户都有自己的网上邮箱,发送方把信息发送到自己的网上信箱,并声明信息的接收方;该信箱所在的“邮局”会把信息发送到接收方的“邮局”,接收方从接收方的“邮局”中自己的信箱获取信息。
这样就完成了信息从发送方到接收方的传递。
所以,要发送或者接收邮件首先应该有自己的邮箱。
E-mail消息可以包含普通文本,也可以包含更为复杂的多媒体数据类型和图像声音等。
这样,用户就可以交换各种各样的信息。
每个E-mail消息的头信息中都包含消息的发出者、发送的目的地和其他相关信息。
2 E-mail体系结构要完成消息的交互,需要几方面的支持:邮件发送客户端程序、邮件接收客户端程序、邮件发送服务器和邮件接收服务器,此外,还需要相关的通信协议。
邮件发送客户端程序和邮件接收客户端程序可以是相同的,例如经常使用的微软的Outlook既可以发送邮件,也可以接收邮件。
邮件发送服务器和邮件接收服务器也可以是相同的服务器。
在与邮件服务器交互的过程中,主要完成两个动作,把邮件发送到邮件服务器,以及从邮件服务器读取邮件。
邮件发送方通过邮件发送客户端把邮件发送到发送方的邮件服务器,在发送的过程中需要用到SMTP协议。
发送方的邮件服务器把邮件发送到接收方的邮件服务器,使用的协议也是SMTP。
邮件接收方从接收方邮件服务器接收邮件,使用POP3协议或者IMAP协议。
3 E-mail相关的协议简单邮件传输协议(SMTP)在邮件发送方把邮件发送到发送方邮件服务器的时候,需要用到简单邮件传输协议(Simple Mail Transport Protocol,简称SMTP),发送方邮件服务器把邮件发送到接收方邮件服务器的时候,也要用到SMTP。
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 + "。
java邮件发送(单⼈,多⼈,抄送,Excel附件) 直接上代码保存吧package com.westvalley.ceiec.page.report.sendmail;import weaver.email.EmailEncoder;import javax.mail.*;import javax.mail.internet.*;import javax.mail.util.ByteArrayDataSource;import javax.activation.*;import mons.logging.Log;import mons.logging.LogFactory;import ermodel.HSSFWorkbook;import crivia.db.i.DataSet;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.util.*;/**邮件发送⼯具类* @author whh*/public class Email {Log log = LogFactory.getLog(this.getClass());//发件⼈地址private String mail_from;public void setMail_from(String mailFrom) {mail_from = mailFrom;}public String getMail_from() {return mail_from;}//发件⼈密码private String password;public void setPassword(String password) {this.password = password;}public String getPassword() {return password;}//收件地址private String mail_to;public void setMail_to(String mailTo) {mail_to = mailTo;}public String getMail_to() {return mail_to;}//主题private String title;public void setTitle(String title) {this.title = title;}public String getTitle() {return title;}//内容private String message;public void setMessage(String message) {this.message = message;}public String getMessage() {return message;}//发件⼈邮件服务器如: 191.0.0.6private String send_server;public void setSend_server(String sendServer) {send_server = sendServer;}public String getSend_server() {return send_server;}/** 单个发送 setMail_to(String mailTo)* @return是否正确发送* @throws AddressException*/public boolean SendMail()throws AddressException{try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from); message.setFrom(from_address);//设置收件⼈InternetAddress to_address = new InternetAddress(this.mail_to);message.setRecipient(Message.RecipientType.TO, to_address);//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("向"+this.mail_to+"发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.toString());return false;}}/**群发* @param addresses 地址list* @return* @throws AddressException*/public boolean SendMail(List<String> addresses) throws AddressException{ try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from); message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/** 多⼈发送并抄送增加:2017-04-25 whh* @param addresses 收件邮箱(多个)* @param ccAddresses 抄送邮箱(多个)* @return* @throws AddressException*/public boolean SendMail(List<String> addresses, List<String> ccAddresses) throws AddressException{if(0==ccAddresses.size()){ //20170428 whhreturn SendMail(addresses);}try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from);message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置抄送⼈final int ccSize = ccAddresses.size();if(ccSize > 0){InternetAddress cc_Address[] = new InternetAddress[ccSize];for(int i=0; i<ccSize; i++){cc_Address[i] = new InternetAddress(ccAddresses.get(i));}message.setRecipients(, cc_Address);}//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/** 多⼈发送并抄送增加:2019-06-14 whh* @param addresses 收件邮箱(多个)* @param ccAddresses 抄送邮箱(多个)* @param is 附件* @return* @throws AddressException*/public boolean SendMail(List<String> addresses, List<String> ccAddresses,HSSFWorkbook workBook,String workBookName) throwsAddressException{try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from);message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置抄送⼈final int ccSize = ccAddresses.size();if(ccSize > 0){InternetAddress cc_Address[] = new InternetAddress[ccSize];for(int i=0; i<ccSize; i++){cc_Address[i] = new InternetAddress(ccAddresses.get(i));}message.setRecipients(, cc_Address);}//附件ByteArrayOutputStream baos = new ByteArrayOutputStream();workBook.write(baos);baos.flush();byte[] bt = baos.toByteArray();InputStream is = new ByteArrayInputStream(bt, 0, bt.length);baos.close();/*添加正⽂内容*/Multipart multipart = new MimeMultipart();BodyPart contentPart = new MimeBodyPart();// contentPart.setText(this.message);// contentPart.setHeader("Content-Type", "text/html;charset=UTF-8");contentPart.setContent(this.message, "text/html;charset=UTF-8");multipart.addBodyPart(contentPart);/*添加附件*/MimeBodyPart fileBody = new MimeBodyPart();DataSource source = new ByteArrayDataSource(is, "application/msexcel"); fileBody.setDataHandler(new DataHandler(source));// 中⽂乱码问题fileBody.setFileName(MimeUtility.encodeText(workBookName+".xls"));multipart.addBodyPart(fileBody);//设置主题message.setSubject(title);//设置内容message.setContent(multipart);//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/**邮箱初始化,发件⼈邮箱、密码及服务器信息的获取* @return正确获取时返回Email对象,否则为null*/public static Email intiEmail(){// Log log = LogFactory.getLog(this.getClass());Email email = new Email();//获取系统的邮箱信息DataSet data = SQL.select(SQL.sql_Array(" select defmailpassword" +",defmailserver,defmailfrom from SystemSet "));if(data.next()){//发件⼈邮箱地址email.setMail_from(data.get("defmailfrom"));//获取并解析邮箱密码email.setPassword(EmailEncoder.DecoderPassword(data.get("defmailpassword")));// ("Password:"+EmailEncoder.DecoderPassword(data.get("defmailpassword"))); //服务器信息email.setSend_server(data.get("defmailserver"));}if(email.getMail_from().equals("")||email.getPassword().equals("")||email.getSend_server().equals("")){// ("发送⼈邮箱错误");// ("From:"+email.getMail_from()+"Password:"+// email.getPassword()+"Server:"+email.getSend_server());return null;}return email;}}。
利⽤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 或快客的邮件系统,可以进⾏多项设置.它的数据是放在⾃⼰的服务器上.随着信息技术的提⾼,⽹络的普及于发展,越来越多的⽹络⼯具随之产⽣出来,⽹络邮箱就是其中之⼀,它可以通过⽹络来实现⼈们之间的通信,可以给⼈们的⼯作带来极⼤的⽅便,同时也缩短了⼈与⼈之间的距离,使⼈们在通信上需要花费的时间更短。
1.概述Java作为一种高级编程语言,被广泛应用于各种软件开发项目中。
在邮政快递领域,正则表达式是一种非常重要的工具,它可以有效地匹配和识别包裹的信息。
本文将介绍Java中如何使用正则表达式来处理和识别邮政快递包裹的相关信息。
2. 正则表达式的基本概念在介绍Java中如何使用正则表达式来处理邮政快递包裹信息之前,首先需要了解正则表达式的基本概念。
正则表达式是一种字符串匹配的模式,它可以用来检测一个字符串是否符合某种模式。
在Java中,可以使用java.util.regex包提供的类来操作正则表达式。
3. 使用正则表达式匹配包裹的跟踪号码在处理邮政快递包裹信息时,跟踪号码是非常重要的信息之一。
通过跟踪号码,可以追踪包裹的当前位置和运输状态。
使用正则表达式可以很容易地匹配和识别包裹的跟踪号码。
可以使用以下正则表达式来匹配快递公司的跟踪号码:```javaString regex = "[A-Z0-9]{10}";```该正则表达式可以匹配由大写字母和数字组成的10位跟踪号码。
通过在Java中使用Matcher和Pattern类,可以很容易地检测一个字符串是否符合该模式。
4. 使用正则表达式匹配包裹的发件人和收件人信息除了跟踪号码外,包裹的发件人和收件人信息也是非常重要的。
使用正则表达式可以很容易地匹配和识别包裹的发件人和收件人信息。
可以使用以下正则表达式来匹配邮信码:```javaString regex = "\\d{6}";```该正则表达式可以匹配6位数字的邮信码。
通过在Java中使用Matcher和Pattern类,可以很容易地检测一个字符串是否符合该模式。
5. 使用正则表达式匹配包裹的重量和尺寸信息包裹的重量和尺寸信息也是快递公司和收件人关注的重点。
使用正则表达式可以很容易地匹配和识别包裹的重量和尺寸信息。
可以使用以下正则表达式来匹配重量信息:```javaString regex = "\\d{1,3}kg";```该正则表达式可以匹配1到3位数字后跟有"kg"的重量信息。
毕业设计(论文)( 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实现电子邮件的发送、电子邮件的接收等等功能。
send email with microsoft graph apis的java例子引言概述:在当今数字化时代,电子邮件成为了人们日常沟通的重要工具。
为了满足不同需求,许多开发者使用Microsoft Graph APIs来发送电子邮件。
本文将通过Java语言提供一些有关使用Microsoft Graph APIs发送电子邮件的示例。
正文内容:1. 连接到Microsoft Graph API1.1 获取访问令牌(Access Token)要使用Microsoft Graph API发送电子邮件,首先需要连接到API。
使用Java语言,可以通过OAuth 2.0授权流程获取访问令牌。
这可以通过调用Microsoft的身份验证服务来完成。
1.2 设置访问令牌(Access Token)获取访问令牌后,需要将其设置为HTTP请求的头部授权标头。
这样,API将知道请求是经过授权的,并且可以执行相应的操作。
1.3 建立HTTP连接使用Java的HTTP库,可以建立与Microsoft Graph API的HTTP连接。
通过指定API的URL和请求类型,可以发送请求并接收响应。
2. 创建电子邮件2.1 设置电子邮件的主题和内容在发送电子邮件之前,需要设置电子邮件的主题和内容。
可以使用Java的字符串操作方法来构建电子邮件的主题和正文。
2.2 添加收件人和抄送人为了发送电子邮件,需要指定收件人和抄送人。
可以使用Microsoft Graph API 提供的电子邮件模板来设置收件人和抄送人的电子邮件地址。
2.3 添加附件如果需要发送附件,可以使用Java的文件操作方法来添加附件。
将附件的文件路径指定为API请求的一部分即可。
3. 发送电子邮件3.1 使用Microsoft Graph API发送电子邮件通过调用Microsoft Graph API的发送电子邮件功能,可以将构建好的电子邮件发送出去。
将API请求的URL设置为发送电子邮件的URL,并将电子邮件的内容作为请求的正文发送。
第3课时关于邮件的理论以及通过cmd telnet到服务器发送和接受邮件(这一课时很重要)其实邮件服务器就类似于邮局,发送方发到自己选择的邮件服务器,然后邮件服务器发送到目标服务器,目标服务器接收邮件,然后目标去目标服务器接受邮件。
这这个过程中必须注意,除了用户取邮件用的是POP3协议,发送邮件到自己选择的服务器和自己这边的服务器转邮件到目标服务器之间用到的协议都是SMTP协议。
只有用户主动去取邮件的时候才是POP3协议。
每个邮箱就相当于我们取信的和发信的邮局提供的邮件箱一样。
我们的每个申请的邮箱账号,其实就是一个邮件箱,在邮件服务器上建立了一个账号和空间,邮件会放着这个服务器给我们开的账户的空间里。
邮件服务器按通讯协议分为两种类型SMTP服务器POP3/IMAP服务器发送邮件或者是将邮件转发给另外一个邮件服务器就是用SMTP协议。
如果用户去取邮件,使用的协议就是POP3协议Smtp服务器端口号是:25Pop3服务器端口号是:110Smtp服务器登陆,首先需要先使用base64格式编码用户名和密码,然后登陆服务器时输入编码后的用户名与密码给服务器验证才会通过,而pop3服务器登陆是不需要使用base64编码的,直接输入原来的用户名和密码。
Telnet :25第四课时发送邮件的原理(相当重要)一定要注意,其实在cmd中和smtp服务器交流的时候,邮件和服务器之间的关系。
在写邮件之前,需要先定义mail from<>和rcpt to<>,这个是专门和服务器打交道,由服务器识别的。
而在写邮件的时候,邮件分两部分,一个是邮件头,一个是邮件内容(从‘data’表示内容开始,data之后是全部的内容,以一个‘.’表示邮件内容结束),内容部分的头部分又需要再写一个from:<>,这里面写邮件的发件人,可以是开始的mail from也可以是另外一个邮箱名字。
这个邮件头,服务器是不检查的,是给邮件阅读程序看的,所以发出去之后,在客户端邮件阅读程序(outlook)中我们看到的发件人实际上是邮件头上面写的发件人,而不是登陆邮箱的发件人的邮箱。
Java实现读取163邮箱,qq邮箱的邮件内容通过使⽤java mail来实现读取163邮箱,qq邮箱的邮件内容。
1.代码实现创建springboot项⽬,引⼊依赖包<!--mail--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>实现类import com.sun.mail.imap.IMAPFolder;import com.sun.mail.imap.protocol.IMAPProtocol;import org.apache.tomcat.util.http.fileupload.IOUtils;import org.springframework.util.ObjectUtils;import javax.mail.*;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeUtility;import java.io.*;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.*;public class ShowMail {public static String NORM_DATETIME_PATTERN = "yyyy-MM-dd hh:mm:ss";private MimeMessage mimeMessage;/*** 附件下载后的存放⽬录*/private String saveAttachPath = "";/*** 存放邮件内容的StringBuffer对象*/private StringBuffer bodyText = new StringBuffer();/*** 构造函数,初始化⼀个MimeMessage对象** @param mimeMessage*/public ShowMail(MimeMessage mimeMessage) {this.mimeMessage = mimeMessage;}/*** 获得发件⼈的地址和姓名** @return* @throws MessagingException*/public String getFrom() throws MessagingException {InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom();String from = address[0].getAddress();if (from == null) {from = "";}String personal = address[0].getPersonal();if (personal == null) {personal = "";}String fromAddr = null;if (personal != null || from != null) {fromAddr = personal + "<" + from + ">";}return fromAddr;}/*** 获得邮件的收件⼈,抄送,和密送的地址和姓名,根据所传递的参数的不同** @param type "to"----收件⼈ "cc"---抄送⼈地址 "bcc"---密送⼈地址* @return* @throws MessagingException* @throws UnsupportedEncodingException*/public String getMailAddress(String type) throws MessagingException, UnsupportedEncodingException { if (ObjectUtils.isEmpty(type)) {return "";}String addType = type.toUpperCase();if (!addType.equals("TO") && !addType.equals("CC") && !addType.equals("BCC")) {return "";}InternetAddress[] address;if (addType.equals("TO")) {address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.TO);} else if (addType.equals("CC")) {address = (InternetAddress[]) mimeMessage.getRecipients();} else {address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.BCC);}if (ObjectUtils.isEmpty(address)) {return "";}StringBuilder mailAddr = new StringBuilder();String emailAddr;String personal;for (int i = 0; i < address.length; i++) {emailAddr = address[i].getAddress();if (emailAddr == null) {emailAddr = "";} else {emailAddr = MimeUtility.decodeText(emailAddr);}personal = address[i].getPersonal();if (personal == null) {personal = "";} else {personal = MimeUtility.decodeText(personal);}mailAddr.append(",").append(personal).append("<").append(emailAddr).append(">");}return mailAddr.toString().substring(1);}/*** 获得邮件主题** @return* @throws MessagingException* @throws UnsupportedEncodingException*/public String getSubject() throws MessagingException, UnsupportedEncodingException {String subject = MimeUtility.decodeText(mimeMessage.getSubject());if (subject == null) {subject = "";}return subject;}/*** 获得邮件发送⽇期** @return* @throws MessagingException*/public String getSentDate() throws MessagingException {Date sentDate = mimeMessage.getSentDate();SimpleDateFormat format = new SimpleDateFormat(NORM_DATETIME_PATTERN);return format.format(sentDate);}/*** 获得邮件正⽂内容** @return*/public String getBodyText() {return bodyText.toString();}/*** 解析邮件,把得到的邮件内容保存到⼀个StringBuffer对象中,解析邮件* 主要是根据MimeType类型的不同执⾏不同的操作,⼀步⼀步的解析* @param part* @throws MessagingException* @throws IOException*/public void getMailContent(Part part) throws MessagingException, IOException {String contentType = part.getContentType();int nameIndex = contentType.indexOf("name");boolean conName = false;if (nameIndex != -1) {conName = true;}if (part.isMimeType("text/plain") && conName == false) {bodyText.append((String) part.getContent());} else if (part.isMimeType("text/html") && conName == false) {bodyText.append((String) part.getContent());} else if (part.isMimeType("multipart/*")) {Multipart multipart = (Multipart) part.getContent();int counts = multipart.getCount();for (int i = 0; i < counts; i++) {this.getMailContent(multipart.getBodyPart(i));}} else if (part.isMimeType("message/rfc822")) {this.getMailContent((Part) part.getContent());}}/*** 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"** @return* @throws MessagingException*/public boolean getReplySign() throws MessagingException {boolean replySign = false;String needReply[] = mimeMessage.getHeader("Disposition-Notification-To");if (needReply != null) {replySign = true;}return replySign;}/*** 判断此邮件是否已读,如果未读返回false,反之返回true** @return* @throws MessagingException*/public boolean isNew() throws MessagingException {boolean isNew = false;Flags flags = mimeMessage.getFlags();Flags.Flag[] flag = flags.getSystemFlags();for (int i = 0; i < flag.length; i++) {if (flag[i] == Flags.Flag.SEEN) {isNew = true;}}return isNew;}/*** 判断此邮件是否包含附件** @param part* @return* @throws MessagingException* @throws IOException*/public boolean isContainAttach(Part part) throws MessagingException, IOException { boolean attachFlag = false;if (part.isMimeType("multipart/*")) {Multipart mp = (Multipart) part.getContent();BodyPart mPart;String conType;for (int i = 0; i < mp.getCount(); i++) {mPart = mp.getBodyPart(i);String disposition = mPart.getDisposition();if (Part.ATTACHMENT.equals(disposition) || Part.INLINE.equals(disposition)) {} else if (mPart.isMimeType("multipart/*")) {attachFlag = this.isContainAttach(mPart);} else {conType = mPart.getContentType();if (conType.toLowerCase().indexOf("application") != -1 || conType.toLowerCase().indexOf("name") != -1){ attachFlag = true;}}}} else if (part.isMimeType("message/rfc822")) {attachFlag = isContainAttach((Part) part.getContent());}return attachFlag;}/*** 保存附件** @param part* @throws MessagingException* @throws IOException*/public void saveAttachMent(Part part) throws MessagingException, IOException {String fileName;if (part.isMimeType("multipart/*")) {Multipart mp = (Multipart) part.getContent();BodyPart mPart;for (int i = 0; i < mp.getCount(); i++) {mPart = mp.getBodyPart(i);String disposition = mPart.getDisposition();if (Part.ATTACHMENT.equals(disposition) || Part.INLINE.equals(disposition)) {fileName = mPart.getFileName();if (null != fileName && fileName.toLowerCase().indexOf("gb2312") != -1) {fileName = MimeUtility.decodeText(fileName);}this.saveFile(fileName, mPart.getInputStream());} else if (mPart.isMimeType("multipart/*")) {this.saveAttachMent(mPart);} else {fileName = mPart.getFileName();if ((fileName != null) && (fileName.toLowerCase().indexOf("GB2312") != -1)) {fileName = MimeUtility.decodeText(fileName);this.saveFile(fileName, mPart.getInputStream());}}}} else if (part.isMimeType("message/rfc822")) {this.saveAttachMent((Part) part.getContent());}}/*** 设置附件存放路径** @param attachPath*/public void setAttachPath(String attachPath) {this.saveAttachPath = attachPath;}/*** 获得附件存放路径** @return*/public String getAttachPath() {return saveAttachPath;}/*** 真正的保存附件到指定⽬录⾥** @param fileName* @param in* @throws IOException*/private void saveFile(String fileName, InputStream in) throws IOException {String osName = System.getProperty("");String storeDir = this.getAttachPath();if (null == osName) {osName = "";}if (osName.toLowerCase().indexOf("win") != -1) {if (ObjectUtils.isEmpty(storeDir))} else {storeDir = "/tmp";}// fileName=fileName.replace("=?", "");// fileName=fileName.replace("?=", "");// fileName = fileName.substring(fileName.length() - 6, fileName.length());FileOutputStream fos = new FileOutputStream(new File(storeDir + File.separator + fileName));IOUtils.copy(in, fos);IOUtils.closeQuietly(fos);IOUtils.closeQuietly(in);}/*** 获取163邮箱信息** @param host* @param username* @param password* @param protocol* @return* @throws MessagingException*/public static Message[] getWEMessage(String host, String username, String password, String protocol) throws MessagingException { //创建属性对象Properties props = System.getProperties();props.setProperty("mail.store.protocol", protocol);//创建会话Session session = Session.getDefaultInstance(props, null);//存储对象Store store = session.getStore(protocol);//连接store.connect(host, username, password);//创建⽬录对象Folder folder = store.getFolder("INBOX");if (folder instanceof IMAPFolder) {IMAPFolder imapFolder = (IMAPFolder)folder;//javamail中使⽤id命令有校验checkOpened, 所以要去掉id⽅法中的checkOpened();imapFolder.doCommand(new IMAPFolder.ProtocolCommand() {public Object doCommand(IMAPProtocol p) throws com.sun.mail.iap.ProtocolException {p.id("FUTONG");return null;}});}if(folder != null) {folder.open(Folder.READ_WRITE);}return folder.getMessages();}/*** 获取qq邮箱信息** @param host* @param username* @param password* @param protocol* @return* @throws MessagingException*/public static Message[] getQQMessage(String host, String username, String password, String protocol) throws MessagingException { //创建属性对象Properties props = new Properties();props.put("mail.store.protocol", protocol);//创建会话Session session = Session.getDefaultInstance(props, null);//存储对象Store store = session.getStore(protocol);//连接store.connect(host,username,password);//创建⽬录对象Folder folder = store.getFolder("Inbox");if(folder != null) {folder.open(Folder.READ_WRITE);}return folder.getMessages();}/*** 过滤邮箱信息** @param messages* @param fromMail 只读取该邮箱发来的邮件,如果为空则不过滤* @param startDate 只读取该⽇期以后的邮件,如果为空则不过滤* @return* @throws MessagingException*/public static List<Message> filterMessage(Message[] messages, String fromMail, String startDate) throws MessagingException, ParseException {List<Message> messageList = new ArrayList<>();if (ObjectUtils.isEmpty(messages)) {return messageList;}boolean isEnptyFromMail = ObjectUtils.isEmpty(fromMail);boolean isEnptyStartDate = ObjectUtils.isEmpty(startDate);if (isEnptyFromMail && isEnptyStartDate) {return Arrays.asList(messages);}String from;for (Message message: messages) {from = null;if(message.getFrom() != null) {from = (message.getFrom()[0]).toString();}if (isEnptyFromMail) {if (message.getSentDate() != null && new SimpleDateFormat(NORM_DATETIME_PATTERN).parse(startDate).getTime() > message.getSentDate().getTime()) { continue;}} else if (null != from && from.contains(fromMail)) {if (!isEnptyStartDate && new SimpleDateFormat(NORM_DATETIME_PATTERN).parse(startDate).getTime() > message.getSentDate().getTime()) {continue;}} else {continue;}messageList.add(message);}return messageList;}/*** 打印邮件** @param messageList* @throws IOException* @throws MessagingException*/public static void printMailMessage(List<Message> messageList) throws IOException, MessagingException {System.out.println("邮件数量:" + messageList.size());ShowMail re;Message message;for (int i = 0, leng = messageList.size(); i < leng; i++) {message = messageList.get(i);re = new ShowMail((MimeMessage) message);System.out.println("邮件【" + i + "】主题:" + re.getSubject());System.out.println("邮件【" + i + "】发送时间:" + re.getSentDate());System.out.println("邮件【" + i + "】是否需要回复:" + re.getReplySign());System.out.println("邮件【" + i + "】是否已读:" + re.isNew());System.out.println("邮件【" + i + "】是否包含附件:" + re.isContainAttach( message));System.out.println("邮件【" + i + "】发送⼈地址:" + re.getFrom());System.out.println("邮件【" + i + "】收信⼈地址:" + re.getMailAddress("to"));System.out.println("邮件【" + i + "】抄送:" + re.getMailAddress("cc"));System.out.println("邮件【" + i + "】暗抄:" + re.getMailAddress("bcc"));System.out.println("邮件【" + i + "】发送时间:" + re.getSentDate());System.out.println("邮件【" + i + "】邮件ID:" + ((MimeMessage) message).getMessageID());re.getMailContent(message);System.out.println("邮件【" + i + "】正⽂内容:\r\n" + re.getBodyText());re.setAttachPath("D:\\Download\\mailFile\\");re.saveAttachMent(message);}}public static void main(String[] args) throws MessagingException, IOException, ParseException {//163登录信息//邮件服务器String host = "";//邮箱账号String username = "xx";//授权码String password = "yy";//协议String protocol = "imaps";//只读取该邮箱发来的邮件String fromMail = null;//只读取该⽇期以后的邮件String startDate = null;List<Message> messageList = filterMessage(getWEMessage(host, username, password, protocol), fromMail, startDate);printMailMessage(messageList);String host2 = "";String username2 = "xx";String password2 = "yy";// String protocol2 = "imaps";String protocol2 = "pop3";String fromMail2 = null;String startDate2 = null;List<Message> messageList2 = filterMessage(getQQMessage(host2, username2, password2, protocol2), fromMail2, startDate2); printMailMessage(messageList2);}}2.配置授权码163邮箱:qq邮箱:3.实现效果:运⾏main⽅法,查看控制台:邮件数量:xx邮件【0】主题:欢迎您使⽤xx邮箱!邮件【0】发送时间:xx邮件【0】是否需要回复:false邮件【0】是否已读:true邮件【0】是否包含附件:false邮件【0】发送⼈地址:xx邮件【0】收信⼈地址:xx邮件【0】抄送:邮件【0】暗抄:邮件【0】发送时间:xx邮件【0】邮件ID:xx邮件【0】正⽂内容:<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>欢迎使⽤</title><style>body, div, p, img {padding: 0;margin: 0;font-family: 'Microsoft Yahei', "PingFang SC", "Hiragino Sans GB", "wenquanyi micro hei", Arial, Helvetica, "STHeiti", sans-serif; }.contain {width: 700px;margin: 0 auto;font-size: 0;}.wrap {position: relative;}.wrap .welcome {position: absolute;width: 290px;left: 75px;top: 100px;font-size: 18px;color: #fff;line-height: 32px;font-weight: 500;}.wrap .welcome p.indentation {font-size: 16px;font-weight: normal;}.wrap a {position: absolute;display: block;width: 104px;height: 39px;}.wrap a.mobile{left: 501px;top: 434px;}left: 501px;top: 485px;}</style></head><body><div class="contain"><div class="wrap"><div class="welcome"><p class="indentation-title">尊敬的xx:</p><p class="indentation">您好,您的邮箱已开通。
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服务。
第25卷第3期 计算机应用与软件Vo l 25No .32008年3月 Co m puter Applicati o ns and Soft w are M ar .2008使用JavaM ail/J AF 开发中文邮件系统的关键技术研究袁梅冷 聂 哲(深圳职业技术学院软件工程系 广东深圳518055)收稿日期:2006-04-13。
袁梅冷,讲师,主研领域:J 2EE 技术,电子商务等。
摘 要 Java M ail 提供了对邮件收发核心流程很好的支持,但在开发实用邮件系统过程中,必然会遇到Java M a il 本身并不支持的如嵌套邮件内容解释、M I M E 类型数据处理框架结构、中文乱码等技术难题。
在全面研究基于Java 技术的邮件系统开发的基础上,给出了通用的解决方案和实现要点。
关键词Java M ail J AF 中文乱码 邮件系统RES EARCH ON THE KEY TEC HNOLOG I ES IN THE DEVELOPM ENTOF CH INES E E MA IL S YSTEM BASED ON J AVAMA IL AND J AFYuanM eileng N ie Zhe(D e part m ent of S oft w are Engineeri ng,Colle g e of Sh e nzh e n P ol y t echnic ,Sh e nzhen 518055,Guangdong,China )Abstrac t Java M a il facilita tes the deve l op m en t o f E m ail Sy stem .H ow eve r ,during the develop m ent o f practi ca l E m a il syste m,so m e proble m s such as t he pars i ng o f nesti ng e m a il content ,t he process fra m ework o f data o fM I M E type ,and the unreadab le Ch i nese cha rs can not be supported by Java M a i.l G enera l so l utions to t hese prob l em s are presented ,and the key techno l og i es are prov i ded .K eywordsJava M ail JavaBeans A cti vation Fra m ewo rk(J A F) U nreadable ch i nese cha rs E m ail syste m0 引 言Java 语言作为一种强大的网络编程语言,为支持邮件系统的开发推出了Java M ail 开发包,极大地简化了基于Java 技术的邮件系统的开发。
以下为Mail。
java的全部代码:package com.zlz3907。
mail;import java。
io。
BufferedReader;import java。
io。
File;import java。
io.FileInputStream;import java.io。
FileNotFoundException;import java.io。
IOException;import java.io.InputStream;import java.io。
InputStreamReader;import java.io。
PrintWriter;import java。
io.UnsupportedEncodingException;import .Socket;import java。
nio。
charset。
Charset;import java。
text.SimpleDateFormat;import java。
util。
ArrayList;import java.util.Date;import java。
util。
HashMap;import java.util.List;import java。
util。
Map;import sun。
misc。
BASE64Encoder;/*** 该类使用Socket连接到邮件服务器,* 并实现了向指定邮箱发送邮件及附件的功能。
**@author Zhong Lizhi*/public class Mail {/*** 换行符*/private static final String LINE_END = "\r\n”;/*** 值为“true”输出高度信息(包括服务器响应信息),值为“*false”则不输出调试信息.*/private boolean isDebug = true;/*** 值为“true”则在发送邮件{@link Mail#send()}* 过程中会读取服务器端返回的消息,* 并在邮件发送完毕后将这些消息返回给用户。
Java编写email实现内容换⾏⽤java编写的发送邮件要使⽤<br>来实现换⾏,⽽不能使⽤\n,或者\r\n// 5. Content: 邮件正⽂(可以使⽤html标签)(内容有⼴告嫌疑,避免被邮件服务器误认为是滥发⼴告以⾄返回失败,请修改发送内容)message.setContent("会员注册通知!<br>尊敬⽤户你好,您于"+dateStringParse+"申请注册为我⽹会员,注册码为:895146,如⾮本⼈操作请勿理睬!", "text/html;charset=UTF-8");常⽤:第⼀种:使⽤System.out.println()//这是换⼀⾏。
第⼆种:使⽤System.out.print("\n");//这也是换⼀⾏.第⼀种和第⼆种差不多。
只是,如果你要换两⾏,三⾏,多⾏的话。
就⽤:System.out.println("\n\n");换两⾏换三⾏:System.out.println("\n\n"\n);关于换⾏的Java代码:1.问题windows平台的换⾏符为/r/n;linux平台的换⾏符为/n;java程序中如何将不同平台⽤户输⼊的换⾏符转换成特定系统的换⾏符.2.解答java 代码1. String userInputString = userInput;2. userInputString = userInputString.replaceAll ( "\r", "" );3. userInputString = userInputString.replaceAll ( "\n", "\\\\"+System.getPropert("line.separator"));。
java使用outlook发邮件要使用Java发送Outlook邮件,您需要使用JavaMail API和Microsoft Exchange服务器。
以下是一个示例代码,可以帮助您开始:```javaimport java.util.Properties;import javax.mail.Message;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;public class SendEmailpublic static void main(String[] args)String port = "587";String password = "your_password";//配置发送邮件的属性Properties props = new Properties(;props.put("mail.smtp.starttls.enable", "true");props.put("mail.smtp.auth", "true");props.put("mail.smtp.host", host);props.put("mail.smtp.port", port);//创建会话对象Session session = Session.getInstance(props, new javax.mail.Authenticatoprotected javax.mail.PasswordAuthentication getPasswordAuthenticatioreturn new javax.mail.PasswordAuthentication(username, password);}});try// 创建MimeMessage对象Message message = new MimeMessage(session);message.setFrom(new InternetAddress(username));message.setSubject("邮件主题");message.setText("邮件内容");//发送邮件Transport.send(message);System.out.println("邮件发送成功");} catch (Exception e)System.out.println("邮件发送失败");e.printStackTrace(;}}```此示例仅发送简单的文本邮件。