JavaMail的介绍

JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。

   虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在使用前必须另外下载JavaMail文件。除此以外,你还需要有Sun的JavaBeans Activation Framework (JAF)。JavaBeans Activation Framework的运行很复杂,在这里简单的说就是JavaMail的运行必须得依赖于它的支持。在Windows 2000下使用需要指定这些文件的路径,在其它的操作系统上也类似。

   JavaMail是可选包,因此如果需要使用的话你需要首先从java.sun.com下载。目前最新版本是JavaMail1.4,使用JavaMail的时候需要Javabean Activation Framework的支持,因此你也需要下载JAF。安装JavaMail只是需要把他们加入到CLASSPATH中去,如果你不想修改CLASSPATH的话,可以直接把他们的jar包直接copy到JAVA_HOME/lib/ext下。这样JavaMail就安装好了。
 
  JavaMail包中用于处理电子邮件的核心类是:Session,Message,Address,Authenticator,Transport,Store,Folder等。Session定义了一个基本的邮件会话,它需要从Properties中读取类似于邮件服务器,用户名和密码等信息

1.邮件协议

主要包括:

SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件

POP3协议:Post Office Protocol 3,即邮局协议的第三个版本,用于接收邮件

IMAP协议:Internet Message Access Protocol,即互联网消息访问协议,是POP3的替代协议

2.搭建James邮件服务器

James是Apache的一个开源项目,纯Java实现

搭建James服务器

1)下载apache-james-2.3.2.zip解压

2)运行bin目录下的run.bat即可启动服务器

3) 通过apps\james\SAR-INF\config.xml配置服务器

一定注意:先到bin下run一道 放如非中文目录  得再控制面板开启Telnet客户端

Telnet  localhost 4555

3.安装OutLook[邮件客户端]

产品秘钥:PQDV9-GPDV4-CRM4D-PHDTH-4M2MT

创建用户账号

一、使用telnet连接James的Remote Administration Tool

二、以管理员身份登录

三、使用adduser命令添加用户

4.配置outlook邮件客户端

为了方便查看,可以配置Microsoft Outlook邮件客户端,保证James邮件服务器是启动状态,启动Microsoft Outlook.

选择“工具”->“选项”,打开“选项”面板。选择“邮件设置”并点击“电子邮件账户”,打开“账号设置”面板。在“电子邮件”选项卡下新建邮件账户

5.案例[搭建James邮件服务器]

需求说明:

在本机搭建James邮件服务器,自定义服务器的名称。

创建两个测试用户。

在Microsoft Outlook中配置其中一个测试用户为Outlook邮件账户

6.使用JavaMail发送电子邮件(案例)

需求:

使用JavaMail技术,实现从A账户给B账户发送一封电子邮件,标题为“会议通知”,邮件内容为“XX你好!请于明天下午16:00 准时到B01会议室召开技术讨论会。”通过Outlook 客户端查看邮件程序发送的邮件是否发送成功

关键代码:

创建一个类EmailAuthenticator并继承自Authenticator,并植入用户名和密码

  1. package cn.mail;
  2.  
  3. import javax.mail.Authenticator;
  4. import javax.mail.PasswordAuthentication;
  5.  
  6. public class EmailAuthenticator extends Authenticator {
  7. private String username;
  8.  
  9. private String userpass;
  10.  
  11. public void setUsername(String username) {
  12. this.username = username;
  13. }
  14.  
  15. public void setUserpass(String userpass) {
  16. this.userpass = userpass;
  17. }
  18.  
  19. public EmailAuthenticator() {
  20. }
  21.  
  22. public EmailAuthenticator(String username, String userpass) {
  23. this.username = username;
  24. this.userpass = userpass;
  25. }
  26. public PasswordAuthentication getPasswordAuthentication(){
  27. return new PasswordAuthentication(username,userpass);
  28. }
  29.  
  30. }

创建Mail类设置邮件信息:

  1. package cn.mail;
  2.  
  3. import java.util.Date;
  4. import java.util.Properties;
  5.  
  6. import javax.mail.Authenticator;
  7. import javax.mail.Message;
  8. import javax.mail.Session;
  9. import javax.mail.Transport;
  10. import javax.mail.internet.InternetAddress;
  11. import javax.mail.internet.MimeMessage;
  12.  
  13. public class Mail {
  14. private String mailServer,from,to,mailSubject,mailContent;
  15. private String username,password;
  16. public Mail(){
  17. //设置邮件信息
  18. //进行认证登录的用户名
  19. username="zt@mail.com";
  20. //认证密码
  21. password="zt";
  22. //认证的邮箱对应的邮件服务器
  23. mailServer="192.168.17.173";
  24. //发件人信息
  25. from="zt";
  26. //收件人信息
  27. to="jpp@mail.com";
  28. //邮件标题
  29. mailSubject="呵呵";
  30. //邮件内容
  31. mailContent="呵呵火狐";
  32. }
  33. //设置邮件服务器
  34. @SuppressWarnings("static-access")
  35. public void send(){
  36. Properties prop=System.getProperties();
  37. //指定邮件server
  38. prop.put("mail.smtp.host", mailServer);
  39.  
  40. //是否开启认证
  41. prop.put("mail.smtp.auth", "true");
  42.  
  43. //smtp协议的
  44. prop.put("mail.smtp.port", "25");
  45. //产生Session服务
  46. EmailAuthenticator mailauth=new EmailAuthenticator(username, password);
  47. Session mailSession=Session.getInstance(prop,(Authenticator)mailauth);
  48. try {
  49. //封装Message对象
  50. Message message=new MimeMessage(mailSession);
  51.  
  52. message.setFrom(new InternetAddress(from)); //发件人
  53. message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//收件人
  54. message.setSubject(mailSubject);
  55. //设置内容(设置字符集处理乱码问题)
  56. message.setContent(mailContent,"text/html;charset=gbk");
  57. message.setSentDate(new Date());
  58. //创建Transport实例,发送邮件
  59. Transport tran=mailSession.getTransport("smtp");
  60. tran.send(message,message.getAllRecipients());
  61. tran.close();
  62.  
  63. } catch (Exception e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. }

测试类:

  1. package cn.mail;
  2.  
  3. public class Test {
  4. public static void main(String[] args) {
  5. Mail mail=new Mail();
  6. mail.send();
  7. System.out.println("success!");
  8. }
  9.  
  10. }

发送带附件的Mail

MailWithAttachment:

  1. package cn.bdqn;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.mail.MessagingException;
  6. import javax.mail.internet.MimeMessage;
  7. import javax.mail.internet.MimeUtility;
  8.  
  9. import org.springframework.core.io.ClassPathResource;
  10. import org.springframework.mail.javamail.JavaMailSender;
  11. import org.springframework.mail.javamail.MimeMessageHelper;
  12.  
  13. public class MailWithAttachment {
  14. private JavaMailSender mailSender; //必须使用 JavaMailSender
  15. public void setMailSender(JavaMailSender mailSender) {
  16. this.mailSender = mailSender;
  17. }
  18.  
  19. public void send() throws MessagingException,IOException{
  20. MimeMessage mimeMessage = mailSender.createMimeMessage();
  21. MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
  22. helper.setFrom("zt@mail.com");
  23. helper.setTo("jpp@mail.com");
  24.  
  25. helper.setSubject("问好");
  26. helper.setText("好久不见,最近好吗?");
  27. //添加附件1
  28. ClassPathResource file1 = new ClassPathResource(
  29. "/cn/bdqn/attachfiles/test.doc");
  30. helper.addAttachment(file1.getFilename(), file1.getFile());
  31. //添加附件2:附件的文件名为中文时,需要对文件名进行编码转换,解决乱码问题
  32. ClassPathResource file2 = new ClassPathResource(
  33. "/cn/bdqn/attachfiles/附件测试文件.doc");
  34. helper.addAttachment(MimeUtility.encodeWord(file2.getFilename()),file2.getFile());
  35. mailSender.send(mimeMessage);
  36. }
  37. }

测试类:

  1. package cn.bdqn;
  2.  
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
  6. public class MailTest {
  7. public static void main(String[] args){
  8. ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  9.  
  10. /*测试带附件的邮件*/
  11. try{
  12. MailWithAttachment mailWithAttach = (MailWithAttachment)context.getBean("mailWithAttachment");
  13. mailWithAttach.send();
  14. }catch(Exception e){
  15. System.out.print(e.toString());
  16. }
  17. }
  18. }

applicationContext.xml:大配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
  7. <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  8. <property name="host" value="192.168.17.173"></property><!-- 服务器 -->
  9. <property name="port" value="25"></property><!-- 端口 -->
  10. <property name="username" value="jpp"></property><!-- 用户名 -->
  11. <property name="password" value="jpp"></property><!-- 密码 -->
  12. <property name="protocol" value="smtp" ></property><!-- 协议 -->
  13. <property name="defaultEncoding" value="utf-8"></property><!-- 默认编码 -->
  14. <property name="javaMailProperties">
  15. <props>
  16. <!-- 设置SMTP服务器需要用户验证 -->
  17. <prop key="mail.smtp.auth">true</prop>
  18. </props>
  19. </property>
  20. </bean>
  21.  
  22. <bean id="mailWithAttachment" class="cn.bdqn.MailWithAttachment">
  23. <property name="mailSender" ref="mailSender"></property>
  24. </bean>
  25.  
  26. </beans>

发送带图片的mail

Mail.com

  1. package cn.bdqn.pojo;
  2.  
  3. import java.io.File;
  4.  
  5. public class Mail {
  6. private String from;
  7. private String to;
  8. private String subject;
  9. private String content;
  10. private File file;
  11. private String fileName;
  12.  
  13. public Mail(){}
  14. public Mail(String from, String to, String subject, String content, File file, String fileName){
  15. this.from = from;
  16. this.to = to;
  17. this.subject = subject;
  18. this.content = content;
  19. this.file = file;
  20. this.fileName = fileName;
  21. }
  22. public String getFrom() {
  23. return from;
  24. }
  25. public void setFrom(String from) {
  26. this.from = from;
  27. }
  28. public String getTo() {
  29. return to;
  30. }
  31. public void setTo(String to) {
  32. this.to = to;
  33. }
  34. public String getSubject() {
  35. return subject;
  36. }
  37. public void setSubject(String subject) {
  38. this.subject = subject;
  39. }
  40. public String getContent() {
  41. return content;
  42. }
  43. public void setContent(String content) {
  44. this.content = content;
  45. }
  46. public File getFile() {
  47. return file;
  48. }
  49. public void setFile(File file) {
  50. this.file = file;
  51. }
  52. public String getFileName() {
  53. return fileName;
  54. }
  55. public void setFileName(String fileName) {
  56. this.fileName = fileName;
  57. }
  58.  
  59. }

MailService:

  1. package cn.bdqn.service;
  2.  
  3. import javax.mail.internet.MimeMessage;
  4. import javax.mail.internet.MimeUtility;
  5.  
  6. import org.springframework.mail.javamail.JavaMailSender;
  7. import org.springframework.mail.javamail.MimeMessageHelper;
  8.  
  9. import cn.bdqn.pojo.Mail;
  10.  
  11. public class MailService {
  12. private JavaMailSender mailSender;
  13.  
  14. public void setMailSender(JavaMailSender mailSender) {
  15. this.mailSender = mailSender;
  16. }
  17. public void sendMail(Mail mail){
  18. try{
  19. MimeMessage mimeMessage = mailSender.createMimeMessage();
  20. MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
  21. helper.setFrom("jpp@mail.com");
  22. helper.setTo(mail.getTo());
  23.  
  24. helper.setSubject(mail.getSubject());
  25. helper.setText(mail.getContent());
  26. //(1)要直接使用带后缀的文件名全称, (2)需要处理中文乱码问题
  27. helper.addAttachment(MimeUtility.encodeWord(mail.getFileName()),mail.getFile());
  28. mailSender.send(mimeMessage);
  29. }catch(Exception e){
  30. e.printStackTrace();
  31. }
  32. }
  33. }

SendMailAction:

  1. package cn.bdqn.action;
  2.  
  3. import java.io.File;
  4.  
  5. import cn.bdqn.pojo.Mail;
  6. import cn.bdqn.service.MailService;
  7.  
  8. import com.opensymphony.xwork2.ActionSupport;
  9.  
  10. public class SendMailAction extends ActionSupport{
  11. private static final long serialVersionUID = 1L;
  12.  
  13. private MailService mailService =null;
  14. private String from;
  15. private String to;
  16. private String subject;
  17. private String content;
  18. private File upload;
  19. private String uploadFileName;
  20.  
  21. @Override
  22. public String execute() throws Exception {
  23. Mail mail = new Mail(getFrom(),getTo(),getSubject(),getContent(),getUpload(),getUploadFileName());
  24. mailService.sendMail(mail);
  25.  
  26. return "success";
  27. }
  28.  
  29. public void setMailService(MailService mailService) {
  30. this.mailService = mailService;
  31. }
  32.  
  33. public File getUpload() {
  34. return upload;
  35. }
  36.  
  37. public void setUpload(File upload) {
  38. this.upload = upload;
  39. }
  40. public String getFrom() {
  41. return from;
  42. }
  43.  
  44. public void setFrom(String from) {
  45. this.from = from;
  46. }
  47.  
  48. public String getTo() {
  49. return to;
  50. }
  51.  
  52. public void setTo(String to) {
  53. this.to = to;
  54. }
  55.  
  56. public String getSubject() {
  57. return subject;
  58. }
  59.  
  60. public void setSubject(String subject) {
  61. this.subject = subject;
  62. }
  63.  
  64. public String getContent() {
  65. return content;
  66. }
  67.  
  68. public void setContent(String content) {
  69. this.content = content;
  70. }
  71.  
  72. public String getUploadFileName() {
  73. return uploadFileName;
  74. }
  75.  
  76. public void setUploadFileName(String uploadFileName) {
  77. this.uploadFileName = uploadFileName;
  78. }
  79. }

applicationContext.xml:大配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
  7.  
  8. <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  9. <property name="host" value="192.168.8.71"></property><!-- 服务器 -->
  10. <property name="port" value="25"></property><!-- 端口 -->
  11. <property name="username" value="jpp"></property><!-- 用户名 -->
  12. <property name="password" value="jpp"></property><!-- 密码 -->
  13. <property name="protocol" value="smtp" ></property><!-- 协议 -->
  14. <property name="defaultEncoding" value="utf-8"></property><!-- 默认编码 -->
  15. <property name="javaMailProperties">
  16. <props>
  17. <!-- 设置SMTP服务器需要用户验证 -->
  18. <prop key="mail.smtp.auth">true</prop>
  19. </props>
  20. </property>
  21. </bean>
  22.  
  23. <bean id="mailService" class="cn.bdqn.service.MailService">
  24. <property name="mailSender" ref="mailSender"></property>
  25. </bean>
  26.  
  27. </beans>

struts.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
  3. <struts>
  4. <constant name="struts.i18n.encoding" value="UTF-8"/>
  5. <package name="default" namespace="/" extends="struts-default">
  6. <action name="sendmailAction" class="cn.bdqn.action.SendMailAction">
  7. <result name="success">/sendmail_success.jsp</result>
  8. </action>
  9. </package>
  10.  
  11. </struts>

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="3.0"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  7. <display-name></display-name>
  8. <welcome-file-list>
  9. <welcome-file>index.jsp</welcome-file>
  10. </welcome-file-list>
  11.  
  12. <!-- struts2的配置文件 -->
  13. <filter>
  14. <filter-name>struts2</filter-name>
  15. <filter-class>
  16. org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  17. </filter-class>
  18. </filter>
  19. <filter-mapping>
  20. <filter-name>struts2</filter-name>
  21. <!-- <url-pattern>*.action</url-pattern> -->
  22. <url-pattern>/*</url-pattern>
  23. </filter-mapping>
  24.  
  25. <!-- Spring的配置信息 -->
  26. <context-param>
  27. <param-name>contextConfigLocation</param-name>
  28. <param-value>classpath:applicationContext.xml</param-value>
  29. </context-param>
  30.  
  31. <listener>
  32. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  33. </listener>
  34. <!-- <filter>
  35. <filter-name>OpenSessionInViewFilter</filter-name>
  36. <filter-class>
  37. org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
  38. </filter-class>
  39. </filter> -->
  40. <!-- <filter-mapping>
  41. <filter-name>OpenSessionInViewFilter</filter-name>
  42. <url-pattern>*.action</url-pattern>
  43. </filter-mapping> -->
  44. </web-app>

index.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%@taglib uri="/struts-tags" prefix="s"%>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. %>
  7.  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12.  
  13. <title>邮件发送页</title>
  14. <meta http-equiv="pragma" content="no-cache">
  15. <meta http-equiv="cache-control" content="no-cache">
  16. <meta http-equiv="expires" content="0">
  17. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  18. <meta http-equiv="description" content="This is my page">
  19. <!--
  20. <link rel="stylesheet" type="text/css" href="styles.css">
  21. -->
  22. </head>
  23.  
  24. <body>
  25. <H2>邮件发送</H2><br>
  26. <s:form action="sendmailAction" enctype="multipart/form-data" method="post">
  27. <s:textfield name="from" label="发件人" value="tina@mail.com"/>
  28. <s:textfield name="to" label="收件人"/>
  29. <s:textfield name="subject" label="主题"/>
  30. <s:textarea name="content" label="内容"/>
  31. <s:file name="upload" lable="选择附件"/>
  32. <s:submit name="submit" value="发送邮件"/>
  33. </s:form>
  34.  
  35. </body>
  36. </html>

sendmail_success.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@taglib uri="/struts-tags" prefix="s"%>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. %>
  7.  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12.  
  13. <title>成功页</title>
  14.  
  15. <meta http-equiv="pragma" content="no-cache">
  16. <meta http-equiv="cache-control" content="no-cache">
  17. <meta http-equiv="expires" content="0">
  18. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  19. <meta http-equiv="description" content="This is my page">
  20. <!--
  21. <link rel="stylesheet" type="text/css" href="styles.css">
  22. -->
  23.  
  24. </head>
  25.  
  26. <body>
  27. <H2>邮件发送成功!</H2>
  28. </body>
  29. </html>

Spring JavaMail发送邮件的更多相关文章

  1. 使用spring的JavaMail发送邮件

    以前我们使用JavaMail发送邮件,步骤挺多的.现在的项目跟Spring整合的比较多.所以这里主要谈谈SpringMail发送. 导入jar包. 配置applicationContext-email ...

  2. JavaMail发送邮件第一版

    首先,我们先来了解一个基本的知识点,用什么工具来发邮件? 简单的说一下,目前用的比较多的客户端:OutLook,Foxmail等 顺便了解一下POP3.SMTP协议的区别: POP3,全名为" ...

  3. java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html、velocity模板

    java 利用spring JavaMailSenderImpl发送邮件,支持普通文本.附件.html.velocity模板 博客分类: Java Spring   本文主要介绍利用JavaMailS ...

  4. JAVAEE——BOS物流项目13:Quartz概述、创建定时任务、使用JavaMail发送邮件、HighCharts概述、实现区域分区分布图

    1 学习计划 1.Quartz概述 n Quartz介绍和下载 n 入门案例 n Quartz执行流程 n cron表达式 2.在BOS项目中使用Quartz创建定时任务 3.在BOS项目中使用Jav ...

  5. 使用JavaMail发送邮件-从FTP读取图片并添加到邮件正文发送

    业务分析: 最近工作需要,需要从FTP读取图片内容,添加到邮件正文发送.发送邮件正文,添加附件采用Spring的MimeMessageHelper对象来完成,添加图片也将采用MimeMessageHe ...

  6. 使用JavaMail发送邮件-no object DCH for MIME type multipart/mixed报错解决

    最近需要实现一个使用Spring schedule按一定时间间隔自动触发条件发送邮件的功能,在开发的过程中,是按照先测试能发出text/html文本邮件,然后测试添加附件发送邮件,我碰到的问题是,文本 ...

  7. 47. Spring Boot发送邮件【从零开始学Spring Boot】

    (提供源代码) Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置.下面通过实例看看如何在Spring Bo ...

  8. JavaMail发送邮件

    发送邮件包含的内容有: from字段  --用于指明发件人 to字段      --用于指明收件人 subject字段  --用于说明邮件主题 cc字段     -- 抄送,将邮件发送给收件人的同时抄 ...

  9. web应用中使用JavaMail发送邮件

    现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...

随机推荐

  1. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  2. C# 复制PDF页面到另一个PDF文档

    C# 复制PDF页面到另一个PDF文档 有时候我们可能有这样一个需求,那就是把PDF页面从一个PDF文档复制到另一个PDF文档中.由于PDF文档并不像word文档那样好编辑,因此复制也相对没有那么容易 ...

  3. url 编码(percentcode 百分号编码)(转载)

    原文地址:http://www.cnblogs.com/leaven/archive/2012/07/12/2588746.html   http://www.imkevinyang.com/2009 ...

  4. docker进入后台运行的容器

    转载请注明出处   我们运行docker容器的时候,使用了-d参数,把容器在后台运行后. 这个时候,我们使用docker ps命令,我们就可以知道哪些程序在后台运行.   我们要怎么进入到docker ...

  5. Effective前端3:用CSS画一个三角形

    p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...

  6. ChatSecure

    ChatSecure是一个免费和开源消息传递应用程序的特性 OTR加密在 XMPP. 你可以连接到现有的谷歌帐户或创建新帐户 公共XMPP服务器(包括通过 Tor),甚至 连接到您自己的服务器额外的安 ...

  7. C# - 多线程 之 异步编程

    异步编程 同步编程,请求响应模型,同步化.顺序化.事务化. 异步编程,事件驱动模型,以 Fire and Forget 方式实现. 异步编程模式  -§- 异步编程模型 (APM) 模式: IAsyn ...

  8. spider RPC框架的需求来源与特性介绍(一)

    spider RPC 特性介绍 spider RPC 性能测试 spider RPC 入门指南 spider RPC 配置文件参考 spider RPC 开发指南 spider RPC 安全性 spi ...

  9. Microsoft.CodeAnalysis 入门

    1 安装 Microsoft.CodeAnalysis 我这里创建的是WPF的项目,首先再VS2015中用NuGet控制台进行安装 Install-Package Microsoft.CodeAnal ...

  10. 基于Cesium1.26地图API下的GeoServer2.9.0服务器跨域设置

    遇到的问题: 最近基于Cesium来做3D模型的地图开发,在访问自己发布的WMS服务之后,遇到了GeoServer跨域问题. 调用这个WMS服务的时候,浏览器(我用Chrome)开发者工具报错: 控制 ...