Comp.Graphics.Algorithms Frequently Asked Questions
http://web.archive.org/web/20110410051750/http://www.exaflop.org/docs/cgafaq/
https://github.com/Toblerity/Fiona
https://github.com/Toblerity/Shapely
2017年12月15日星期五
tkinter和matplotlib在mac下的一个问题
http://blog.csdn.net/vincent2610/article/details/68062034
在mac python中,将matplotlib嵌入Tkinter时出现错误
解决方法
在mac python中,将matplotlib嵌入Tkinter时出现错误
解决方法
import matplotlib
matplotlib.use("TkAgg")
在import matplotlib
后紧接着的下一行写上matplotlib.use("TkAgg")
注意是紧接着的下一行,
并且保证这两句写在import matplotlib.pyplot as plt
的前面
2017年12月7日星期四
2017年10月23日星期一
使用cmake源代码安装libnfc
- http://tiehichi.me/2017/07/04/archives/nfc_0/
源码安装
其实源码安装也很简单粗暴,在Raspbian上也没有遇到什么莫名其妙的问题。
首先安装CMake,如果已经安装了请忽略这一步:
然后sudo apt-get install cmakecd
到libnfc的源码目录中,建立一个build文件夹,在build文件夹中进行编译安装:
至此libnfc安装完成。mkdir buildcd buildcmake ..makesudo make installsudo ldconfig
2017年10月22日星期日
2017年9月29日星期五
fzf
1、项目主页
https://github.com/junegunn/fzf
2、关于搜索内容重复的讨论
zsh Ctrl+R must use option HIST_FIND_NO_DUPS
ctrl+r history results should be unique by command
ctrl+r history results should be unique by command
Bash history: “ignoredups” and “erasedups” setting conflict with common history across sessions
3、入门
https://codeyarns.com/2017/10/24/how-to-install-and-use-fzf/
https://segmentfault.com/a/1190000011328080
https://sourabhbajaj.com/mac-setup/iTerm/fzf.html
4、iterm2中快捷键失效的解决方法
https://superuser.com/questions/320065/bashrc-not-sourced-in-iterm-mac-os-x
https://github.com/junegunn/fzf
2、关于搜索内容重复的讨论
zsh Ctrl+R must use option HIST_FIND_NO_DUPS
ctrl+r history results should be unique by command
ctrl+r history results should be unique by command
Bash history: “ignoredups” and “erasedups” setting conflict with common history across sessions
3、入门
https://codeyarns.com/2017/10/24/how-to-install-and-use-fzf/
https://segmentfault.com/a/1190000011328080
https://sourabhbajaj.com/mac-setup/iTerm/fzf.html
4、iterm2中快捷键失效的解决方法
https://superuser.com/questions/320065/bashrc-not-sourced-in-iterm-mac-os-x
2017年9月24日星期日
2017年9月15日星期五
常用的EPSG
http://spatialreference.org/ref/epsg/2385/
EPSG:2385
Xian 1980 / 3-degree Gauss-Kruger CM 120E
EPSG:2384
Xian 1980 / 3-degree Gauss-Kruger CM 117E
EPSG:4326
WGS 84
EPSG:4548
CGCS2000 / 3-degree Gauss-Kruger CM 117E
EPSG:4547
CGCS2000 / 3-degree Gauss-Kruger CM 114E
EPSG:2385
Xian 1980 / 3-degree Gauss-Kruger CM 120E
EPSG:2384
Xian 1980 / 3-degree Gauss-Kruger CM 117E
EPSG:4326
WGS 84
EPSG:4548
CGCS2000 / 3-degree Gauss-Kruger CM 117E
EPSG:4547
CGCS2000 / 3-degree Gauss-Kruger CM 114E
gdal中文出错
在C#中使用GDAL库时读取中文路径的问题
http://lists.osgeo.org/pipermail/gdal-dev/2014-January/037829.html
https://lists.osgeo.org/pipermail/gdal-dev/2011-March/028068.html
程序假定文件名的编码是utf8,所以在windows中会出问题,
解决方法:在设置环境变量,例如在命令窗口中临时设置
set GDAL_FILENAME_IS_UTF8=NO
http://lists.osgeo.org/pipermail/gdal-dev/2014-January/037829.html
https://lists.osgeo.org/pipermail/gdal-dev/2011-March/028068.html
程序假定文件名的编码是utf8,所以在windows中会出问题,
解决方法:在设置环境变量,例如在命令窗口中临时设置
set GDAL_FILENAME_IS_UTF8=NO
2017年8月11日星期五
2017年8月8日星期二
vim 相关知识
1、简短的教程
http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html
2、 _vimrc 基本配置
set fileencodings=utf-8,utf-16,gbk,big5,gb18030,latin1 "自动猜测文件编码
syntax on " 自动语法高亮
set number " 显示行号
filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab
"Open command prompt by running :Cp
command Dos :!start cmd /k cd %:p:h<CR>
"Open windows explorer by running :We
command We :!start Explorer /select,%:p<CR>
3、技巧
4、http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches
http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html
2、 _vimrc 基本配置
set fileencodings=utf-8,utf-16,gbk,big5,gb18030,latin1 "自动猜测文件编码
syntax on " 自动语法高亮
set number " 显示行号
filetype plugin indent on
" show existing tab with 4 spaces width
set tabstop=4
" when indenting with '>', use 4 spaces width
set shiftwidth=4
" On pressing tab, insert 4 spaces
set expandtab
"Open command prompt by running :Cp
command Dos :!start cmd /k cd %:p:h<CR>
"Open windows explorer by running :We
command We :!start Explorer /select,%:p<CR>
3、技巧
4、http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches
2017年8月4日星期五
Python3 unicode_escape
在python3中
In [1]: url = r"\u8fd9\u4e2a\u7cfb\u5217\u5fc5\u987b\u8f6c2"
In [2]: url.encode().decode('unicode_escape')
Out [3]: '这个系列必须转2'
In [4]: c = '国家'
In [5]: c.encode('unicode_escape')
Out [6]: b'\\u56fd\\u5bb6'
2017年8月1日星期二
conda创建的虚拟环境,pyqt出错
conda创建的虚拟环境,复制到其它计算机后,执行pyqt程序时,出错。
解决方法:
https://github.com/ContinuumIO/anaconda-issues/issues/1270
COPY the
Continuum\Anaconda3\Library\plugins\platforms
folder to
Continuum\Anaconda3
解决方法:
https://github.com/ContinuumIO/anaconda-issues/issues/1270
COPY the
Continuum\Anaconda3\Library\plugins\platforms
folder to
Continuum\Anaconda3
2017年7月24日星期一
2017年7月11日星期二
2017年7月8日星期六
sublime text 打开当前文件所在的命令行窗口
2017年6月25日星期日
2017年6月20日星期二
2017年6月8日星期四
2017年6月6日星期二
Python: add in memory files to a tar file
tarfile can't add in memory files
import io, tarfile
with tarfile.open("foo.tar", mode="w") as tar:
b = "hello world!".encode("utf-8")
t = tarfile.TarInfo("helloworld.txt")
t.size = len(b) # this is crucial
tar.addfile(t, io.BytesIO(b))
import io, tarfile
with tarfile.open("foo.tar", mode="w") as tar:
b = "hello world!".encode("utf-8")
t = tarfile.TarInfo("helloworld.txt")
t.size = len(b) # this is crucial
tar.addfile(t, io.BytesIO(b))
2017年6月4日星期日
pip install 出现 空间不足 的错误
搬瓦工主机上使用pip安装scipy,出现以下错误:
OSError: [Errno 28] No space left on device
找到以下的问题:
https://stackoverflow.com/questions/28590344/ioerror-no-space-left-on-device-which-device
可能是tmp目录的空间不够。
又找到
https://stackoverflow.com/questions/10617198/pip-creates-build-directories
使用 pip install -b 选项,指定目录,解决了问题。
OSError: [Errno 28] No space left on device
找到以下的问题:
https://stackoverflow.com/questions/28590344/ioerror-no-space-left-on-device-which-device
可能是tmp目录的空间不够。
又找到
https://stackoverflow.com/questions/10617198/pip-creates-build-directories
使用 pip install -b 选项,指定目录,解决了问题。
debian 编译安装 Python3
http://drupaland.eu/article/debian-8-python35-and-pip35
上面的链接中,应使用
上面的链接中,应使用
make altinstall
https://unix.stackexchange.com/questions/332641/how-to-install-python-3-6
上面的链接中,make -j8 会出现编译错误,直接使用make能通过。
2017年6月3日星期六
2017年5月30日星期二
查看IE浏览器保存的密码
IE PassView v1.40
Copyright (c) 2006 - 2016 Nir Sofer
Web site: http://www.nirsoft.net
http://www.nirsoft.net/utils/internet_explorer_password.html
Copyright (c) 2006 - 2016 Nir Sofer
Web site: http://www.nirsoft.net
http://www.nirsoft.net/utils/internet_explorer_password.html
2017年5月27日星期六
将dwg文件放到Google Map的思路
2 将dxf导入ArcGis,赋上坐标系,导出为shape文件;
3 使用ogr2ogr将shape文件转换为json格式;
ogr2ogr -t_srs EPSG:4326 -f "GeoJSON" ttt.json 2.shp
4 使用Python的geojson,获取json格式文件里的坐标点,转为国内地图使用的火星坐标系 ,并输出为json格式。
5 使用ogr2ogr,将json格式转换为kml格式。
ogr2ogr -f "KML" yxl.kml yongxinglu_huoxing.json
6 将kml文件导入Google Map。(在google drive中)
更新:将北京54 120度带的dxf文件转换为kml文件
ogr2ogr -t_srs EPSG:4326 -f "KML" -s_srs EPSG:2437 2.kml lhk.dxf
-t_srs 输出文件重新投影或者转换
-f 输出文件的格式
-s_srs 指定输入文件的坐标系
最后一个参数是输入文件,倒数第二个参数是输出文件的文件名。
2017年4月2日星期日
Check what Debian version you are running on your Linux system
Check what Debian version you are running on your Linux system
# apt-get install lsb-release
# lsb_release -da No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 7.7 (wheezy) Release: 7.7 Codename: wheezy
2017年3月30日星期四
转: 在命令行临时指定pip的源
经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的烦恼。
网上有很多可用的源,例如豆瓣:http://pypi.douban.com/simple/
最近使用得比较多并且比较顺手的是清华大学的pip源,它是官网pypi的镜像,每隔5分钟同步一次,地址为 https://pypi.tuna.tsinghua.edu.cn/simple
临时使用:
可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple
例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gevent,这样就会从清华这边的镜像去安装gevent库。
永久修改,一劳永逸:
Linux下,修改 ~/.pip/pip.conf (没有就创建一个), 修改 index-url至tuna,内容如下:
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple
windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下
[global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple
2017年3月28日星期二
IronPython clr.AddReferenceToFile Error
问题:在脚本中可以执行,但在交互解释器中出错。
IronPython Tutorial
clr.AddReferenceToFile adds reference to the assembly specified by its file name. This function will load the assembly from the file regardless of the assembly version. As a result, it doesn't guarantee that the correct assembly version is being loaded. To guarantee that correct assembly version is being loaded, use clr.AddReferenceByName. Moreover, AddReferenceToFile requires that the assembly be located in a directory listed in sys.path.
how-to-use-a-c-sharp-dll-in-ironpython
IronPython Tutorial
clr.AddReferenceToFile adds reference to the assembly specified by its file name. This function will load the assembly from the file regardless of the assembly version. As a result, it doesn't guarantee that the correct assembly version is being loaded. To guarantee that correct assembly version is being loaded, use clr.AddReferenceByName. Moreover, AddReferenceToFile requires that the assembly be located in a directory listed in sys.path.
how-to-use-a-c-sharp-dll-in-ironpython
import sys
import os
sys.path.insert(0, os.getcwd())
将脚本编译为可执行文件:
ipyc.exe /main:ymmj.py ymmj.py /platform:x64 /target:exe /standalone
miniupnp端口映射
$ upnpc
upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard
Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
for more information.
Usage : upnpc [options] -a ip port external_port protocol [duration]
Add port redirection
upnpc [options] -d external_port protocol [port2 protocol2] [...]
Delete port redirection
upnpc [options] -s
Get Connection status
upnpc [options] -l
List redirections
upnpc [options] -L
List redirections (using GetListOfPortMappings (for IGD:2 only)
upnpc [options] -n ip port external_port protocol [duration]
Add (any) port redirection allowing IGD to use alternative external_port (for IGD:2 only)
upnpc [options] -N external_port_start external_port_end protocol [manage]
Delete range of port redirections (for IGD:2 only)
upnpc [options] -r port1 protocol1 [port2 protocol2] [...]
Add all redirections to the current host
upnpc [options] -A remote_ip remote_port internal_ip internal_port protocol lease_time
Add Pinhole (for IGD:2 only)
upnpc [options] -U uniqueID new_lease_time
Update Pinhole (for IGD:2 only)
upnpc [options] -C uniqueID
Check if Pinhole is Working (for IGD:2 only)
upnpc [options] -K uniqueID
Get Number of packets going through the rule (for IGD:2 only)
upnpc [options] -D uniqueID
Delete Pinhole (for IGD:2 only)
upnpc [options] -S
Get Firewall status (for IGD:2 only)
upnpc [options] -G remote_ip remote_port internal_ip internal_port protocol
Get Outbound Pinhole Timeout (for IGD:2 only)
upnpc [options] -P
Get Presentation url
protocol is UDP or TCP
Options:
-e description : set description for port mapping.
-6 : use ip v6 instead of ip v4.
-u url : bypass discovery process by providing the XML root description url.
-m address/interface : provide ip address (ip v4) or interface name (ip v4 or v6) to use for sending SSDP multicast packets.
-p path : use this path for MiniSSDPd socket.
upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard
Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
for more information.
Usage : upnpc [options] -a ip port external_port protocol [duration]
Add port redirection
upnpc [options] -d external_port protocol [port2 protocol2] [...]
Delete port redirection
upnpc [options] -s
Get Connection status
upnpc [options] -l
List redirections
upnpc [options] -L
List redirections (using GetListOfPortMappings (for IGD:2 only)
upnpc [options] -n ip port external_port protocol [duration]
Add (any) port redirection allowing IGD to use alternative external_port (for IGD:2 only)
upnpc [options] -N external_port_start external_port_end protocol [manage]
Delete range of port redirections (for IGD:2 only)
upnpc [options] -r port1 protocol1 [port2 protocol2] [...]
Add all redirections to the current host
upnpc [options] -A remote_ip remote_port internal_ip internal_port protocol lease_time
Add Pinhole (for IGD:2 only)
upnpc [options] -U uniqueID new_lease_time
Update Pinhole (for IGD:2 only)
upnpc [options] -C uniqueID
Check if Pinhole is Working (for IGD:2 only)
upnpc [options] -K uniqueID
Get Number of packets going through the rule (for IGD:2 only)
upnpc [options] -D uniqueID
Delete Pinhole (for IGD:2 only)
upnpc [options] -S
Get Firewall status (for IGD:2 only)
upnpc [options] -G remote_ip remote_port internal_ip internal_port protocol
Get Outbound Pinhole Timeout (for IGD:2 only)
upnpc [options] -P
Get Presentation url
protocol is UDP or TCP
Options:
-e description : set description for port mapping.
-6 : use ip v6 instead of ip v4.
-u url : bypass discovery process by providing the XML root description url.
-m address/interface : provide ip address (ip v4) or interface name (ip v4 or v6) to use for sending SSDP multicast packets.
-p path : use this path for MiniSSDPd socket.
2017年3月25日星期六
Fixing an AVI index with mencoder
Fixing an AVI index with mencoder
Fixing an AVI index with mencoder
This is more a “note to self”, but I’m sure others find it useful as well.
Quite often I run across AVI files with a broken index. That index is used in media players to seek rapidly in the movie file. Without an index or with a corrupt index, seeking either does not work at all or takes a long time.
mencoder, which is available on almost any platform, allows you to massage AVI files besides tons of other operations on a never-ending list of video formats.
Here’s the command to repair a broken AVI index (I used the mplayer/mencoder version that comes with the FreeBSD ports collection):
$ mencoder -idx in.avi -ovc copy -oac copy -o out.avi
Fixing an AVI index with mencoder
This is more a “note to self”, but I’m sure others find it useful as well.
Quite often I run across AVI files with a broken index. That index is used in media players to seek rapidly in the movie file. Without an index or with a corrupt index, seeking either does not work at all or takes a long time.
mencoder, which is available on almost any platform, allows you to massage AVI files besides tons of other operations on a never-ending list of video formats.
Here’s the command to repair a broken AVI index (I used the mplayer/mencoder version that comes with the FreeBSD ports collection):
$ mencoder -idx in.avi -ovc copy -oac copy -o out.avi
2017年3月22日星期三
2017年3月19日星期日
win7平台下QT软件的打包与发布
https://doc.qt.io/qt-5/windows-deployment.html
How-to-Deploy-a-Qt-5-Application-for-Windows
win7平台下QT软件的打包与发布(部署与安装)
Qt for Windows - Deployment
Windows下PATH等环境变量详解
set path=C:\Qt\Qt5.8.0\5.8\msvc2015_64\bin;%path%
How-to-Deploy-a-Qt-5-Application-for-Windows
win7平台下QT软件的打包与发布(部署与安装)
Qt for Windows - Deployment
Windows下PATH等环境变量详解
set path=C:\Qt\Qt5.8.0\5.8\msvc2015_64\bin;%path%
2017年3月12日星期日
知呼:OS X 系统自带的截图快捷键
OS X 系统自带的截图快捷键
作者:陈浩
链接:https://www.zhihu.com/question/19550327/answer/12222576
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
Cmd+Shift+3:全屏截图;截取整个屏幕,保存截图至桌面文件夹。
Cmd+Shift+4:区域截图;鼠标光标变成带坐标的小十字,通过拖拽截取特定区域,保存截图至桌面文件夹。
Cmd+Shift+4 - 单击空格键 - 鼠标单击指定窗口:窗口截图;出现小十字光标后对指定窗口按空格键,鼠标光标变成照相机,鼠标单击截取指定窗口,保存截图至桌面文件夹。
进阶快捷键
Cmd+Shift+4 - 按住空格键拖动鼠标:区域截图;选取区域范围后,按住空格键并拖到鼠标可移动选取范围,释放按键后保存截图至桌面文件夹。
Cmd+Shift+4 - 按住Shift - 上下/左右移动鼠标:区域截图;选取区域范围后,按住 Shift 并上下/左右移动鼠标即可固定选取范围宽度/高度改变高度/宽度,释放按键后保存截图至桌面文件夹。
Cmd+Shift+4 - 按住Shift和Option: 区域截图;选取区域范围后,按住 Shift 和 Option 键在上一快捷键功能的基础上自由切换高度宽度,释放按键后保存截图至桌面文件夹。
Cmd+Shift+4 - 按住Option: 区域截图;选取区域范围后,按住 Option 键可按比例缩放选取范围,释放按键后保存截图至桌面文件夹。
PS:以上介绍的快捷键配合按住 Control 键即可将截图文件保存在剪切板,以供调用。
链接:https://www.zhihu.com/question/19550327/answer/12222576
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
Cmd+Shift+3:全屏截图;截取整个屏幕,保存截图至桌面文件夹。
Cmd+Shift+4:区域截图;鼠标光标变成带坐标的小十字,通过拖拽截取特定区域,保存截图至桌面文件夹。
Cmd+Shift+4 - 单击空格键 - 鼠标单击指定窗口:窗口截图;出现小十字光标后对指定窗口按空格键,鼠标光标变成照相机,鼠标单击截取指定窗口,保存截图至桌面文件夹。
Cmd+Shift+4 - 按住空格键拖动鼠标:区域截图;选取区域范围后,按住空格键并拖到鼠标可移动选取范围,释放按键后保存截图至桌面文件夹。
Cmd+Shift+4 - 按住Shift - 上下/左右移动鼠标:区域截图;选取区域范围后,按住 Shift 并上下/左右移动鼠标即可固定选取范围宽度/高度改变高度/宽度,释放按键后保存截图至桌面文件夹。
Cmd+Shift+4 - 按住Shift和Option: 区域截图;选取区域范围后,按住 Shift 和 Option 键在上一快捷键功能的基础上自由切换高度宽度,释放按键后保存截图至桌面文件夹。
Cmd+Shift+4 - 按住Option: 区域截图;选取区域范围后,按住 Option 键可按比例缩放选取范围,释放按键后保存截图至桌面文件夹。
PS:以上介绍的快捷键配合按住 Control 键即可将截图文件保存在剪切板,以供调用。
2017年3月7日星期二
使用mailx发送qq邮件
本文出自 “宁静致远” 博客,
请务必保留此出处http://irow10.blog.51cto.com/2425361/1812638
mailx安装我就不介绍了,很简单!我先介绍下系统的版本和mailx的版本
[root@localhost ~]# mailx -V
12.4 7/29/08
[root@localhost ~]# cat /etc/issue
CentOS release 6.8 (Final)
Kernel \r on an \m
mailx的配置文件在/etc/mail.rc(我是rpm安装的)
在配置文件中添加下面的代码(passwd写开通smtp客户端给的授权码)
set from=usernam@163.com
set smtp=smtp.163.com
set smtp-auth-user=username@163.com
set smtp-auth-password=passwd
set smtp-auth=login
测试下是否可以使用
cat /opt/tesh |mailx -v -s 'hello' '*****@163.com'
测试发现有时能发送,有时会退信并报以下错误:
554 DT:SPM 163 smtp3,DdGowACX1p2fRn9X_lIIAA--.2018S2 1467958944,please see http://mail.163.com/help/help_spam_16.htm?ip=*.*.*.*&hostid=smtp3&time=1467958944
smtp-server: 554 DT:SPM 163 smtp3,DdGowACX1p2fRn9X_lIIAA--.2018S2 1467958944,please see http://mail.163.com/help/help_spam_16.htm?ip=*.*.*.*&hostid=smtp3&time=1467958944
"/root/dead.letter" 0/0
. . . message not sent.
554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件
查了下原因,因为163反垃圾邮件设置的原因,所有我采用了qq邮箱及hostmail
qq邮箱
set from=224******53@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=224******53@qq.com
set smtp-auth-password=euia********chb #授权码
set smtp-auth=login
错误提示:
530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28
smtp-server: 530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28
"/root/dead.letter" 19/438
. . . message not sent
于是我改了下配置文件添加了几个参数
set from=224******53@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=224******53@qq.com
set smtp-auth-password=euia********chb
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
邮件发送成功,在/etc/pki/nssdb/有证书文件
当然还有两个方式可以获取证书文件
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs
然后mail.rc的配置文件改成
set from=224******53@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=224******53@qq.com
set smtp-auth-password=euia********chb
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/root/.certs
有些邮箱无法通过上述方式获取证书,我们可以在装有火狐浏览器的服务器中把证书拷贝过来
[root@localhost test]# cd /home/test/.mozilla/firefox/twmiqm5n.default/
[root@localhost twmiqm5n.default]# ll *db
-rw-------. 1 test test 65536 Jul 7 16:29 cert8.db
-rw-------. 1 test test 16384 Jul 7 16:29 key3.db
-rw-------. 1 test test 16384 May 28 20:38 secmod.db
把这个三个文件拷贝到指定文件下。比如:/root/.certs1
set from=224******53@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=224******53@qq.com
set smtp-auth-password=euia********chb
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/root/.certs1
mailx的操作还是蛮简单的,就是一直报一个错误
Error in certificate: Peer's certificate issuer is not recognized.
证书没有获得认可
解决方法:找个存放证书的目录
[root@localhost .certs]# pwd
/root/.certs
[root@localhost .certs]# ll
total 80
-rw-------. 1 root root 65536 Jul 8 15:13 cert8.db
-rw-r--r--. 1 root root 2293 Jul 7 16:25 qq.crt
-rw-------. 1 root root 16384 Jul 8 15:13 key3.db
-rw-------. 1 root root 16384 Jul 7 16:24 secmod.db
[root@localhost .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
Notice: Trust flag u is set automatically if the private key is present.
这样就不会报错了。
Resolving host smtp.qq.com . . . done.
Connecting to *.*.*.* . . . connected.
220 smtp.qq.com Esmtp QQ Mail Server
>>> EHLO localhost
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
>>> STARTTLS
220 Ready to start TLS
Comparing DNS name: "mx2.qq.com"
................................
Comparing DNS name: "smtp.qq.com"
SSL parameters: cipher=AES-256, keysize=256, secretkeysize=256,
issuer=CN=GeoTrust SSL CA - G3,O=GeoTrust Inc.,C=US
subject=CN=pop.qq.com,OU=R&D,O=Shenzhen Tencent Computer Systems Company Limited,L=Shenzhen,ST=Guangdong,C=CN
>>> EHLO localhost
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
>>> AUTH LOGIN
334 VXNlcm5hbWU6
>>> MjI0Njk0NTU1M0BxcS5jb20=
334 UGFzc3dvcmQ6
>>> ZXVpYXl1a3JrZ3JoZWNoYg==
235 Authentication successful
>>> MAIL FROM:<22******53@qq.com>
250 Ok
>>> RCPT TO:<username@163.com>
250 Ok
>>> DATA
354 End data with <CR><LF>.<CR><LF>
>>> .
250 Ok: queued as
>>> QUIT
221 Bye
sendEmail
下面来介绍sendEmail的使用
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
tar -zxvf sendEmail-v1.56.tar.gz
cd sendEmail-v1.56
mv sendEmail /usr/local/bin/
yum -y install perl-IO-Socket-SSL openssl-perl openssl-devel
sendEmail就可以使用了。应为sendEmail没有配置文件,所以在发送邮件的时候需要填上发件人的账户密码,没有mailx方便.
这是我们需要脚本辅助
#!/bash/sh
from_email='username@hotmail.com'
smtp='smtp-mail.outlook.com:587'
title='标题'
to_email=`username@qq.com`
passwd='passwd'
body=`cat test`
/usr/sbin/sendEmail -o tls=yes -f "$from_email" -s "$smtp" -u "$title" -o message-content-type=text -o message-charset=utf8 -t "$to_email" -xu "$from_email" -xp "$passwd" -m "$body"
以上是个简单的脚本,当然标题和内容以及发件人你都可以传参进来。这样的话就不会再命令行中暴露密码。
请务必保留此出处http://irow10.blog.51cto.com/2425361/1812638
mailx安装我就不介绍了,很简单!我先介绍下系统的版本和mailx的版本
[root@localhost ~]# mailx -V
12.4 7/29/08
[root@localhost ~]# cat /etc/issue
CentOS release 6.8 (Final)
Kernel \r on an \m
mailx的配置文件在/etc/mail.rc(我是rpm安装的)
在配置文件中添加下面的代码(passwd写开通smtp客户端给的授权码)
set from=usernam@163.com
set smtp=smtp.163.com
set smtp-auth-user=username@163.com
set smtp-auth-password=passwd
set smtp-auth=login
测试下是否可以使用
cat /opt/tesh |mailx -v -s 'hello' '*****@163.com'
测试发现有时能发送,有时会退信并报以下错误:
554 DT:SPM 163 smtp3,DdGowACX1p2fRn9X_lIIAA--.2018S2 1467958944,please see http://mail.163.com/help/help_spam_16.htm?ip=*.*.*.*&hostid=smtp3&time=1467958944
smtp-server: 554 DT:SPM 163 smtp3,DdGowACX1p2fRn9X_lIIAA--.2018S2 1467958944,please see http://mail.163.com/help/help_spam_16.htm?ip=*.*.*.*&hostid=smtp3&time=1467958944
"/root/dead.letter" 0/0
. . . message not sent.
554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件
查了下原因,因为163反垃圾邮件设置的原因,所有我采用了qq邮箱及hostmail
qq邮箱
set from=224******53@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=224******53@qq.com
set smtp-auth-password=euia********chb #授权码
set smtp-auth=login
错误提示:
530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28
smtp-server: 530 Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28
"/root/dead.letter" 19/438
. . . message not sent
于是我改了下配置文件添加了几个参数
set from=224******53@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=224******53@qq.com
set smtp-auth-password=euia********chb
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
邮件发送成功,在/etc/pki/nssdb/有证书文件
当然还有两个方式可以获取证书文件
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs
然后mail.rc的配置文件改成
set from=224******53@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=224******53@qq.com
set smtp-auth-password=euia********chb
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/root/.certs
有些邮箱无法通过上述方式获取证书,我们可以在装有火狐浏览器的服务器中把证书拷贝过来
[root@localhost test]# cd /home/test/.mozilla/firefox/twmiqm5n.default/
[root@localhost twmiqm5n.default]# ll *db
-rw-------. 1 test test 65536 Jul 7 16:29 cert8.db
-rw-------. 1 test test 16384 Jul 7 16:29 key3.db
-rw-------. 1 test test 16384 May 28 20:38 secmod.db
把这个三个文件拷贝到指定文件下。比如:/root/.certs1
set from=224******53@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=224******53@qq.com
set smtp-auth-password=euia********chb
set smtp-auth=login
set smtp-use-starttls
set ssl-verify=ignore
set nss-config-dir=/root/.certs1
mailx的操作还是蛮简单的,就是一直报一个错误
Error in certificate: Peer's certificate issuer is not recognized.
证书没有获得认可
解决方法:找个存放证书的目录
[root@localhost .certs]# pwd
/root/.certs
[root@localhost .certs]# ll
total 80
-rw-------. 1 root root 65536 Jul 8 15:13 cert8.db
-rw-r--r--. 1 root root 2293 Jul 7 16:25 qq.crt
-rw-------. 1 root root 16384 Jul 8 15:13 key3.db
-rw-------. 1 root root 16384 Jul 7 16:24 secmod.db
[root@localhost .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
Notice: Trust flag u is set automatically if the private key is present.
这样就不会报错了。
Resolving host smtp.qq.com . . . done.
Connecting to *.*.*.* . . . connected.
220 smtp.qq.com Esmtp QQ Mail Server
>>> EHLO localhost
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
>>> STARTTLS
220 Ready to start TLS
Comparing DNS name: "mx2.qq.com"
................................
Comparing DNS name: "smtp.qq.com"
SSL parameters: cipher=AES-256, keysize=256, secretkeysize=256,
issuer=CN=GeoTrust SSL CA - G3,O=GeoTrust Inc.,C=US
subject=CN=pop.qq.com,OU=R&D,O=Shenzhen Tencent Computer Systems Company Limited,L=Shenzhen,ST=Guangdong,C=CN
>>> EHLO localhost
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
>>> AUTH LOGIN
334 VXNlcm5hbWU6
>>> MjI0Njk0NTU1M0BxcS5jb20=
334 UGFzc3dvcmQ6
>>> ZXVpYXl1a3JrZ3JoZWNoYg==
235 Authentication successful
>>> MAIL FROM:<22******53@qq.com>
250 Ok
>>> RCPT TO:<username@163.com>
250 Ok
>>> DATA
354 End data with <CR><LF>.<CR><LF>
>>> .
250 Ok: queued as
>>> QUIT
221 Bye
sendEmail
下面来介绍sendEmail的使用
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
tar -zxvf sendEmail-v1.56.tar.gz
cd sendEmail-v1.56
mv sendEmail /usr/local/bin/
yum -y install perl-IO-Socket-SSL openssl-perl openssl-devel
sendEmail就可以使用了。应为sendEmail没有配置文件,所以在发送邮件的时候需要填上发件人的账户密码,没有mailx方便.
这是我们需要脚本辅助
#!/bash/sh
from_email='username@hotmail.com'
smtp='smtp-mail.outlook.com:587'
title='标题'
to_email=`username@qq.com`
passwd='passwd'
body=`cat test`
/usr/sbin/sendEmail -o tls=yes -f "$from_email" -s "$smtp" -u "$title" -o message-content-type=text -o message-charset=utf8 -t "$to_email" -xu "$from_email" -xp "$passwd" -m "$body"
以上是个简单的脚本,当然标题和内容以及发件人你都可以传参进来。这样的话就不会再命令行中暴露密码。
2017年3月6日星期一
使用openssl发送邮件
openssl s_client -connect smtp.qq.com:465 -crlf -ign_eof
EHLO localhost
AUTH LOGIN
xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx
MAIL FROM:<xxxx@qq.com>
RCPT TO:<xxxx@163.com>
DATA
From: Test <xxxx@qq.com>
To: Me <xxxx@163.com>
Subject: Testing email from telnet
This is the body
.
QUIT
-------------------------------------------------------------------------------------
# openssl s_client -connect smtp.qq.com:465 -crlf -ign_eof
CONNECTED(00000003)
depth=1 C = US, O = GeoTrust Inc., CN = GeoTrust SSL CA - G3
verify error:num=20:unable to get local issuer certificate
---
Certificate chain
0 s:/C=CN/ST=Guangdong/L=Shenzhen/O=Shenzhen Tencent Computer Systems Company Limited/OU=R&D/CN=pop.qq.com
i:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3
1 s:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3
i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIHrTCCBpWgAwIBAgIQStxVhUEPlKCJNmsoaRVQVjANBgkqhkiG9w0BAQsFADBE
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU
R2VvVHJ1c3QgU1NMIENBIC0gRzMwHhcNMTYwOTA3MDAwMDAwWhcNMTgxMjA3MjM1
OTU5WjCBkzELMAkGA1UEBhMCQ04xEjAQBgNVBAgMCUd1YW5nZG9uZzERMA8GA1UE
BwwIU2hlbnpoZW4xOjA4BgNVBAoMMVNoZW56aGVuIFRlbmNlbnQgQ29tcHV0ZXIg
U3lzdGVtcyBDb21wYW55IExpbWl0ZWQxDDAKBgNVBAsMA1ImRDETMBEGA1UEAwwK
cG9wLnFxLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALeSY7Vb
60Cvv7P2O+zhaZnqlz/KFs//DH4It3xmyMPFOPUFopzN1h8n3/4FPqGBtqEEuWBE
/o7soZT30E8bw30Tl07VOcYm/fPKi1pyro3hNEdLi5Wlta9fKxDAvw0U3clSq39R
qihYIDAA3QrDuqI54gULa5IZnqM16A9VBULPfIDaXbdgaAIJ5Ak92nC13YcdQYuv
egL6jOWSKzCRTqeRAg+6dWkfce1+gAOCuCUDgAso2EJ+k9nFe/LAMMGdGbe4KI9H
CwpDCMo+2k2u4SQtXOmuYke7nNmRnpJeL3qZnGWsqT7l3N0mYCc/+3zcMfAcmyuo
H90stoWF/G2T2rcCAwEAAaOCBEkwggRFMIIBPwYDVR0RBIIBNjCCATKCEnVwbG9h
ZC5tYWlsLnFxLmNvbYIUaHdzbXRwLmV4bWFpbC5xcS5jb22CFGh3aW1hcC5leG1h
aWwucXEuY29tgg5jbG91ZG14LnFxLmNvbYISaW1hcC5leG1haWwucXEuY29tghNo
d3BvcC5leG1haWwucXEuY29tggtzbXRwLnFxLmNvbYIKbXgzLnFxLmNvbYIRcnR4
LmV4bWFpbC5xcS5jb22CCmRhdi5xcS5jb22CCm14MS5xcS5jb22CDW14Yml6MS5x
cS5jb22CCWV4LnFxLmNvbYILaW1hcC5xcS5jb22CEXBvcC5leG1haWwucXEuY29t
gg1teGJpejIucXEuY29tggpteDIucXEuY29tghJzbXRwLmV4bWFpbC5xcS5jb22C
CnBvcC5xcS5jb20wCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCBaAwKwYDVR0fBCQw
IjAgoB6gHIYaaHR0cDovL2duLnN5bWNiLmNvbS9nbi5jcmwwgZ0GA1UdIASBlTCB
kjCBjwYGZ4EMAQICMIGEMD8GCCsGAQUFBwIBFjNodHRwczovL3d3dy5nZW90cnVz
dC5jb20vcmVzb3VyY2VzL3JlcG9zaXRvcnkvbGVnYWwwQQYIKwYBBQUHAgIwNQwz
aHR0cHM6Ly93d3cuZ2VvdHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5L2xl
Z2FsMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAfBgNVHSMEGDAWgBTS
b/eW9IU/cjwwfSPahXibo3xafDBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGG
E2h0dHA6Ly9nbi5zeW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9nbi5zeW1j
Yi5jb20vZ24uY3J0MIIBfQYKKwYBBAHWeQIEAgSCAW0EggFpAWcAdgDd6x0reg1P
piCLga2BaHB+Lo6dAdVciI09EcTNtuy+zAAAAVcCsiY3AAAEAwBHMEUCIBZMjuD9
LRps0VXtC5F0Dn5FXD8gM0iySH7lLJak/k/vAiEAiLxBze2hKotXAjrolqeYpTy2
LE5B8/mm6HDRnTO5NpwAdQCkuQmQtBhYFIe7E6LMZ3AKPDWYBPkb37jjd80OyA3c
EAAAAVcCsidpAAAEAwBGMEQCIBFWt7QviHZxdzT4N1eU+97X00f/iiYTKBnqcKAa
ls/jAiBCer4UAZrSJ64TjbXhbARmSe+rKtoNEh3FbszBe0TSTAB2AGj2mPgfZIK+
OozuuSgdTPxxUV1nk9RE0QpnrLtPT/vEAAABVwKyJ4sAAAQDAEcwRQIgCJlZbkC8
uTXLwyyQPLWRMqLlVJ9bbVsEceP35AMq1V0CIQCgcwNrkcte+84dURDiteDnoco5
NKLuVwk6+eMt0y3GtjANBgkqhkiG9w0BAQsFAAOCAQEAQDICKJnfn2hc/AzAfc1+
v6PpIyDTLeT8mOd7qsO/PbTD7H38mdT1hk9M7lTqxYG/DcFmsPWhluGxHeVNq6St
gw360UE241C3KTl+jQtN8BRSMJpmAL636mVuRU3euAJNmI21fuiz/vauWM85qsWj
E6N91WTqbOijYU2p/HmwMjd7HEfQQUZtxzmJLlkPoFMy0P9fv2Q+01XTtrx4wpGQ
VttfWsRh0388L56i3oyK3o50ZrT2twQuK59pUEgL1n7GBXIAe8L/YhYeW349UbYT
jtFwjo+fYreSQaQe+1bKWRO+ZzUschK/QZ877zAZDe1gN0tqB9kqTLp4pAABkQ7s
1A==
-----END CERTIFICATE-----
subject=/C=CN/ST=Guangdong/L=Shenzhen/O=Shenzhen Tencent Computer Systems Company Limited/OU=R&D/CN=pop.qq.com
issuer=/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3
---
No client certificate CA names sent
---
SSL handshake has read 3432 bytes and written 675 bytes
---
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : AES128-SHA256
Session-ID: A14F67315BF1542D3CD45B3B49A1FE6DEBA95A883B802728B6FCE4549CFD851D
Session-ID-ctx:
Master-Key: A8FDCD1EB692E305CB6D6BFEA985E4E7468908780DAE63173139892A4D97C7455A4F5E2D4FC08F573985F4D1EAC09BE9
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 1200 (seconds)
TLS session ticket:
0000 - 67 30 86 a2 f7 69 8a cc-78 8e 26 48 d6 08 63 68 g0...i..x.&H..ch
0010 - a5 11 d1 e4 09 f4 70 3f-e9 13 0b 46 63 bb 56 93 ......p?...Fc.V.
0020 - d6 6d 94 ba 27 b0 a4 ef-ad b4 92 8b 05 83 aa 5e .m..'..........^
0030 - 84 00 46 74 ae c3 b5 55-d9 a7 74 e5 36 10 17 9e ..Ft...U..t.6...
0040 - 34 71 e9 bb de cd c1 ed-c6 15 04 73 b2 c9 54 4f 4q.........s..TO
0050 - d5 14 ad d8 88 b7 fd 73-16 e4 8d a4 b1 09 22 52 .......s......"R
0060 - df 75 5c 8c 35 72 33 c1-2f c5 f6 8b fe f8 1e d4 .u\.5r3./.......
TLS session ticket:
0000 - 67 30 86 a2 f7 69 8a cc-78 8e 26 48 d6 08 63 68 g0...i..x.&H..ch
0010 - a5 11 d1 e4 09 f4 70 3f-e9 13 0b 46 63 bb 56 93 ......p?...Fc.V.
0020 - d6 6d 94 ba 27 b0 a4 ef-ad b4 92 8b 05 83 aa 5e .m..'..........^
0030 - 84 00 46 74 ae c3 b5 55-d9 a7 74 e5 36 10 17 9e ..Ft...U..t.6...
0040 - 34 71 e9 bb de cd c1 ed-c6 15 04 73 b2 c9 54 4f 4q.........s..TO
0050 - d5 14 ad d8 88 b7 fd 73-16 e4 8d a4 b1 09 22 52 .......s......"R
0060 - df 75 5c 8c 35 72 33 c1-2f c5 f6 8b fe f8 1e d4 .u\.5r3./.......
0070 - 8e bf 60 1b 19 57 5c 76-5e dd 97 83 a5 ec 4d ef ..`..W\v^.....M.
0080 - 8e 6d 26 b7 f5 3e f4 cc-ea 4b 5f 5f 25 99 2f f1 .m&..>...K__%./.
0090 - 55 13 2b 12 02 42 69 39-5e ae 12 7d 47 0b 36 25 U.+..Bi9^..}G.6%
Start Time: 1488852592
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
220 smtp.qq.com Esmtp QQ Mail Server
ehlo [127.0.1.1]
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
AUTH PLAIN xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
235 Authentication successful
mail FROM:<xxxx@qq.com> size=78
250 Ok
rcpt TO:<xxxx@163.com>
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
From: Test <xxxx@qq.com>
To: Me <xxxx@163.com>
Subject: Testing email from telnet
This is the body
.
250 Ok: queued as
quit
221 Bye
closed
EHLO localhost
AUTH LOGIN
xxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx
MAIL FROM:<xxxx@qq.com>
RCPT TO:<xxxx@163.com>
DATA
From: Test <xxxx@qq.com>
To: Me <xxxx@163.com>
Subject: Testing email from telnet
This is the body
.
QUIT
-------------------------------------------------------------------------------------
# openssl s_client -connect smtp.qq.com:465 -crlf -ign_eof
CONNECTED(00000003)
depth=1 C = US, O = GeoTrust Inc., CN = GeoTrust SSL CA - G3
verify error:num=20:unable to get local issuer certificate
---
Certificate chain
0 s:/C=CN/ST=Guangdong/L=Shenzhen/O=Shenzhen Tencent Computer Systems Company Limited/OU=R&D/CN=pop.qq.com
i:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3
1 s:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3
i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIHrTCCBpWgAwIBAgIQStxVhUEPlKCJNmsoaRVQVjANBgkqhkiG9w0BAQsFADBE
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU
R2VvVHJ1c3QgU1NMIENBIC0gRzMwHhcNMTYwOTA3MDAwMDAwWhcNMTgxMjA3MjM1
OTU5WjCBkzELMAkGA1UEBhMCQ04xEjAQBgNVBAgMCUd1YW5nZG9uZzERMA8GA1UE
BwwIU2hlbnpoZW4xOjA4BgNVBAoMMVNoZW56aGVuIFRlbmNlbnQgQ29tcHV0ZXIg
U3lzdGVtcyBDb21wYW55IExpbWl0ZWQxDDAKBgNVBAsMA1ImRDETMBEGA1UEAwwK
cG9wLnFxLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALeSY7Vb
60Cvv7P2O+zhaZnqlz/KFs//DH4It3xmyMPFOPUFopzN1h8n3/4FPqGBtqEEuWBE
/o7soZT30E8bw30Tl07VOcYm/fPKi1pyro3hNEdLi5Wlta9fKxDAvw0U3clSq39R
qihYIDAA3QrDuqI54gULa5IZnqM16A9VBULPfIDaXbdgaAIJ5Ak92nC13YcdQYuv
egL6jOWSKzCRTqeRAg+6dWkfce1+gAOCuCUDgAso2EJ+k9nFe/LAMMGdGbe4KI9H
CwpDCMo+2k2u4SQtXOmuYke7nNmRnpJeL3qZnGWsqT7l3N0mYCc/+3zcMfAcmyuo
H90stoWF/G2T2rcCAwEAAaOCBEkwggRFMIIBPwYDVR0RBIIBNjCCATKCEnVwbG9h
ZC5tYWlsLnFxLmNvbYIUaHdzbXRwLmV4bWFpbC5xcS5jb22CFGh3aW1hcC5leG1h
aWwucXEuY29tgg5jbG91ZG14LnFxLmNvbYISaW1hcC5leG1haWwucXEuY29tghNo
d3BvcC5leG1haWwucXEuY29tggtzbXRwLnFxLmNvbYIKbXgzLnFxLmNvbYIRcnR4
LmV4bWFpbC5xcS5jb22CCmRhdi5xcS5jb22CCm14MS5xcS5jb22CDW14Yml6MS5x
cS5jb22CCWV4LnFxLmNvbYILaW1hcC5xcS5jb22CEXBvcC5leG1haWwucXEuY29t
gg1teGJpejIucXEuY29tggpteDIucXEuY29tghJzbXRwLmV4bWFpbC5xcS5jb22C
CnBvcC5xcS5jb20wCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMCBaAwKwYDVR0fBCQw
IjAgoB6gHIYaaHR0cDovL2duLnN5bWNiLmNvbS9nbi5jcmwwgZ0GA1UdIASBlTCB
kjCBjwYGZ4EMAQICMIGEMD8GCCsGAQUFBwIBFjNodHRwczovL3d3dy5nZW90cnVz
dC5jb20vcmVzb3VyY2VzL3JlcG9zaXRvcnkvbGVnYWwwQQYIKwYBBQUHAgIwNQwz
aHR0cHM6Ly93d3cuZ2VvdHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5L2xl
Z2FsMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAfBgNVHSMEGDAWgBTS
b/eW9IU/cjwwfSPahXibo3xafDBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGG
E2h0dHA6Ly9nbi5zeW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9nbi5zeW1j
Yi5jb20vZ24uY3J0MIIBfQYKKwYBBAHWeQIEAgSCAW0EggFpAWcAdgDd6x0reg1P
piCLga2BaHB+Lo6dAdVciI09EcTNtuy+zAAAAVcCsiY3AAAEAwBHMEUCIBZMjuD9
LRps0VXtC5F0Dn5FXD8gM0iySH7lLJak/k/vAiEAiLxBze2hKotXAjrolqeYpTy2
LE5B8/mm6HDRnTO5NpwAdQCkuQmQtBhYFIe7E6LMZ3AKPDWYBPkb37jjd80OyA3c
EAAAAVcCsidpAAAEAwBGMEQCIBFWt7QviHZxdzT4N1eU+97X00f/iiYTKBnqcKAa
ls/jAiBCer4UAZrSJ64TjbXhbARmSe+rKtoNEh3FbszBe0TSTAB2AGj2mPgfZIK+
OozuuSgdTPxxUV1nk9RE0QpnrLtPT/vEAAABVwKyJ4sAAAQDAEcwRQIgCJlZbkC8
uTXLwyyQPLWRMqLlVJ9bbVsEceP35AMq1V0CIQCgcwNrkcte+84dURDiteDnoco5
NKLuVwk6+eMt0y3GtjANBgkqhkiG9w0BAQsFAAOCAQEAQDICKJnfn2hc/AzAfc1+
v6PpIyDTLeT8mOd7qsO/PbTD7H38mdT1hk9M7lTqxYG/DcFmsPWhluGxHeVNq6St
gw360UE241C3KTl+jQtN8BRSMJpmAL636mVuRU3euAJNmI21fuiz/vauWM85qsWj
E6N91WTqbOijYU2p/HmwMjd7HEfQQUZtxzmJLlkPoFMy0P9fv2Q+01XTtrx4wpGQ
VttfWsRh0388L56i3oyK3o50ZrT2twQuK59pUEgL1n7GBXIAe8L/YhYeW349UbYT
jtFwjo+fYreSQaQe+1bKWRO+ZzUschK/QZ877zAZDe1gN0tqB9kqTLp4pAABkQ7s
1A==
-----END CERTIFICATE-----
subject=/C=CN/ST=Guangdong/L=Shenzhen/O=Shenzhen Tencent Computer Systems Company Limited/OU=R&D/CN=pop.qq.com
issuer=/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3
---
No client certificate CA names sent
---
SSL handshake has read 3432 bytes and written 675 bytes
---
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : AES128-SHA256
Session-ID: A14F67315BF1542D3CD45B3B49A1FE6DEBA95A883B802728B6FCE4549CFD851D
Session-ID-ctx:
Master-Key: A8FDCD1EB692E305CB6D6BFEA985E4E7468908780DAE63173139892A4D97C7455A4F5E2D4FC08F573985F4D1EAC09BE9
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 1200 (seconds)
TLS session ticket:
0000 - 67 30 86 a2 f7 69 8a cc-78 8e 26 48 d6 08 63 68 g0...i..x.&H..ch
0010 - a5 11 d1 e4 09 f4 70 3f-e9 13 0b 46 63 bb 56 93 ......p?...Fc.V.
0020 - d6 6d 94 ba 27 b0 a4 ef-ad b4 92 8b 05 83 aa 5e .m..'..........^
0030 - 84 00 46 74 ae c3 b5 55-d9 a7 74 e5 36 10 17 9e ..Ft...U..t.6...
0040 - 34 71 e9 bb de cd c1 ed-c6 15 04 73 b2 c9 54 4f 4q.........s..TO
0050 - d5 14 ad d8 88 b7 fd 73-16 e4 8d a4 b1 09 22 52 .......s......"R
0060 - df 75 5c 8c 35 72 33 c1-2f c5 f6 8b fe f8 1e d4 .u\.5r3./.......
TLS session ticket:
0000 - 67 30 86 a2 f7 69 8a cc-78 8e 26 48 d6 08 63 68 g0...i..x.&H..ch
0010 - a5 11 d1 e4 09 f4 70 3f-e9 13 0b 46 63 bb 56 93 ......p?...Fc.V.
0020 - d6 6d 94 ba 27 b0 a4 ef-ad b4 92 8b 05 83 aa 5e .m..'..........^
0030 - 84 00 46 74 ae c3 b5 55-d9 a7 74 e5 36 10 17 9e ..Ft...U..t.6...
0040 - 34 71 e9 bb de cd c1 ed-c6 15 04 73 b2 c9 54 4f 4q.........s..TO
0050 - d5 14 ad d8 88 b7 fd 73-16 e4 8d a4 b1 09 22 52 .......s......"R
0060 - df 75 5c 8c 35 72 33 c1-2f c5 f6 8b fe f8 1e d4 .u\.5r3./.......
0070 - 8e bf 60 1b 19 57 5c 76-5e dd 97 83 a5 ec 4d ef ..`..W\v^.....M.
0080 - 8e 6d 26 b7 f5 3e f4 cc-ea 4b 5f 5f 25 99 2f f1 .m&..>...K__%./.
0090 - 55 13 2b 12 02 42 69 39-5e ae 12 7d 47 0b 36 25 U.+..Bi9^..}G.6%
Start Time: 1488852592
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
220 smtp.qq.com Esmtp QQ Mail Server
ehlo [127.0.1.1]
250-smtp.qq.com
250-PIPELINING
250-SIZE 73400320
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN
250-MAILCOMPRESS
250 8BITMIME
AUTH PLAIN xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
235 Authentication successful
mail FROM:<xxxx@qq.com> size=78
250 Ok
rcpt TO:<xxxx@163.com>
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
From: Test <xxxx@qq.com>
To: Me <xxxx@163.com>
Subject: Testing email from telnet
This is the body
.
250 Ok: queued as
quit
221 Bye
closed
Python one-line HTTP server
python -m SimpleHTTPServer 8000
will serve the contents of the current working directory over HTTP on port 8000.
If you use Python 3, you should instead write
python3 -m http.server 8000
See the SimpleHTTPServer module docs for 2.x and the http.server docs for 3.x.
By the way, in both cases the port parameter is optional.
will serve the contents of the current working directory over HTTP on port 8000.
If you use Python 3, you should instead write
python3 -m http.server 8000
See the SimpleHTTPServer module docs for 2.x and the http.server docs for 3.x.
By the way, in both cases the port parameter is optional.
2017年3月5日星期日
FFmpeg实用命令:音频、视频格式转换和其它操作
FFmpeg实用命令:音频、视频格式转换和其它操作
下面命令从mp4文件中提取出MP3音频:
ffmpeg -i yourvideo.mp4 -vn -ab 128k outputaudio.mp3
-vn用来提取声音,-ab指定存储为128Kbps mp3格式,可以指定256K或其他码率。
Cutting small sections
To extract only a small segment in the middle of a movie, it can be used in combination with -t which specifies the duration, like -ss 60 -t 10 to capture from second 60 to 70. Or you can use the -to option to specify an out point, like -ss 60 -to 70 to capture from second 60 to 70. -t and -to are mutually exclusive. If you use both, -t will be used.
Note that if you specify -ss before -i only, the timestamps will be reset to zero, so -t and -to have not the same effect. If you want to keep the original timestamps, add the -copytsoption.
The first command will cut from 00:01:00 to 00:03:00 (in the original), using the faster seek.
The second command will cut from 00:01:00 to 00:02:00, as intended, using the slower seek.
The third command will cut from 00:01:00 to 00:02:00, as intended, using the faster seek.
Example:
下面命令从mp4文件中提取出MP3音频:
ffmpeg -i yourvideo.mp4 -vn -ab 128k outputaudio.mp3
-vn用来提取声音,-ab指定存储为128Kbps mp3格式,可以指定256K或其他码率。
Cutting small sections
To extract only a small segment in the middle of a movie, it can be used in combination with -t which specifies the duration, like -ss 60 -t 10 to capture from second 60 to 70. Or you can use the -to option to specify an out point, like -ss 60 -to 70 to capture from second 60 to 70. -t and -to are mutually exclusive. If you use both, -t will be used.
Note that if you specify -ss before -i only, the timestamps will be reset to zero, so -t and -to have not the same effect. If you want to keep the original timestamps, add the -copytsoption.
The first command will cut from 00:01:00 to 00:03:00 (in the original), using the faster seek.
The second command will cut from 00:01:00 to 00:02:00, as intended, using the slower seek.
The third command will cut from 00:01:00 to 00:02:00, as intended, using the faster seek.
ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy cut.mp4 ffmpeg -i video.mp4 -ss 00:01:00 -to 00:02:00 -c copy cut.mp4 ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4If you cut with stream copy (-c copy) you need to use the -avoid_negative_ts 1 option if you want to use that segment with the concat demuxer .
Example:
ffmpeg -ss 00:03:00 -i video.mp4 -t 60 -c copy -avoid_negative_ts 1 cut.mp4
Time unit syntax
Note that you can use two different time unit formats: sexagesimal (HOURS:MM:SS.MICROSECONDS, as in 01:23:45.678), or in seconds. If a fraction is used, such as 02:30.05, this is interpreted as "5 100ths of a second", not as frame 5. For instance, 02:30.5 would be 2 minutes, 30 seconds, and a half a second, which would be the same as using 150.5 in seconds.2017年2月22日星期三
What are AcDbCurve/Curve Parameters? ObjectARX/.NET
What are AcDbCurve/Curve Parameters? ObjectARX/.NET
By Philippe Leefsma
Please can you explain what Parameters are?
In simple terms, the parameter of a curve defines a 0-n floating point value indicating point positions on a curve.
Lets use a polyline as an example of what to expect from a parameter value.
If we have a polyline which has 5 points, and each of the 4 lines are different in length. If we call AcDbCurve::getStartParam() we will be returned a value of 0, if we call AcDbCurve::getEndParam() we will get a value of 4, if we extract the 2nd polyline point and call AcDbCurve::getParamAt() we will be returned a parameter value of 1. So you can see that in the case of a polyline, the parameter values directly represent each of the start and end points of the Polyline.
Parameters are very powerful, for instance, I can extract the halfway point between p1 and p2 by calling AcDbCurve::getPointAtParam(0.5) or the third of a distance between p3 and p4 by calling AcDbCurve::getPointAtParam(2.33333).
Another point to mention is that parameter values, although define a 0-n floating point value indicating point positions on a curve, are designed to best fit the needs of the curve being implemented. For example, the polyline example above uses parameter values as start and end point positions, this is a very efficient way to use parameters for a polyline and indeed makes logical sense, but for a circle the parameter values correspond to a radian increment around the circle. So, for a polyline the parameter value is non-uniform whereas the circle uses a uniform parameter value.
Please can you explain what Parameters are?
In simple terms, the parameter of a curve defines a 0-n floating point value indicating point positions on a curve.
Lets use a polyline as an example of what to expect from a parameter value.
If we have a polyline which has 5 points, and each of the 4 lines are different in length. If we call AcDbCurve::getStartParam() we will be returned a value of 0, if we call AcDbCurve::getEndParam() we will get a value of 4, if we extract the 2nd polyline point and call AcDbCurve::getParamAt() we will be returned a parameter value of 1. So you can see that in the case of a polyline, the parameter values directly represent each of the start and end points of the Polyline.
Parameters are very powerful, for instance, I can extract the halfway point between p1 and p2 by calling AcDbCurve::getPointAtParam(0.5) or the third of a distance between p3 and p4 by calling AcDbCurve::getPointAtParam(2.33333).
Another point to mention is that parameter values, although define a 0-n floating point value indicating point positions on a curve, are designed to best fit the needs of the curve being implemented. For example, the polyline example above uses parameter values as start and end point positions, this is a very efficient way to use parameters for a polyline and indeed makes logical sense, but for a circle the parameter values correspond to a radian increment around the circle. So, for a polyline the parameter value is non-uniform whereas the circle uses a uniform parameter value.
2017年2月8日星期三
2017年1月14日星期六
ogr2ogr kml
将kml文件转换为dxf文件
ogr2ogr -t_srs EPSG:2385 -f DXF lhk_fbd.dxf doc.kml
更新:以上方法会出错,不知道原因
01 未解决
02 多出的字段是因为libkml
03 OGR_SKIP
ogrinfo -al --config OGR_SKIP LIBKML qyl.kml
ogr2ogr --config OGR_SKIP LIBKML -t_srs EPSG:2436 -f DXF qyl.dxf qyl.kml
ogr2ogr -t_srs EPSG:2385 -f DXF lhk_fbd.dxf doc.kml
更新:以上方法会出错,不知道原因
01 未解决
02 多出的字段是因为libkml
03 OGR_SKIP
ogrinfo -al --config OGR_SKIP LIBKML qyl.kml
ogr2ogr --config OGR_SKIP LIBKML -t_srs EPSG:2436 -f DXF qyl.dxf qyl.kml
2017年1月12日星期四
msys2 cgal
$ pacman -Qe
mingw-w64-x86_64-cgal 4.9-1
mingw-w64-x86_64-cmake 3.7.0-1
mingw-w64-x86_64-freeglut 3.0.0-4
mingw-w64-x86_64-gcc 6.2.0-2
mingw-w64-x86_64-make 4.1.2351.a80a8b8-1
mingw-w64-x86_64-mesa 13.0.2-1
mingw-w64-x86_64-qt-creator 4.1.0-1
mingw-w64-x86_64-qt5 5.6.2-4
cmake -G "MinGW Makefiles" -DCMAKE_MAKE_PROGRAM=mingw32-make .
"C:\msys64\home\li\examples\Core\CMakeFiles\delaunay.dir\flags.make"
CXX_DEFINES = -DCGAL_Core_EXPORTS -DCGAL_USE_GMP -DCGAL_USE_MPFR
mingw-w64-x86_64-cgal 4.9-1
mingw-w64-x86_64-cmake 3.7.0-1
mingw-w64-x86_64-freeglut 3.0.0-4
mingw-w64-x86_64-gcc 6.2.0-2
mingw-w64-x86_64-make 4.1.2351.a80a8b8-1
mingw-w64-x86_64-mesa 13.0.2-1
mingw-w64-x86_64-qt-creator 4.1.0-1
mingw-w64-x86_64-qt5 5.6.2-4
cmake -G "MinGW Makefiles" -DCMAKE_MAKE_PROGRAM=mingw32-make .
"C:\msys64\home\li\examples\Core\CMakeFiles\delaunay.dir\flags.make"
CXX_DEFINES = -DCGAL_Core_EXPORTS -DCGAL_USE_GMP -DCGAL_USE_MPFR
2017年1月4日星期三
2017年1月2日星期一
2017年1月1日星期日
brew with a socks5 proxy
brew with a socks5 proxy
set a socks proxy with git for the http transport
set a socks proxy with git for the http transport
git config --global http.proxy 'socks5://127.0.0.1:1081'
set a socks proxy for curl: just add proxy=socks5://127.0.0.1:1081
to ~/.curlrc
.
订阅:
博文 (Atom)